Beispiel #1
0
        public void Catch_CSharp_rule_compile_error()
        {
            var good_script = new ScriptSourceElement()
            {
                Name       = "good",
                Type       = ScriptSourceElementType.Rule,
                SourceCode = @"
logger.Log(""Test"");
"
            };
            var bad_script = new ScriptSourceElement()
            {
                Name       = "bad",
                Type       = ScriptSourceElementType.Rule,
                SourceCode = @"
loger.Log(""Test"");
"
            };
            var logger  = Substitute.For <ILogEvents>();
            var library = Substitute.For <IScriptLibrary>();
            var engine  = new CSharpScriptEngine(logger, Debugger.IsAttached, library);

            engine.Load(new ScriptSourceElement[] { good_script, bad_script });

            logger.Received().ScriptHasError("bad", 2, 1, "CS0103", "The name 'loger' does not exist in the current context");
        }
Beispiel #2
0
        public void Catch_VBNet_rule_compile_error()
        {
            var good_script = new ScriptSourceElement()
            {
                Name       = "good",
                Type       = ScriptSourceElementType.Rule,
                SourceCode = @"
logger.Log(""Test"");
"
            };
            var bad_script = new ScriptSourceElement()
            {
                Name       = "bad",
                Type       = ScriptSourceElementType.Rule,
                SourceCode = @"
loger.Log(""Test"");
"
            };
            var logger  = Substitute.For <ILogEvents>();
            var library = Substitute.For <IScriptLibrary>();
            var engine  = new VBNetScriptEngine(logger, Debugger.IsAttached, library);

            engine.Load(new ScriptSourceElement[] { good_script, bad_script });

            logger.Received().ScriptHasError("bad", 2, 0, "BC30451", "'loger' is not declared. It may be inaccessible due to its protection level.");
        }
        public static void LoadAndRun(this ScriptEngine engine, string scriptName, string script, IWorkItem workItem, IWorkItemRepository store)
        {
            var scriptElem = new ScriptSourceElement()
            {
                Type       = ScriptSourceElementType.Rule,
                Name       = scriptName,
                SourceCode = script
            };

            engine.Load(new ScriptSourceElement[] { scriptElem });
            engine.Run(scriptName, workItem, store);
        }
Beispiel #4
0
        public void Can_CSharp_rule_use_snippet_and_function()
        {
            // Arrange
            var snippet1 = new ScriptSourceElement()
            {
                Name       = "MySnippet",
                Type       = ScriptSourceElementType.Snippet,
                SourceCode = @"
logger.Log(""This is MySnippet code."");
"
            };
            var function1 = new ScriptSourceElement()
            {
                Name       = null,
                Type       = ScriptSourceElementType.Function,
                SourceCode = @"
int MyFunc() { return 42; }
"
            };
            var rule1 = new ScriptSourceElement()
            {
                Name       = "rule1",
                Type       = ScriptSourceElementType.Rule,
                SourceCode = @"
${MySnippet}
logger.Log(""Hello, World from {1} #{0}!"", self.Id, self.TypeName);
logger.Log(""MyFunc returns {0}."", MyFunc());
"
            };

            var logger  = Substitute.For <ILogEvents>();
            var library = Substitute.For <IScriptLibrary>();
            var engine  = new CSharpScriptEngine(logger, Debugger.IsAttached, library);

            engine.Load(new ScriptSourceElement[] { rule1, function1, snippet1 });

            var repository = Substitute.For <IWorkItemRepository>();
            var workItem   = Substitute.For <IWorkItem>();

            workItem.Id.Returns(1);
            workItem.TypeName.Returns("Task");
            repository.GetWorkItem(1).Returns(workItem);

            // Act
            engine.Run(rule1.Name, workItem, repository);

            // Assert
            logger.Received().ScriptLogger.Log(LogLevel.Verbose, rule1.Name, "This is MySnippet code.");
            logger.Received().ScriptLogger.Log(LogLevel.Verbose, rule1.Name, "Hello, World from Task #1!");
            logger.Received().ScriptLogger.Log(LogLevel.Verbose, rule1.Name, "MyFunc returns 42.");
        }