public void BeginExecuteInvokesProjectWithNoDataIfUsesInputIsFalseTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); rmMock.Verify(m => m.Invoke(key), Times.Once()); rmMock.Verify(m => m.Invoke(key, It.IsAny<IEnumerable<object>>()), Times.Never()); }
public void CallbackPassesReferenceToExecutionItemTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false, }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; var i = CreateItem(args, d); var rm = new Mock<IRuntimeManager>().Object; var mre = new ManualResetEvent(false); IExecutionItem callbackArg = null; i.BeginExecute(rm, ei => { callbackArg = ei; mre.Set(); }); mre.WaitOne(200); Assert.AreSame(i, callbackArg); }
public void BeginExecuteThrowsExceptionIfStateIsNotPendingTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = false }; var i = CreateItem(args); var rm = new Mock<IRuntimeManager>().Object; i.BeginExecute(rm, ei => { }); }
private void PerformProjectPathTest(string ruleProjectPath, string expectedItemProjectPath) { var args = new MockProjectInvocationRuleSetupArgs() { ProjectPath = ruleProjectPath }; var i = CreateItem(args); Assert.AreEqual(expectedItemProjectPath, i.ProjectPath); }
private void PerformWritesOutputDataTest(OperationStatus result, bool usesOutput) { object writtenData = null; var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false, UsesOutput = usesOutput, WriteOutputData = new Action<object>(o => writtenData = o) }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); object data = new object(); var orMock = new Mock<IOperationResult>(); orMock.Setup(m => m.Status).Returns(result); orMock.Setup(m => m.Data).Returns(data); rmMock.Setup(m => m.Invoke(key)).Returns(orMock.Object); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); if (result == OperationStatus.Ok && usesOutput) { Assert.AreSame(data, writtenData); } else { Assert.IsNull(writtenData); } }
private void PerformLoadVerificationTest(int? detailKey, Times loadInvocationTimes) { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, ProjectPath = "path", UsesInput = false }; var d = new ProjectExecutionDetail() { Key = detailKey }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); rmMock.Verify(m => m.Load(args.ProjectPath, It.IsAny<IStartupArgs>()), loadInvocationTimes); }
private void PerformProjectExecutionStateTest(bool canExecute, ProjectExecutionState expectedState) { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = canExecute }; var i = CreateItem(args); Assert.AreEqual(expectedState, i.State); }
private static void SetupForLongInvocation(out ExecutionItem i, out IRuntimeManager manager) { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); rmMock.Setup(m => m.Invoke(key)).Callback(() => Thread.Sleep(200)); manager = rmMock.Object; }
private void PerformKeyTest(OperationStatus result, bool expectedKeyIsNull) { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); var orMock = new Mock<IOperationResult>(); orMock.Setup(m => m.Status).Returns(result); rmMock.Setup(m => m.Invoke(key)).Returns(orMock.Object); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); if (expectedKeyIsNull) { Assert.IsNull(i.Key); } else { Assert.IsNotNull(i.Key); Assert.AreEqual(key, i.Key.Value); } }
private static ExecutionItem CreateItem(MockProjectInvocationRuleSetupArgs args = null, ProjectExecutionDetail detail = null) { IProjectInvocationRule r = CreateRule(args); ProjectExecutionDetail d = detail ?? ProjectExecutionDetail.Create(r); return new ExecutionItem(r, d); }
private static IProjectInvocationRule CreateRule(MockProjectInvocationRuleSetupArgs args) { var mock = new Mock<IProjectInvocationRule>(); if (args != null) { mock.Setup(m => m.Id).Returns(args.Id); mock.Setup(m => m.UsesInput).Returns(args.UsesInput); mock.Setup(m => m.UsesOutput).Returns(args.UsesOutput); mock.Setup(m => m.OutputSheetName).Returns(args.OutputSheetName); mock.Setup(m => m.OutputCellRange).Returns(args.OutputCellRange); mock.Setup(m => m.TimeLimit).Returns(args.TimeLimit); mock.Setup(m => m.Unit).Returns(args.Unit); mock.Setup(m => m.ProjectPath).Returns(args.ProjectPath); mock.Setup(m => m.CanExecute).Returns(args.CanExecute); mock.Setup(m => m.ReadInputData()).Returns(args.ReadInputData); Action<object> a = args.WriteOutputData; if (a != null) { mock.Setup(m => m.WriteOutputData(It.IsAny<object>())).Callback(a); } } return mock.Object; }
public void UpToThreeDataAggregationsAttemptedTest() { int[] data = { 46 }; var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, ProjectPath = "path", UsesInput = true, ReadInputData = data.Cast<object>() }; var d = new ProjectExecutionDetail() { Key = 1 }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); var orMock = new Mock<IOperationResult>(); orMock.Setup(m => m.Status).Returns(OperationStatus.StartupDataConversionProblem); rmMock.Setup(m => m.Invoke(It.IsAny<int>(), It.IsAny<object>())).Returns(orMock.Object); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); rmMock.Verify(m => m.Invoke(It.IsAny<int>(), It.IsAny<object>()), Times.Exactly(3)); }
public void UnloadAttemptedIfAbortCalledWhileExecutingTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); rmMock.Setup(m => m.Invoke(key)).Callback(() => Thread.Sleep(200)); i.BeginExecute(rmMock.Object, null); Thread.Sleep(100); i.Abort(rmMock.Object); rmMock.Verify(m => m.Unload(key), Times.Once()); }
public void ProjectReloadedIfDataConversionProblemTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, ProjectPath = "path", UsesInput = true, ReadInputData = new object[1] }; var d = new ProjectExecutionDetail() { Key = 1 }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); var orMock = new Mock<IOperationResult>(); orMock.Setup(m => m.Status).Returns(OperationStatus.StartupDataConversionProblem); rmMock.Setup(m => m.Invoke(It.IsAny<int>(), It.IsAny<object>())).Returns(orMock.Object); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); rmMock.Verify(m => m.Load(args.ProjectPath, It.IsAny<IStartupArgs>()), Times.AtLeastOnce()); }
public void NullReturnFromInvocationIndicatesAbortedProjectTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false }; int key = 1; var d = new ProjectExecutionDetail() { Key = key }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); rmMock.Setup(m => m.Invoke(key)).Returns((IOperationResult)null); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); Assert.AreEqual(ProjectExecutionState.Aborted, i.State); }
public void InvocationErrorMessageWrittenToLogTest() { var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = true, UsesInput = false, }; int key = 1; var logMock = new Mock<TextWriter>(); var d = new ProjectExecutionDetail() { Key = key, Log = logMock.Object }; var i = CreateItem(args, d); var rmMock = new Mock<IRuntimeManager>(); string errMsg = "This is an error message"; rmMock.Setup(m => m.Invoke(key)).Callback(() => { throw new Exception(errMsg); }); var mre = new ManualResetEvent(false); i.BeginExecute(rmMock.Object, ei => mre.Set()); mre.WaitOne(200); logMock.Verify(m => m.WriteLine(errMsg)); }