public void ChangeActionAfterOpened() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "Branch1", Trigger = new TestWriteLine("Trigger1") { Message = "Trigger1", }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, } }; VerifyLocked(pick, delegate { pick.Branches[0].Action = new TestWriteLine(); }); }
public void VariableAccessibility() { string hintMessage = "Hello Microsoft"; Variable <string> message = VariableHelper.Create <string>("messageVar"); TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "OneBranch", Variables = { message, }, Trigger = new TestAssign <string>("ChangeMessage") { Value = hintMessage, ToVariable = message, }, Action = new TestWriteLine("Action1") { MessageVariable = message, HintMessage = hintMessage, }, }, } }; TestRuntime.RunAndValidateWorkflow(pick); }
public void AddVariableAfterOpened() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "Branch1", Trigger = new TestWriteLine("Trigger1") { Message = "Trigger1", }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, } }; VerifyLocked(pick, delegate { pick.Branches[0].Variables.Add(VariableHelper.Create <string>("var1")); }); }
public void CancellationScopeInPick() { // CancellationScope does not have test OM CancellationScope cancel = new CancellationScope() { DisplayName = "TestCancellationScope", Body = new TestSequence() { Activities = { new TestDelay("LongDelay", new TimeSpan(0, 0, 5)) } }.ProductActivity, CancellationHandler = new TestSequence() { Activities = { new TestWriteLine() { Message = "Cancelled" } } }.ProductActivity }; TestCustomActivity testCancel = TestCustomActivity <CancellationScope> .CreateFromProduct(cancel); testCancel.ActivitySpecificTraces.Add( new UnorderedTraces() { Steps = { new UserTrace("Cancelled"), } }); TestPick pick = new TestPick() { Branches = { new TestPickBranch() { Trigger = new TestDelay("ShortDelay", new TimeSpan(0, 0, 1)) }, new TestPickBranch() { Trigger = testCancel } } }; ExpectedTrace expectedTrace = pick.GetExpectedTrace(); expectedTrace.AddVerifyTypes(typeof(UserTrace)); TestRuntime.RunAndValidateWorkflow(pick, expectedTrace); }
public void ExecuteTogether() { Variable <int> var1 = VariableHelper.CreateInitialized <int>("var1", 1); TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { Variables = { var1 }, DisplayName = "TriggeredBranch1", Trigger = new TestSequence { Activities = { new TestDelay() { Duration = new TimeSpan(0, 0, 1) }, new TestAssign <int>() { ToVariable = var1, ValueExpression = (env) => (var1.Get(env) + 1), } } }, Action = new TestWriteLine("Action1") { HintMessage = "2", MessageExpression = ((env) => (var1.Get(env).ToString())) }, }, new TestPickBranch() { DisplayName = "NoTriggeredBranch2", Trigger = new TestBlockingActivity("Block") { ExpectedOutcome = Outcome.Canceled, }, Action = new TestWriteLine("Action2") { Message = "Action2", }, } } }; ExpectedTrace trace = pick.GetExpectedTrace(); TestRuntime.RunAndValidateWorkflow(pick, trace); TestRuntime.RunAndValidateWorkflow(pick, trace); }
public void ZeroBranch() { TestPick pick = new TestPick() { DisplayName = "ZeroBranchPick", }; TestRuntime.RunAndValidateWorkflow(pick); }
public void CustomActivityOverridesBranchCancelStateWithThrow() { const string triggerMessage = "Trigger branch's trigger is executing."; TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "TriggeredBranch_Branch", Trigger = new TestWriteLine("TriggeredBranch_Trigger") { Message = triggerMessage, HintMessage = triggerMessage, }, }, new TestPickBranch() { DisplayName = "FaultedCustomActivity_Branch", Trigger = new TestBlockingActivityWithWriteLineInCancel("FaultedCustomActivity_Trigger", OutcomeState.Faulted) { ExpectedOutcome = Outcome.UncaughtException(), }, Action = new TestWriteLine("FaultedCustomActivity_Action") { Message = "FaultedCustomActivity_Action - not supposed to show", }, }, } }; // wrapping the custom activity with a try-catch doesn't work here // try-catch doesn't catch an exception that comes from a Cancel // by design in Beta2, any exception thrown from Cancel will Abort the workflow immediately // Note: for this test case (and similar ones e.g. Parallel), we can only compare the Exception type // because this is a special case, we cannot validate the traces as exception is thrown from // Cancel and by design runtime doesn't catch it. As a result, there is no chance to validate. using (TestWorkflowRuntime testWorkflowRuntime = TestRuntime.CreateTestWorkflowRuntime(pick)) { testWorkflowRuntime.ExecuteWorkflow(); Exception outException = null; testWorkflowRuntime.WaitForAborted(out outException, false); // Due to how we get the tracking information, the exception is not the original exception and // we cannot check the InnerException property. Assert.NotNull(outException); //if (outException == null || outException.InnerException == null || !outException.InnerException.GetType().Equals(typeof(TestCaseException))) //{ // throw new TestCaseException(String.Format("Workflow was supposed to Abort with a TestCaseException, but this is the exception: {0}", outException.ToString())); //} //else //{ // //Log.Info("Workflow aborted as excpected"); //} } }
public void ImmediatelyCompleteTriggers() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "TriggeredBranch1", Trigger = new TestWriteLine("Trigger1") { Message = "Trigger1 Executing", }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, new TestPickBranch() { DisplayName = "NoTriggeredBranch2", ExpectedOutcome = Outcome.Canceled, Trigger = new TestWriteLine("Trigger2") { Message = "Trigger2 Executing", ExpectedOutcome = Outcome.Completed, }, Action = new TestWriteLine("Action2") { Message = "Action2", }, }, new TestPickBranch() { DisplayName = "NoTriggeredBranch3", ExpectedOutcome = Outcome.Canceled, Trigger = new TestWriteLine("Trigger3") { Message = "Trigger3 Executing", ExpectedOutcome = Outcome.Completed, }, Action = new TestWriteLine("Action3") { Message = "Action3", }, }, } }; ExpectedTrace trace = pick.GetExpectedTrace(); TestRuntime.RunAndValidateWorkflow(pick, trace); }
public void ExecuteParallel() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "TriggeredBranch1", Trigger = new TestDelay() { Duration = new TimeSpan(0, 0, 1) }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, new TestPickBranch() { DisplayName = "NoTriggeredBranch2", Trigger = new TestDelay() { ExpectedOutcome = Outcome.Canceled, Duration = new TimeSpan(0, 0, 2) }, Action = new TestWriteLine("Action2") { Message = "Action2", }, } } }; List <string> values = new List <string> { "a", "b" }; TestParallelForEach <string> testPFE = new TestParallelForEach <string>() { Body = pick, HintValues = values, ValuesExpression = (context => new List <string> { "a", "b" }), CompletionCondition = false, }; ExpectedTrace expected = testPFE.GetExpectedTrace(); expected.AddVerifyTypes(typeof(UserTrace)); TestRuntime.RunAndValidateWorkflow(testPFE, expected); }
public void ThreeBranchsOneTriggered() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "NoTriggeredBranch1", Trigger = new TestBlockingActivity("Block1") { ExpectedOutcome = Outcome.Canceled, }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, new TestPickBranch() { DisplayName = "TriggeredBranch", Trigger = new TestBlockingActivity("Block2"), Action = new TestWriteLine("Action2") { Message = "Action2", }, }, new TestPickBranch() { DisplayName = "NoTriggeredBranch2", Trigger = new TestBlockingActivity("Block3") { ExpectedOutcome = Outcome.Canceled, }, Action = new TestWriteLine("Action3") { Message = "Action3", }, }, } }; using (TestWorkflowRuntime runtime = TestRuntime.CreateTestWorkflowRuntime(pick)) { runtime.ExecuteWorkflow(); runtime.WaitForActivityStatusChange("Block2", TestActivityInstanceState.Executing); System.Threading.Thread.Sleep(1000); runtime.ResumeBookMark("Block2", null); ExpectedTrace trace = pick.GetExpectedTrace(); runtime.WaitForCompletion(trace); } }
public void SameVariableName() { Variable <string> var1 = VariableHelper.CreateInitialized <string>("var1", "Variable in Branch1"); Variable <string> var2 = VariableHelper.CreateInitialized <string>("var1", "Variable in Branch2"); TestPick pick = new TestPick() { DisplayName = "Pick", Branches = { new TestPickBranch() { DisplayName = "Branch1", Variables = { var1 }, Trigger = new TestDelay() { Duration = new TimeSpan(0, 0, 3) }, Action = new TestWriteLine("Action1") { HintMessage = "Variable in Branch1", MessageExpression = (env) => var1.Get(env) } }, new TestPickBranch() { DisplayName = "Branch2", Variables = { var2 }, Trigger = new TestBlockingActivity("Block2") { ExpectedOutcome = Outcome.Canceled }, Action = new TestWriteLine("Action2") { Message = "Action2" } }, } }; ExpectedTrace trace = pick.GetExpectedTrace(); TestRuntime.RunAndValidateWorkflow(pick, trace); }
public void CustomActivityOverridesBranchCancelStateWithCompletedState() { const string triggerMessage = "Trigger branch's trigger is executing."; const string actionMessage = "Trigger branch's action is executing."; TestPick pick = new TestPick() { DisplayName = "PickActivity", ExpectedOutcome = new Outcome(OutcomeState.Completed) { IsOverrideable = false }, Branches = { new TestPickBranch() { DisplayName = "TriggeredBranch_Branch", Trigger = new TestWriteLine("TriggeredBranch_Trigger") { Message = triggerMessage, HintMessage = triggerMessage, }, Action = new TestWriteLine("TriggeredBranch_Action") { Message = actionMessage, HintMessage = actionMessage, }, }, new TestPickBranch() { DisplayName = "ClosedCustomActivity_Branch", ExpectedOutcome = Outcome.Completed, // custom activity's outcome is Closed, therefore this branch is also Closed Trigger = new TestBlockingActivityWithWriteLineInCancel("ClosedCustomActivity_Trigger", OutcomeState.Completed) { ExpectedOutcome = Outcome.Completed, }, Action = new TestWriteLine("ClosedCustomActivity_Action") { Message = "ClosedCustomActivity_Action - not supposed to show", }, }, } }; ExpectedTrace trace = pick.GetExpectedTrace(); TestRuntime.RunAndValidateWorkflow(pick, trace); }
public void CancelOnAction() { TestPick pick = new TestPick { DisplayName = "PickActivity", ExpectedOutcome = Outcome.Canceled, Branches = { new TestPickBranch { DisplayName = "Branch1", Trigger = new TestDelay() { Duration = new TimeSpan(0, 0, 3), }, Action = new TestBlockingActivity("Block1") { ExpectedOutcome = Outcome.Canceled, } }, new TestPickBranch { DisplayName = "Branch2", Trigger = new TestBlockingActivity("Block2") { ExpectedOutcome = Outcome.Canceled, }, Action = new TestWriteLine("Action2") { Message = "Action2", } } } }; using (TestWorkflowRuntime runtime = TestRuntime.CreateTestWorkflowRuntime(pick)) { runtime.ExecuteWorkflow(); runtime.WaitForActivityStatusChange("Block1", TestActivityInstanceState.Executing); System.Threading.Thread.Sleep(1000); runtime.CancelWorkflow(); ExpectedTrace trace = pick.GetExpectedTrace(); runtime.WaitForCanceled(trace); } }
public void OneTriggerNotSet() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "Branch1", Trigger = new TestWriteLine("Trigger1") { Message = "Trigger1", }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, new TestPickBranch() { DisplayName = "Branch2", Action = new TestWriteLine("Action2") { Message = "Action2", }, }, new TestPickBranch() { DisplayName = "Branch3", Trigger = new TestWriteLine("Trigger3") { Message = "Trigger3", }, Action = new TestWriteLine("Action3") { Message = "Action3", }, }, } }; TestRuntime.ValidateInstantiationException(pick, String.Format(ErrorStrings.PickBranchRequiresTrigger, pick.Branches[1].DisplayName)); }
public void OneBranch() { TestPick pick = new TestPick() { DisplayName = "PickActivity", Branches = { new TestPickBranch() { DisplayName = "OneBranch", Trigger = new TestWriteLine("Trigger1") { Message = "Trigger1 Executing", }, Action = new TestWriteLine("Action1") { Message = "Action1", }, }, } }; TestRuntime.RunAndValidateWorkflow(pick); }
public void ThrowInAction() { TestPick pick = new TestPick { DisplayName = "PickActivity", Branches = { new TestPickBranch { DisplayName = "Triggered", Trigger = new TestWriteLine("Trigger1") { Message = "Trigger1", }, Action = new TestThrow <ApplicationException>("ThrowInAction") { ExceptionExpression = (context => new ApplicationException("Fault in trigger")), ExpectedOutcome = Outcome.CaughtException(typeof(ApplicationException)), } }, new TestPickBranch { DisplayName = "NoTriggered", ExpectedOutcome = Outcome.Canceled, Trigger = new TestWriteLine("Trigger2") { Message = "Trigger2", ExpectedOutcome = Outcome.Completed, }, Action = new TestWriteLine("Action2") { Message = "Action2" } } } }; TestTryCatch testTCF = new TestTryCatch { DisplayName = "TryCatch", Try = pick, Catches = { new TestCatch <ApplicationException>() { Body = new TestWriteLine("CatchWriteLine") { Message = "Caught", } } } }; ExpectedTrace trace = testTCF.GetExpectedTrace(); TestRuntime.RunAndValidateWorkflow(testTCF, trace); }