public void ExecutesCodeOnCorrectThread() { int? threadEngineWasCreatedOn = null; var threadsExecuteWasCalledFrom = new List<int>(); var innerEngine = new Mock<IJsEngine>(); innerEngine.Setup(x => x.Execute(It.IsAny<string>())) .Callback(() => threadsExecuteWasCalledFrom.Add(Thread.CurrentThread.ManagedThreadId) ); var factory = new Mock<IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()) .Returns(innerEngine.Object) .Callback(() => threadEngineWasCreatedOn = Thread.CurrentThread.ManagedThreadId); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); Assert.AreEqual(true, engine.IsThreadAlive); // Engine was created on a different thread Assert.AreNotEqual(Thread.CurrentThread.ManagedThreadId, threadEngineWasCreatedOn); engine.Execute("alert(hello)"); engine.Execute("alert(world)"); // Execute was called twice innerEngine.Verify(x => x.Execute(It.IsAny<string>()), Times.Exactly(2)); // Both calls ran on same thread Assert.AreEqual(threadsExecuteWasCalledFrom[0], threadsExecuteWasCalledFrom[1]); // Both calls ran on the thread the engine was created on Assert.AreEqual(threadEngineWasCreatedOn, threadsExecuteWasCalledFrom[0]); }
public void ExecutesCodeOnCorrectThread() { int?threadEngineWasCreatedOn = null; var threadsExecuteWasCalledFrom = new List <int>(); var innerEngine = new Mock <IJsEngine>(); innerEngine.Setup(x => x.Execute(It.IsAny <string>())) .Callback(() => threadsExecuteWasCalledFrom.Add(Thread.CurrentThread.ManagedThreadId) ); var factory = new Mock <IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()) .Returns(innerEngine.Object) .Callback(() => threadEngineWasCreatedOn = Thread.CurrentThread.ManagedThreadId); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); Assert.AreEqual(true, engine.IsThreadAlive); // Engine was created on a different thread Assert.AreNotEqual(Thread.CurrentThread.ManagedThreadId, threadEngineWasCreatedOn); engine.Execute("alert(hello)"); engine.Execute("alert(world)"); // Execute was called twice innerEngine.Verify(x => x.Execute(It.IsAny <string>()), Times.Exactly(2)); // Both calls ran on same thread Assert.AreEqual(threadsExecuteWasCalledFrom[0], threadsExecuteWasCalledFrom[1]); // Both calls ran on the thread the engine was created on Assert.AreEqual(threadEngineWasCreatedOn, threadsExecuteWasCalledFrom[0]); }
public void HandlesDisposal() { var innerEngine = new Mock<IJsEngine>(); var factory = new Mock<IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()).Returns(innerEngine.Object); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); engine.Dispose(); innerEngine.Verify(x => x.Dispose()); Assert.That(() => engine.IsThreadAlive, Is.False.After(250, 5)); }
public void HandlesCallFunctionThatReturnsObject() { var innerEngine = new Mock<IJsEngine>(); innerEngine.Setup(x => x.CallFunction("hello")).Returns("Hello World"); var factory = new Mock<IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()).Returns(innerEngine.Object); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); var result = engine.CallFunction("hello"); Assert.AreEqual("Hello World", result); }
public void HandlesCallFunctionThatReturnsGeneric() { var innerEngine = new Mock<IJsEngine>(); innerEngine.Setup(x => x.CallFunction<int>("add", 40, 2)).Returns(42); var factory = new Mock<IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()).Returns(innerEngine.Object); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); var result = engine.CallFunction<int>("add", 40, 2); Assert.AreEqual(42, result); }
public void HandlesDisposal() { var innerEngine = new Mock <IJsEngine>(); var factory = new Mock <IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()).Returns(innerEngine.Object); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); engine.Dispose(); innerEngine.Verify(x => x.Dispose()); Assert.That(() => engine.IsThreadAlive, Is.False.After(250, 5)); }
public void HandlesCallFunctionThatReturnsObject() { var innerEngine = new Mock <IJsEngine>(); innerEngine.Setup(x => x.CallFunction("hello")).Returns("Hello World"); var factory = new Mock <IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()).Returns(innerEngine.Object); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); var result = engine.CallFunction("hello"); Assert.AreEqual("Hello World", result); }
public void HandlesCallFunctionThatReturnsGeneric() { var innerEngine = new Mock <IJsEngine>(); innerEngine.Setup(x => x.CallFunction <int>("add", 40, 2)).Returns(42); var factory = new Mock <IEngineFactoryForMock>(); factory.Setup(x => x.EngineFactory()).Returns(innerEngine.Object); var engine = new JsEngineWithOwnThread(factory.Object.EngineFactory, new CancellationToken()); var result = engine.CallFunction <int>("add", 40, 2); Assert.AreEqual(42, result); }