Skip to content

Commit 1ecea00

Browse files
committed
Write some more tests for the TestEngine
1 parent 04b1775 commit 1ecea00

File tree

1 file changed

+168
-154
lines changed

1 file changed

+168
-154
lines changed

RubberduckTests/UnitTesting/EngineTests.cs

Lines changed: 168 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)