コード例 #1
0
 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());
 }
コード例 #2
0
 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);
 }
コード例 #3
0
 public void BeginExecuteThrowsExceptionIfStateIsNotPendingTest()
 {
     var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = false };
     var i = CreateItem(args);
     var rm = new Mock<IRuntimeManager>().Object;
     i.BeginExecute(rm, ei => { });
 }
コード例 #4
0
 private void PerformProjectPathTest(string ruleProjectPath, string expectedItemProjectPath)
 {
     var args = new MockProjectInvocationRuleSetupArgs() { ProjectPath = ruleProjectPath };
     var i = CreateItem(args);
     Assert.AreEqual(expectedItemProjectPath, i.ProjectPath);
 }
コード例 #5
0
 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);
     }
 }
コード例 #6
0
 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);
 }
コード例 #7
0
 private void PerformProjectExecutionStateTest(bool canExecute, ProjectExecutionState expectedState)
 {
     var args = new MockProjectInvocationRuleSetupArgs() { CanExecute = canExecute };
     var i = CreateItem(args);
     Assert.AreEqual(expectedState, i.State);
 }
コード例 #8
0
 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;
 }
コード例 #9
0
 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);
     }
 }
コード例 #10
0
 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);
 }
コード例 #11
0
 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;
 }
コード例 #12
0
 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));
 }
コード例 #13
0
 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());
 }
コード例 #14
0
 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());
 }
コード例 #15
0
 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);
 }
コード例 #16
0
 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));
 }