示例#1
0
        static void IsNumber(string s, double v, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            Assert.IsInstanceOf <JSEvalNumber>(o);
            Assert.That(o.ToDouble(), Is.EqualTo(v), msg ?? s);
        }
示例#2
0
        static void IsString(string s, string v, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            Assert.IsInstanceOf <JSEvalString>(o);
            Assert.That(o.ToString(), Is.EqualTo(v), msg ?? s);
        }
示例#3
0
        static void IsBoolean(string s, bool v = true, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            Assert.IsInstanceOf <JSEvalBoolean>(o);
            Assert.That(o.ToBoolean(), Is.EqualTo(v), msg ?? s);
        }
示例#4
0
        static void IsDate(string s, DateTime v, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            Assert.IsInstanceOf <JSEvalDate>(o);
            Assert.That(((JSEvalDate)o).CompareTo(v), Is.EqualTo(0), msg ?? s);
        }
示例#5
0
        static void IsString(string s, string v, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            o.Should().BeOfType <StringObj>();
            o.ToString().Should().Be(v, msg ?? s);
        }
示例#6
0
        static void IsNumber(string s, double v, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            o.Should().BeOfType <DoubleObj>();
            o.ToDouble().Should().Be(v, msg ?? s);
        }
示例#7
0
        static void IsBoolean(string s, bool v = true, string msg = null)
        {
            RuntimeObj o = ScriptEngine.Evaluate(s);

            o.Should().BeOfType <BooleanObj>();
            o.ToBoolean().Should().Be(v, msg ?? s);
        }
示例#8
0
 static void ExecAsync( string script, Action<RuntimeObj> test, int? expectedFirstChanceError, Expr e, RuntimeObj syncResult, ScriptEngine engine, bool displayResult )
 {
     using( ScriptEngine.Result rAsync = engine.Execute( e ) )
     {
         int nbFirstChanceError = 0;
         int nbStep = 0;
         while( rAsync.CanContinue )
         {
             if( rAsync.Status == ScriptEngineStatus.FirstChanceError ) ++nbFirstChanceError;
             ++nbStep;
             rAsync.Continue();
         }
         test( rAsync.CurrentResult );
         if( expectedFirstChanceError.HasValue ) Assert.That( nbFirstChanceError, Is.EqualTo( expectedFirstChanceError.Value ) );
         if( displayResult ) Console.WriteLine( "Script '{0}' => {1} evaluated in {2} steps ({3} first chance errors).", script, syncResult.ToString(), nbStep, nbFirstChanceError );
     }
 }
示例#9
0
        static public void RunNormalAndStepByStep(string script, Action <RuntimeObj> test, GlobalContext ctx = null)
        {
            var e = Analyzer.AnalyseString(script);

            // Tests the empty, default, visitor: no change must have been made to the AST.
            var emptyVisitor = new ExprVisitor();

            emptyVisitor.VisitExpr(e).Should().BeSameAs(e);

            // Evaluates result directly.
            RuntimeObj syncResult = ScriptEngine.Evaluate(e, ctx);

            test(syncResult);

            // Step-by-step evaluation.
            ScriptEngine engine = new ScriptEngine(ctx);

            engine.Breakpoints.BreakAlways = true;
            ExecAsync(script, test, null, e, syncResult, engine, true);
        }
示例#10
0
        static public void RunNormalAndStepByStepWithFirstChanceError(string script, Action <RuntimeObj> test, int expectedFirstChanceError, GlobalContext ctx = null)
        {
            var e = ExprAnalyser.AnalyseString(script);

            // Tests the empty, default, visitor: no change must have been made to the AST.
            var emptyVisitor = new ExprVisitor();

            Assert.That(emptyVisitor.VisitExpr(e), Is.SameAs(e));

            // Evaluates result directly.
            RuntimeObj syncResult = ScriptEngine.Evaluate(e, ctx);

            test(syncResult);

            // Evaluates result without break points but with EnabledFirstChanceError set.
            ScriptEngine engine = new ScriptEngine(ctx);

            engine.EnableFirstChanceError = true;
            ExecAsync(script, test, expectedFirstChanceError, e, syncResult, engine, false);

            // Step-by-step evaluation (with EnabledFirstChanceError set).
            engine.Breakpoints.BreakAlways = true;
            ExecAsync(script, test, expectedFirstChanceError, e, syncResult, engine, true);
        }
示例#11
0
 static void ExecAsync(string script, Action <RuntimeObj> test, int?expectedFirstChanceError, Expr e, RuntimeObj syncResult, ScriptEngine engine, bool displayResult)
 {
     using (ScriptEngine.Result rAsync = engine.Execute(e))
     {
         int nbFirstChanceError = 0;
         int nbStep             = 0;
         while (rAsync.CanContinue)
         {
             if (rAsync.Status == ScriptEngineStatus.FirstChanceError)
             {
                 ++nbFirstChanceError;
             }
             ++nbStep;
             rAsync.Continue();
         }
         test(rAsync.CurrentResult);
         if (expectedFirstChanceError.HasValue)
         {
             nbFirstChanceError.Should().Be(expectedFirstChanceError.Value);
         }
         if (displayResult)
         {
             Console.WriteLine("Script '{0}' => {1} evaluated in {2} steps ({3} first chance errors).", script, syncResult.ToString(), nbStep, nbFirstChanceError);
         }
     }
 }