|
5 | 5 | using NUnit.Framework;
|
6 | 6 | using Rubberduck.Parsing.Rewriter;
|
7 | 7 | using Rubberduck.Parsing.VBA.Parsing;
|
| 8 | +using Rubberduck.VBEditor; |
8 | 9 |
|
9 | 10 | namespace RubberduckTests.Rewriter
|
10 | 11 | {
|
@@ -177,10 +178,47 @@ public void CallingTheRewritingAllowedCallbackFromANoLongerActiveAttributesSessi
|
177 | 178 | }
|
178 | 179 | }
|
179 | 180 |
|
180 |
| - private IRewritingManager RewritingManager(out MockRewriteSessionFactory mockFactory) |
| 181 | + [Test] |
| 182 | + [Category("Rewriter")] |
| 183 | + public void CallingTheRewritingAllowedCallbackFromAnActiveCodePaneSessionRequestMemberAttributeRecoveryForTheCheckedOutModules() |
| 184 | + { |
| 185 | + var memberAttributeRecovererMock = new Mock<IMemberAttributeRecoverer>(); |
| 186 | + memberAttributeRecovererMock.Setup(m => m.RecoverCurrentMemberAttributesAfterNextParse(It.IsAny<IEnumerable<QualifiedModuleName>>())); |
| 187 | + |
| 188 | + var rewritingManager = RewritingManager(out var mockFactory, memberAttributeRecovererMock.Object); |
| 189 | + var codePaneSession = rewritingManager.CheckOutCodePaneSession(); |
| 190 | + |
| 191 | + var moduleToCheckOutRewriterFor = new QualifiedModuleName("project", "path", "module"); |
| 192 | + codePaneSession.CheckOutModuleRewriter(moduleToCheckOutRewriterFor); |
| 193 | + |
| 194 | + codePaneSession.TryRewrite(); |
| 195 | + |
| 196 | + memberAttributeRecovererMock.Verify(m => m.RecoverCurrentMemberAttributesAfterNextParse(new HashSet<QualifiedModuleName>{ moduleToCheckOutRewriterFor }), Times.Once); |
| 197 | + } |
| 198 | + |
| 199 | + [Test] |
| 200 | + [Category("Rewriter")] |
| 201 | + public void CallingTheRewritingAllowedCallbackFromAnActiveAttributesSessionDoesNotRequestMemberAttributeRecovery() |
181 | 202 | {
|
| 203 | + var memberAttributeRecovererMock = new Mock<IMemberAttributeRecoverer>(); |
| 204 | + memberAttributeRecovererMock.Setup(m => m.RecoverCurrentMemberAttributesAfterNextParse(It.IsAny<IEnumerable<QualifiedModuleName>>())); |
| 205 | + |
| 206 | + var rewritingManager = RewritingManager(out var mockFactory, memberAttributeRecovererMock.Object); |
| 207 | + var codePaneSession = rewritingManager.CheckOutAttributesSession(); |
| 208 | + |
| 209 | + var moduleToCheckOutRewriterFor = new QualifiedModuleName("project", "path", "module"); |
| 210 | + codePaneSession.CheckOutModuleRewriter(moduleToCheckOutRewriterFor); |
| 211 | + |
| 212 | + codePaneSession.TryRewrite(); |
| 213 | + |
| 214 | + memberAttributeRecovererMock.Verify(m => m.RecoverCurrentMemberAttributesAfterNextParse(It.IsAny<IEnumerable<QualifiedModuleName>>()), Times.Never); |
| 215 | + } |
| 216 | + |
| 217 | + private IRewritingManager RewritingManager(out MockRewriteSessionFactory mockFactory, IMemberAttributeRecoverer memberAttributeRecoverer = null) |
| 218 | + { |
| 219 | + var recoverer = memberAttributeRecoverer ?? new Mock<IMemberAttributeRecoverer>().Object; |
182 | 220 | mockFactory = new MockRewriteSessionFactory();
|
183 |
| - return new RewritingManager(mockFactory); |
| 221 | + return new RewritingManager(mockFactory, recoverer); |
184 | 222 | }
|
185 | 223 | }
|
186 | 224 |
|
@@ -215,6 +253,12 @@ private Mock<IRewriteSession> MockSession(Func<IRewriteSession, bool> rewritingA
|
215 | 253 | mockSession.Setup(m => m.Invalidate()).Callback(() => isInvalidated = true);
|
216 | 254 | mockSession.Setup(m => m.TargetCodeKind).Returns(targetCodeKind);
|
217 | 255 |
|
| 256 | + var checkedOutModules = new HashSet<QualifiedModuleName>(); |
| 257 | + mockSession.Setup(m => m.CheckOutModuleRewriter(It.IsAny<QualifiedModuleName>())) |
| 258 | + .Returns( (QualifiedModuleName module) => null) |
| 259 | + .Callback((QualifiedModuleName module) => checkedOutModules.Add(module)); |
| 260 | + mockSession.Setup(m => m.CheckedOutModules).Returns(() => checkedOutModules); |
| 261 | + |
218 | 262 | return mockSession;
|
219 | 263 | }
|
220 | 264 |
|
|
0 commit comments