public void LoadAndInvokeWorkflowWithExtensions()
        {
            var target = new LoadAndInvokeWorkflow();
            var incStore = new IncrementStore();
            var decStore = new DecrementStore();

            var extensions = new object[] { incStore, decStore };

            dynamic innerInput = new WorkflowArguments();
            innerInput.Num = 3;

            dynamic input = new WorkflowArguments();
            input.Input = innerInput;
            input.Path = "ChildWithExtensions.xaml";
            input.Extensions = extensions;
            input.LocalAssembly = Assembly.GetExecutingAssembly();

            var host = WorkflowInvokerTest.Create(target);

            try
            {
                host.TestActivity(input);
                Assert.AreEqual(4, incStore.Value);
                Assert.AreEqual(2, decStore.Value);
            }
            finally
            {
                host.Tracking.Trace();
            }
        }
        public void LocalAssemblyShouldOverride()
        {
            // Arrange
            var activity = new LoadAndInvokeWorkflow();
            var host = WorkflowInvokerTest.Create(activity);

            try
            {
                // Act
                // Setup the arguments for the TestNum.xaml workflow
                dynamic innerArgs = new WorkflowArguments();
                innerArgs.Num = 2;

                // Load the assembly to override the local
                var assembly = Assembly.LoadFrom("DynamicLoad.dll");

                // Setup the arguments to the LoadAndInvokeWorkflow
                dynamic arguments = new WorkflowArguments();
                arguments.LocalAssembly = assembly;
                arguments.Input = innerArgs;
                arguments.Path = "TestNum.xaml";

                host.TestActivity(arguments);

                // Assert
                host.AssertOutArgument.IsNotNull("Result");
                var innerOutArgs = WorkflowArguments.FromDictionary(host.OutArguments.Result);
                Assert.AreEqual(3, innerOutArgs.Num);
            }
            finally
            {
                host.Tracking.Trace();
            }
        }
        public void LoadAndInvokeWorkflowShouldRun()
        {
            var target = new LoadAndInvokeWorkflow();

            // inner dictionary gets passed to child
            var innerInput = InputDictionary.Create("Num", 1);
            var input = InputDictionary.Create("Input", innerInput, "Path", "AddToNumOrThrow.xaml");

            var host = WorkflowApplicationTest.Create(target, input);

            try
            {
                host.TestWorkflowApplication.RunEpisode();
                host.AssertOutArgument.IsNotNull("Result");
                var innerArgs = OutputDictionary.Get<IDictionary<string, object>>(host.Results.Output, "Result");

                AssertOutArgument.AreEqual(innerArgs, "Result", 2);
            }
            finally
            {
                host.Tracking.Trace();
            }
        }