@@ -145,160 +145,174 @@ Public Sub TestMethod1()
145145 Assert . AreEqual ( new TestResult ( TestOutcome . Succeeded ) , completionEvents . First ( ) . Result ) ;
146146 }
147147
148- //[Test]
149- //public void TestEngine_SuccessfulTests()
150- //{
151- // var actual = _engine.PassedTests().First();
152-
153- // Assert.AreEqual(_successfulMethod, actual);
154- //}
155-
156- //[Test]
157- //public void TestEngine_NotRunTests()
158- //{
159- // var actual = _engine.NotRunTests().First();
160-
161- // Assert.AreEqual(_notRunMethod, actual);
162- //}
163-
164- //[Test]
165- //public void TestEngine_LastRunTests_ReturnsAllRunTests()
166- //{
167- // var actual = _engine.LastRunTests().ToList();
168- // var expected = new List<TestMethod>()
169- // {
170- // _failedMethod, _inconclusiveMethod, _successfulMethod
171- // };
172-
173- // CollectionAssert.AreEquivalent(expected, actual);
174- //}
175-
176- //[Test]
177- //public void TestEngine_LastRunTests_Successful()
178- //{
179- // var actual = _engine.LastRunTests(TestOutcome.Succeeded).First();
180-
181- // Assert.AreEqual(_successfulMethod, actual);
182- //}
183-
184- //[Test]
185- //public void TestEngine_LastRunTests_Failed()
186- //{
187- // var actual = _engine.LastRunTests(TestOutcome.Failed).First();
188-
189- // Assert.AreEqual(_failedMethod, actual);
190- //}
191-
192- //[Test]
193- //public void TestEngine_LastRunTests_Inconclusive()
194- //{
195- // var actual = _engine.LastRunTests(TestOutcome.Inconclusive).First();
196-
197- // Assert.AreEqual(_inconclusiveMethod, actual);
198- //}
199-
200- //[Test]
201- //public void TestEngine_Run_ModuleIntialize_IsRunOnce()
202- //{
203- // //arrange
204- // _engine.ModuleInitialize += CatchEvent;
205-
206- // var tests = _engine.AllTests.Keys;
207-
208- // //act
209- // _engine.Run(tests);
210-
211- // Assert.IsTrue(_wasEventRaised, "Module Intialize was not run.");
212- // Assert.AreEqual(1, _eventCount, "Module Intialzie expected to be run once.");
213- //}
214-
215- //[Test]
216- //public void TestEngine_Run_ModuleCleanup_IsRunOnce()
217- //{
218- // //arrange
219- // _engine.ModuleCleanup += CatchEvent;
220-
221- // //act
222- // _engine.Run(_engine.AllTests.Keys);
223-
224- // //assert
225- // Assert.IsTrue(_wasEventRaised, "Module Cleanup was not run.");
226- // Assert.AreEqual(1, _eventCount, "Module Cleanup expected to be run once.");
227- //}
228-
229- //[Test]
230- //public void TestEngine_Run_MethodIntialize_IsRunForEachTestMethod()
231- //{
232- // //arrange
233- // var expectedCount = _engine.AllTests.Count;
234- // _engine.MethodInitialize += CatchEvent;
235-
236- // //act
237- // _engine.Run(_engine.AllTests.Keys);
238-
239- // //assert
240- // Assert.IsTrue(_wasEventRaised, "Method Intialize was not run.");
241- // Assert.AreEqual(expectedCount, _eventCount, "Method Intialized was expected to be run {0} times", expectedCount);
242- //}
243-
244- //[Test]
245- //public void TestEngine_Run_MethodCleanup_IsRunForEachTestMethod()
246- //{
247- // //arrange
248- // var expectedCount = _engine.AllTests.Count;
249- // _engine.MethodCleanup += CatchEvent;
250-
251- // //act
252- // _engine.Run(_engine.AllTests.Keys);
253-
254- // //assert
255- // Assert.IsTrue(_wasEventRaised, "Method Initialize was not run.");
256- // Assert.AreEqual(expectedCount, _eventCount, "Method Initialized was expected to be run {0} times", expectedCount);
257- //}
258-
259- //[Test]
260- //public void TestEngine_Run_TestCompleteIsRaisedForEachTestMethod()
261- //{
262- // //arrange
263- // var expectedCount = _engine.AllTests.Count;
264- // _engine.TestCompleted += EngineOnTestComplete;
265-
266- // //act
267- // _engine.Run(_engine.AllTests.Keys);
268-
269- // //assert
270- // Assert.IsTrue(_wasEventRaised, "TestCompleted event was not raised.");
271- // Assert.AreEqual(expectedCount, _eventCount, "TestCompleted event was expected to be raised {0} times.", expectedCount);
272- //}
273-
274- //[Test]
275- //public void TestEngine_Run_WhenTestListIsEmpty_Bail()
276- //{
277- // //arrange
278- // _engine.MethodInitialize += CatchEvent;
279-
280- // //act
281- // _engine.Run(new List<TestMethod>());
282-
283- // //assert
284- // Assert.IsFalse(_wasEventRaised, "No methods should run when passed an empty list of tests.");
285- //}
286-
287- //private void EngineOnTestComplete(object sender, TestCompletedEventArgs testCompletedEventArgs)
288- //{
289- // CatchEvent();
290- //}
291-
292- //private void CatchEvent(object sender, TestModuleEventArgs e)
293- //{
294- // CatchEvent();
295- //}
296-
297- //private void CatchEvent()
298- //{
299- // _wasEventRaised = true;
300- // _eventCount++;
301- //}
148+ [ Test ]
149+ [ Category ( "UnitTesting" ) ]
150+ public void TestEngine_Run_AndAssertSuccess_RaisesCompletionEvent_Success ( )
151+ {
152+ var testMethods = @"'@TestMethod
153+ Public Sub TestMethod1()
154+ End Sub" ;
155+
156+ var builder = new MockVbeBuilder ( )
157+ . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
158+ . AddComponent ( "TestModule1" , ComponentType . StandardModule , GetTestModuleInput + testMethods )
159+ . AddProjectToVbeBuilder ( ) ;
160+
161+ var vbe = builder . Build ( ) . Object ;
162+ var parser = MockParser . Create ( vbe ) ;
163+ var typeLibApi = new Mock < IVBETypeLibsAPI > ( ) ;
164+ var wrapperProvider = new Mock < ITypeLibWrapperProvider > ( ) ;
165+ var typeLibMock = new Mock < ITypeLibWrapper > ( ) ;
166+ wrapperProvider . Setup ( p => p . TypeLibWrapperFromProject ( It . IsAny < string > ( ) ) )
167+ . Returns ( typeLibMock . Object )
168+ . Verifiable ( ) ;
169+
170+ typeLibApi . Setup ( api => api . ExecuteCode ( typeLibMock . Object , "TestModule1" , "TestMethod1" , null ) )
171+ . Callback ( ( ) => AssertHandler . OnAssertSucceeded ( ) )
172+ . Returns ( null )
173+ . Verifiable ( ) ;
174+ typeLibMock . Setup ( tlm => tlm . Dispose ( ) ) . Verifiable ( ) ;
175+
176+
177+ var fakesFactory = new Mock < IFakesFactory > ( ) ;
178+ var createdFakes = new Mock < IFakes > ( ) ;
179+ fakesFactory . Setup ( factory => factory . Create ( ) )
180+ . Returns ( createdFakes . Object ) ;
181+
182+ var dispatcher = new Mock < IUiDispatcher > ( ) ;
183+ dispatcher . Setup ( d => d . InvokeAsync ( It . IsAny < Action > ( ) ) )
184+ . Callback ( ( Action action ) => action . Invoke ( ) )
185+ . Verifiable ( ) ;
186+
187+ var completionEvents = new List < TestCompletedEventArgs > ( ) ;
188+ using ( var state = parser . State )
189+ {
190+ var engine = new TestEngine ( state , fakesFactory . Object , typeLibApi . Object , wrapperProvider . Object , dispatcher . Object ) ;
191+ engine . TestCompleted += ( source , args ) => completionEvents . Add ( args ) ;
192+ parser . Parse ( new CancellationTokenSource ( ) ) ;
193+ if ( ! engine . CanRun )
194+ {
195+ Assert . Inconclusive ( "Parser Error" ) ;
196+ }
197+ engine . Run ( engine . Tests ) ;
198+ }
199+ Mock . Verify ( dispatcher , typeLibApi , wrapperProvider , typeLibMock ) ;
200+ Assert . AreEqual ( 1 , completionEvents . Count ) ;
201+ Assert . AreEqual ( new TestResult ( TestOutcome . Succeeded ) , completionEvents . First ( ) . Result ) ;
202+ }
203+
204+ [ Test ]
205+ [ Category ( "UnitTesting" ) ]
206+ public void TestEngine_Run_AndAssertInconclusive_RaisesCompletionEvent_Inconclusive ( )
207+ {
208+ var testMethods = @"'@TestMethod
209+ Public Sub TestMethod1()
210+ End Sub" ;
211+
212+ var builder = new MockVbeBuilder ( )
213+ . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
214+ . AddComponent ( "TestModule1" , ComponentType . StandardModule , GetTestModuleInput + testMethods )
215+ . AddProjectToVbeBuilder ( ) ;
216+
217+ var vbe = builder . Build ( ) . Object ;
218+ var parser = MockParser . Create ( vbe ) ;
219+ var typeLibApi = new Mock < IVBETypeLibsAPI > ( ) ;
220+ var wrapperProvider = new Mock < ITypeLibWrapperProvider > ( ) ;
221+ var typeLibMock = new Mock < ITypeLibWrapper > ( ) ;
222+ wrapperProvider . Setup ( p => p . TypeLibWrapperFromProject ( It . IsAny < string > ( ) ) )
223+ . Returns ( typeLibMock . Object )
224+ . Verifiable ( ) ;
225+
226+ typeLibApi . Setup ( api => api . ExecuteCode ( typeLibMock . Object , "TestModule1" , "TestMethod1" , null ) )
227+ . Callback ( ( ) => AssertHandler . OnAssertInconclusive ( "Test Message" ) )
228+ . Returns ( null )
229+ . Verifiable ( ) ;
230+ typeLibMock . Setup ( tlm => tlm . Dispose ( ) ) . Verifiable ( ) ;
231+
232+
233+ var fakesFactory = new Mock < IFakesFactory > ( ) ;
234+ var createdFakes = new Mock < IFakes > ( ) ;
235+ fakesFactory . Setup ( factory => factory . Create ( ) )
236+ . Returns ( createdFakes . Object ) ;
237+
238+ var dispatcher = new Mock < IUiDispatcher > ( ) ;
239+ dispatcher . Setup ( d => d . InvokeAsync ( It . IsAny < Action > ( ) ) )
240+ . Callback ( ( Action action ) => action . Invoke ( ) )
241+ . Verifiable ( ) ;
242+
243+ var completionEvents = new List < TestCompletedEventArgs > ( ) ;
244+ using ( var state = parser . State )
245+ {
246+ var engine = new TestEngine ( state , fakesFactory . Object , typeLibApi . Object , wrapperProvider . Object , dispatcher . Object ) ;
247+ engine . TestCompleted += ( source , args ) => completionEvents . Add ( args ) ;
248+ parser . Parse ( new CancellationTokenSource ( ) ) ;
249+ if ( ! engine . CanRun )
250+ {
251+ Assert . Inconclusive ( "Parser Error" ) ;
252+ }
253+ engine . Run ( engine . Tests ) ;
254+ }
255+ Mock . Verify ( dispatcher , typeLibApi , wrapperProvider , typeLibMock ) ;
256+ Assert . AreEqual ( 1 , completionEvents . Count ) ;
257+ Assert . AreEqual ( new TestResult ( TestOutcome . Inconclusive , "Test Message" ) , completionEvents . First ( ) . Result ) ;
258+ }
259+
260+ [ Test ]
261+ [ Category ( "UnitTesting" ) ]
262+ public void TestEngine_Run_AndAssertFailed_RaisesCompletionEvent_Failed ( )
263+ {
264+ var testMethods = @"'@TestMethod
265+ Public Sub TestMethod1()
266+ End Sub" ;
267+
268+ var builder = new MockVbeBuilder ( )
269+ . ProjectBuilder ( "TestProject1" , ProjectProtection . Unprotected )
270+ . AddComponent ( "TestModule1" , ComponentType . StandardModule , GetTestModuleInput + testMethods )
271+ . AddProjectToVbeBuilder ( ) ;
272+
273+ var vbe = builder . Build ( ) . Object ;
274+ var parser = MockParser . Create ( vbe ) ;
275+ var typeLibApi = new Mock < IVBETypeLibsAPI > ( ) ;
276+ var wrapperProvider = new Mock < ITypeLibWrapperProvider > ( ) ;
277+ var typeLibMock = new Mock < ITypeLibWrapper > ( ) ;
278+ wrapperProvider . Setup ( p => p . TypeLibWrapperFromProject ( It . IsAny < string > ( ) ) )
279+ . Returns ( typeLibMock . Object )
280+ . Verifiable ( ) ;
281+
282+ typeLibApi . Setup ( api => api . ExecuteCode ( typeLibMock . Object , "TestModule1" , "TestMethod1" , null ) )
283+ . Callback ( ( ) => AssertHandler . OnAssertFailed ( "Test Message" , "TestMethod1" ) )
284+ . Returns ( null )
285+ . Verifiable ( ) ;
286+ typeLibMock . Setup ( tlm => tlm . Dispose ( ) ) . Verifiable ( ) ;
287+
288+
289+ var fakesFactory = new Mock < IFakesFactory > ( ) ;
290+ var createdFakes = new Mock < IFakes > ( ) ;
291+ fakesFactory . Setup ( factory => factory . Create ( ) )
292+ . Returns ( createdFakes . Object ) ;
293+
294+ var dispatcher = new Mock < IUiDispatcher > ( ) ;
295+ dispatcher . Setup ( d => d . InvokeAsync ( It . IsAny < Action > ( ) ) )
296+ . Callback ( ( Action action ) => action . Invoke ( ) )
297+ . Verifiable ( ) ;
298+
299+ var completionEvents = new List < TestCompletedEventArgs > ( ) ;
300+ using ( var state = parser . State )
301+ {
302+ var engine = new TestEngine ( state , fakesFactory . Object , typeLibApi . Object , wrapperProvider . Object , dispatcher . Object ) ;
303+ engine . TestCompleted += ( source , args ) => completionEvents . Add ( args ) ;
304+ parser . Parse ( new CancellationTokenSource ( ) ) ;
305+ if ( ! engine . CanRun )
306+ {
307+ Assert . Inconclusive ( "Parser Error" ) ;
308+ }
309+ engine . Run ( engine . Tests ) ;
310+ }
311+ Mock . Verify ( dispatcher , typeLibApi , wrapperProvider , typeLibMock ) ;
312+ Assert . AreEqual ( 1 , completionEvents . Count ) ;
313+ Assert . AreEqual ( new TestResult ( TestOutcome . Failed , string . Format ( AssertMessages . Assert_FailedMessageFormat , "TestMethod1" , "Test Message" ) ) , completionEvents . First ( ) . Result ) ;
314+ }
315+
302316
303317
304318 private const string RawInput = @"Option Explicit
0 commit comments