Example #1
0
        public async void Basic_Web_Call_Succeeds()
        {
            string script = @"
                var client = new httpClient();
                var getResult = client.GetAsync('http://www.google.com/').Result;
                context.Subject.TestValueObject = getResult;
                context.Subject.TestValueString = getResult.Content.ReadAsStringAsync().Result;
                ";

            var testNode = new JavaScriptNode <TestObjectA>
            {
                ExecutedScript = script
            };

            testNode.AddScriptType("httpClient", typeof(HttpClient));

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            testObject = result.GetSubjectAs <TestObjectA>();

            testObject.TestValueObject.ShouldNotBeNull();

            testObject.TestValueString.ShouldNotBeNull();
            testObject.TestValueString.ShouldNotBeEmpty();

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
        public void Errant_Node_Run_With_ThrowOnError_True_Throws()
        {
            var testNode = new JavaScriptNode <TestObjectA>
            {
                ExecutedScript = "context.Subject.TestValueString = 'Hello JavaScript!'; throw 'An error happened';"
            };

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject)
            {
                GlobalOptions = { ThrowOnError = true }
            };

            Assert.Throws <Microsoft.ClearScript.ScriptEngineException>(async() => await testNode.ExecuteAsync(context));
        }
        public async void Node_Is_Not_Run_If_ShouldExecute_False()
        {
            var testNode = new JavaScriptNode <TestObjectA>
            {
                ExecutedScript    = "context.Subject.TestValueString = 'Hello JavaScript!';",
                ShouldExecuteFunc = c => Task.FromResult(false)
            };

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            result.Status.ShouldEqual(NodeResultStatus.NotRun);

            context.Subject.TestValueString.ShouldBeNull();
        }
        public async void Failed_Node_Run_Status_Is_Failed()
        {
            var testNode = new JavaScriptNode <TestObjectA>
            {
                ExecutedScript = "context.Subject.TestValueString = 'Hello JavaScript!'; result.IsSuccess = false;"
            };

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            result.GetSubjectAs <TestObjectA>().TestValueString.ShouldEqual("Hello JavaScript!");

            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
            result.Status.ShouldEqual(NodeResultStatus.Failed);
        }
        public async void Successful_Node_Run_Matches_Expectations()
        {
            var testNode = new JavaScriptNode <TestObjectA>
            {
                ExecutedScript = "context.Subject.TestValueString = 'Hello JavaScript!'"
            };

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            result.GetSubjectAs <TestObjectA>().TestValueString.ShouldEqual("Hello JavaScript!");

            result.Status.ShouldEqual(NodeResultStatus.Succeeded);
            testNode.Status.ShouldEqual(NodeRunStatus.Completed);
        }
        public async void Errant_Node_Run_Status_Is_Faulted()
        {
            var testNode = new JavaScriptNode <TestObjectA>
            {
                ExecutedScript = "context.Subject.TestValueString = 'Hello JavaScript!'; throw 'An error happened';"
            };

            var testObject = new TestObjectA();

            var context = new ExecutionContext <TestObjectA>(testObject);

            var result = await testNode.ExecuteAsync(context);

            result.Exception.ShouldNotBeNull();

            result.Status.ShouldEqual(NodeResultStatus.Failed);

            testNode.Status.ShouldEqual(NodeRunStatus.Faulted);
        }
        public WebresourceNode AddSingleNode(Webresource resource, string[] nameParts, FolderNode folder = null)
        {
            var             fileName = nameParts.Last();
            WebresourceType type     = WebresourceType.Auto;

            if (resource.Type != 0)
            {
                type = (WebresourceType)resource.Type;
            }

            if (type == WebresourceType.Auto)
            {
                if (fileName.IndexOf(".", StringComparison.Ordinal) < 0)
                {
                    if (resource.Type == 0)
                    {
                        return(null);
                    }

                    type = (WebresourceType)resource.Type;
                }
                else
                {
                    type = Webresource.GetTypeFromExtension(fileName
                                                            .Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last());
                }
            }

            WebresourceNode node = null;

            switch (type)
            {
            case WebresourceType.WebPage:
                node = new WebpageNode(resource, Settings);
                break;

            case WebresourceType.Css:
                node = new CssNode(resource, Settings);
                break;

            case WebresourceType.Data:
                node = new DataNode(resource, Settings);
                break;

            case WebresourceType.Gif:
                node = new GifNode(resource, Settings);
                break;

            case WebresourceType.Ico:
                node = new IcoNode(resource, Settings);
                break;

            case WebresourceType.Jpg:
                node = new JpgNode(resource, Settings);
                break;

            case WebresourceType.Png:
                node = new PngNode(resource, Settings);
                break;

            case WebresourceType.Resx:
                node = new ResxNode(resource, Settings);
                break;

            case WebresourceType.Script:
                node = new JavaScriptNode(resource, Settings);
                break;

            case WebresourceType.Silverlight:
                node = new SilverlightNode(resource, Settings);
                break;

            case WebresourceType.Vector:
                node = new VectorNode(resource, Settings);
                break;

            case WebresourceType.Xsl:
                node = new XslNode(resource, Settings);
                break;
            }

            resource.Node = node;

            if (folder != null && node != null)
            {
                node.ForeColor = resource.State == WebresourceState.Saved ? Color.Blue :
                                 resource.State == WebresourceState.Draft ? Color.Red : Color.Black;

                folder.Nodes.Add(node);

                (node.Parent as FolderNode)?.SetFolderColor();
            }

            return(node);
        }
        public void Initial_Node_Run_Status_Is_NotRun()
        {
            var testNode = new JavaScriptNode <TestObjectA>();

            testNode.Status.ShouldEqual(NodeRunStatus.NotRun);
        }