Пример #1
0
 public void Test21()
 {
     try
     {
         var code = @"
             t1 = new TestJitClass
         ";
         var jac  = new JacInterpreter();
         jac.Exec(code);
     }
     catch (JacException ex)
     {
         Assert.AreEqual(ex.Code, JacException.Codes.TypeNotFound);
     }
     try
     {
         var code = @"
             t1 = new TestJitClass
         ";
         JacInterpreter.RegisterJacTarget(typeof(TestJitClass).Assembly);
         var jac = new JacInterpreter();
         jac.Exec(code);
     }
     catch (JacException)
     {
         Assert.Fail();
     }
 }
Пример #2
0
        public void Test17()
        {
            var code = @"
                new Stage
                    Procs
                        add sink = new Process
                            Name = 'SinkProc'
                        add p1 = new Process
                            Name = 'MyProc'
                            Cio
                                add o1 = new CoJoinFrom
                                    PullFromProcessKey = 'SinkProc'
                                    ChildWorkKey = 'TEPA'
                                    PorlingSpan = 0.5M                                    
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var o1 = jac["o1"] as CoJoinFrom;

            Assert.IsNotNull(o1);
            Assert.AreEqual(o1.PullFromProcessKey, jac.GetProcess("SinkProc").Name);
            Assert.AreEqual(o1.ChildWorkKey, "TEPA");
            Assert.AreEqual(o1.PorlingSpan, TimeSpan.FromSeconds(30));
        }
Пример #3
0
        public void Test10()
        {
            var code = @"
                new Stage
                    Procs
                        add p1 = new Process
                            Name = 'PROCP1'
                            Cio
                                add new CoSpan
                                    Span = 11S
                                add new CiDelay
                                    Delay = 66M
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var proc = jac.GetProcess("p1");

            Assert.IsNotNull(proc);

            var span = proc.Cios.Select(a => a as CoSpan).Where(a => a != null).FirstOrDefault();

            Assert.AreEqual(span.Span, TimeSpan.FromSeconds(11));
            var delay = proc.Cios.Select(a => a as CiDelay).Where(a => a != null).FirstOrDefault();

            Assert.AreEqual(delay.Delay, TimeSpan.FromMinutes(66));
        }
Пример #4
0
        public void Test02()
        {
            var code = @"
                st = new Stage
                    Procs
                        add b  = new Process
                            Name = 'AAA'
                            Name = 'aaa'
                        add c=new Process
                            ID = 'IDFINDB'  // Try to find by ID
                            Name = 'BBB'
                            Name = 'bbb'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.AreEqual(jac["st"].GetType(), typeof(JitStage));

            Assert.AreEqual(jac["b"].GetType(), typeof(JitProcess));
            var b = jac["b"] as JitProcess;

            Assert.AreEqual(b.Name, "aaa");
            Assert.AreEqual(jac["c"].GetType(), typeof(JitProcess));
            var c = jac["c"] as JitProcess;         // get instance by variable

            Assert.AreEqual(c.Name, "bbb");

            var bbb = jac["IDFINDB"] as JitProcess;   // get instance by name

            Assert.AreEqual(c, bbb);
        }
Пример #5
0
        public void Test06_3()
        {
            var code = @"
                st = new Stage
                p1 = new Process
                    ID = 'IgnoreProcess'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.IsNotNull(jac.GetProcess("IgnoreProcess"));

            code = @"
                st
                    Procs
                        add IgnoreProcess
            ";
            jac.Exec(code);
            Assert.IsNotNull(jac.GetProcess("IgnoreProcess"));

            code = @"
                st
                    Procs
                        remove IgnoreProcess
            ";
            jac.Exec(code);
            Assert.IsNull(jac.GetProcess("IgnoreProcess"));
        }
Пример #6
0
        public void Test08()
        {
            var code = @"
                new Stage
                    ID = 'MyStage'
                    Name = 'MySweetStage'
                    Procs
                        add p1 = new Process
                            ID = 'PROCP1'
                            Name = 'MyPROCP1'
                        add p2 = new Process
                        add p3 = new Process
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            //--------------------------------------------------------
            code = $@"
                MyStage               // To find Stage object named 'MyStage'
                    Procs
                        remove PROCP1   // find JitProcess instance by ID (not by ID as string)
                        remove p2       // find JitProcess instance by variable
            ";
            jac.Exec(code);
            var MyStage      = jac.GetStage("MyStage");
            var MySweetStage = jac.GetStage("MySweetStage");

            Assert.IsNotNull(MyStage);
            Assert.IsNotNull(MySweetStage);
            Assert.AreEqual(MyStage, MySweetStage);
            Assert.AreEqual(MyStage.GetChildProcesses().Count(), 1);
        }
Пример #7
0
        public void Test26()
        {
            var code = @"
                p1 = new Process
                    ID = 'AAA123'
                AAA123
                    Cio
                        add o1 = new CoSpan
                            ID = 'SPANCONSTRAINTID'
                            Span = 0.1H
                            PorlingSpan = 1S
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var p1 = jac["p1"] as JitProcess;
            var o1 = p1.Cios.FirstOrDefault() as CoSpan;

            Assert.IsNotNull(o1);
            Assert.AreEqual(o1.Span, TimeSpan.FromHours(0.1));
            Assert.AreEqual(o1.PorlingSpan, TimeSpan.FromSeconds(1.0));

            code = @"
                SPANCONSTRAINTID
                    Span = 0.2H
                    PorlingSpan = 1.2S
            ";
            jac.Exec(code);
            o1 = p1.Cios.FirstOrDefault() as CoSpan;
            Assert.IsNotNull(o1);
            Assert.AreEqual(o1.Span, TimeSpan.FromHours(0.2));
            Assert.AreEqual(o1.PorlingSpan, TimeSpan.FromSeconds(1.2));
        }
Пример #8
0
        public void Test06_2()
        {
            var code = @"
                st = new Stage
                    Procs
                        add new Process
                            ID = 'IgnoreProcess'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.IsNotNull(jac.GetProcess("IgnoreProcess"));

            code = @"
                st
                    Procs
                        remove IgnoreProcess
            ";
            jac.Exec(code);
            Assert.IsNull(jac.GetProcess("IgnoreProcess"));

            code = @"
                st
                    Procs
                        add IgnoreProcess   // Expected cannot add removed process.
            ";
            jac.Exec(code);
            Assert.IsNull(jac.GetProcess("IgnoreProcess"));   // CANNOT ADD After Removed
        }
Пример #9
0
        public void Test06_1()
        {
            var code = @"
                st = new Stage
                    Procs
                        add new Process
                        add new Process
                            ID = 'IgnoreProcess'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.IsNotNull(jac.GetProcess("IgnoreProcess"));
            var name = jac.GetProcess("IgnoreProcess").Name;

            Assert.IsNotNull(jac.GetProcess(name));
            //--------------------------------------------------------
            code = $@"
                st
                    Procs
                        remove    IgnoreProcess  // Can specify ID (Cannot specify 'IgnoreProcess' as string)
            ";
            jac.Exec(code);
            Assert.AreEqual(jac.GetStage("st")?.GetChildProcesses().Count(), 1);
            Assert.AreNotEqual(jac.GetStage("st")?.GetChildProcess(0).Name, "IgnoreProcess");
            Assert.IsNull(jac.GetProcess("IgnoreProcess")); // removed from VarBuffer
            Assert.IsNull(jac.GetProcess(name));            // removed from InstanceBuffer
        }
Пример #10
0
        public void Test34()
        {
            var code = @"
                st = new Stage
                    Works
                        add datetime('2020/7/31 9:00:00'):new Work
                            Name = 'Work1'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var st  = jac.GetStage("st");
            var dat = st.Events.Peeks(99).ToList();

            Assert.IsTrue(CMP(dat[0], "Work1", EventTypes.Out, $"9:00"));

            code = @"
                st
                    Works
                        remove Work1    // remove command is for GUI(undo) only.
            ";
            jac.Exec(code);
            dat = st.Events.Peeks(99).ToList();
            Assert.AreEqual(0, dat.Count);
        }
Пример #11
0
        public void Test27()
        {
            var code = @"
                p1 = new Process
                    ID = 'AAA123'
                AAA123
                    Cio
                        add o1 = new CoSpan
                            ID = 'SPANID'
                            Span = 0.1H
                            PorlingSpan = 1S
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var p1 = jac["p1"] as JitProcess;
            var o1 = p1.Cios.FirstOrDefault() as CoSpan;

            Assert.IsNotNull(o1);
            Assert.AreEqual(o1.Span, TimeSpan.FromHours(0.1));
            Assert.AreEqual(o1.PorlingSpan, TimeSpan.FromSeconds(1.0));

            var code2 = @$ "
                AAA123
                    Cio
                        remove SPANID
            ";

            jac.Exec(code2);
            var ciosCount = p1.Cios.Count();

            Assert.AreEqual(ciosCount, 0);
        }
Пример #12
0
        public void Test31_TupleObject()
        {
            var code = @"
                t1 = 'tono':'saki'
                t2 = t1:'mana'
                t3 = t1:t2
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var xt1 = jac["t1"];
            var xt2 = jac["t2"];
            var xt3 = jac["t3"];

            Assert.AreEqual(xt1.GetType(), typeof(ValueTuple <object, object>));
            Assert.AreEqual(xt2.GetType(), typeof(ValueTuple <object, object>));
            Assert.AreEqual(xt3.GetType(), typeof(ValueTuple <object, object>));
            var t1 = (ValueTuple <object, object>)xt1;
            var t2 = (ValueTuple <object, object>)xt2;
            var t3 = (ValueTuple <object, object>)xt3;

            Assert.AreEqual(t1.Item1, "tono");
            Assert.AreEqual(t1.Item2, "saki");
            var t21 = (ValueTuple <object, object>)t2.Item1;

            Assert.AreEqual(t21.Item1, "tono");
            Assert.AreEqual(t21.Item2, "saki");
            Assert.AreEqual(t2.Item2, "mana");
            var t32 = (ValueTuple <object, object>)t3.Item2;

            Assert.AreEqual(t32.Item2, "mana");
        }
Пример #13
0
 public void Test32_DateTime()
 {
     Assert.AreEqual(DateTime.Parse("2020/7/31 13:45:56"), JacInterpreter.ParseDateTime(@"datetime('2020/7/31 13:45:56')"));
     Assert.AreEqual(DateTime.Parse("2020/7/31 13:45:56"), JacInterpreter.ParseDateTime(@"datetime ( '2020/7/31 13:45:56' )"));
     Assert.AreEqual(DateTime.Parse("2020/7/31 13:45:56"), JacInterpreter.ParseDateTime(@"'2020/7/31 13:45:56'"));
     Assert.AreEqual(DateTime.Parse("2020/7/31 13:45:56"), JacInterpreter.ParseDateTime(@"2020/7/31 13:45:56"));
     Assert.AreEqual(DateTime.Parse("2020/7/31 13:45:56.321"), JacInterpreter.ParseDateTime(@"2020/7/31 13:45:56.321"));
     Assert.AreNotEqual(DateTime.Parse("2020/7/31 13:45:56.322"), JacInterpreter.ParseDateTime(@"2020/7/31 13:45:56.321"));
 }
Пример #14
0
        public void Test13_3()
        {
            var code = @"
                cmd2 = new Variable
                    Value = -1.234e-2S
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.AreEqual(jac.GetVariable("cmd2").Value, TimeSpan.FromSeconds(-1.234e-2));
        }
Пример #15
0
        public void Test13_2()
        {
            var code = @"
                bm = new Variable
                    Value = -123
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.AreEqual(jac.GetVariable("bm").Value, -123);
        }
Пример #16
0
        public void Test13_4()
        {
            var code = @"
                h = new Variable
                    Value = 1.23e-10
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.AreEqual(jac.GetVariable("h").Value, 1.23e-10);
        }
Пример #17
0
        public override void OnInitialInstance()
        {
            UndoButton = (TButton)ControlUtil.FindControl(View, "UndoButton");
            RedoButton = (TButton)ControlUtil.FindControl(View, "RedoButton");
            if (UndoButton.Foreground is SolidColorBrush scb)
            {
                ButtonForegroundColor = scb.Color;
            }
            ButtonEnable(UndoButton, false);
            ButtonEnable(RedoButton, false);

            JacInterpreter.RegisterJacTarget(typeof(FeatureGuiJacBroker).Assembly);
        }
Пример #18
0
        public void Test23_2()
        {
            var code = @"
                    p = new Process
                        Name = 'TestProc'
                    p.Name = 'ChangedName'
                ";
            var jac  = JacInterpreter.From(code);
            var p    = jac.GetProcess("p");

            Assert.IsNotNull(p);
            Assert.AreEqual(p.Name, "ChangedName");
        }
Пример #19
0
        public void Test15()
        {
            var code = @"
                s = new CiSwitchNextLink
                    NextLinkVarName = 'NextLinkNo2' // Try to auto cast from string to JitVariable
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var s = jac["s"] as CiSwitchNextLink;

            Assert.IsNotNull(s);
            Assert.AreEqual(s.NextLinkVarName, JitVariable.From("NextLinkNo2"));
        }
Пример #20
0
        public void Test01()
        {
            var c   = @"
                te = new Template
                    Block
                        add 'st = new Stage'
                    Name = 'MyTemp'
            ";
            var jac = new JacInterpreter();

            jac.Exec(c);
            Assert.AreEqual(jac["te"].GetType(), typeof(JitTemplate));
            Assert.IsNotNull(jac.GetTemplate("te"));
            Assert.AreEqual(jac.GetTemplate("te").Name, "MyTemp");
        }
Пример #21
0
        public void Test24()
        {
            var code = @"
                    new Process
                        ID = 'TestProc'
                        AAA = 123   // When Process has NOT property named AAA then, call JacSetDotValueAttribute
                        BBB = 456   // Same
                ";
            var jac  = JacInterpreter.From(code);
            var p    = jac.GetProcess("TestProc");

            Assert.IsNotNull(p);
            Assert.AreEqual(p.ChildVriables["AAA"]?.Value, 123);
            Assert.AreEqual(p.ChildVriables["BBB"]?.Value, 456);
        }
Пример #22
0
        public void Test22()
        {
            var code = @"
                    p = new Process
                    p.X = 1234
                    p.Y = '5678' // Jac parser deeply makes to integer 5678
                    p.Z = p.X
                ";
            var jac  = JacInterpreter.From(code);

            Assert.IsNotNull(jac.GetProcess("p"));
            Assert.AreEqual(jac.GetProcess("p").ChildVriables["X"]?.Value, 1234);
            Assert.AreEqual(jac.GetProcess("p").ChildVriables["Y"]?.Value, "5678");  // To check '5678' is as string
            Assert.AreEqual(jac.GetProcess("p").ChildVriables["Z"]?.Value, 1234);
        }
Пример #23
0
        public void Test33_4()
        {
            var code = @"
                st = new Stage
                    Works
                        add datetime('2020/7/31 9:00:00'):new Work
                            Name = 'Work1'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var st  = jac.GetStage("st");
            var dat = st.Events.Peeks(99).ToList();

            Assert.IsTrue(CMP(dat[0], "Work1", EventTypes.Out, $"9:00"));
        }
Пример #24
0
        /// <summary>
        /// Add template chip and initialize Jac objects
        /// </summary>
        /// <param name="templateName"></param>
        /// <param name="accentColor"></param>
        /// <param name="remarks"></param>
        private void AddTemplateChip(string templateName, Color accentColor, string remarks)
        {
            var te = new TemplateTipModel
            {
                Template = new JitTemplate
                {
                    Name = templateName,
                },
                AccentColor = accentColor,
                Remarks     = remarks,
                Jac         = new JacInterpreter(),
                Scroll      = (View.ScrollX, View.ScrollY),
                Zoom        = (View.ZoomX, View.ZoomY),
            };

            te.UndoStream.Add("// no action here");
            ResetJac(te);
            Hot.TemplateList.Add(te);
        }
Пример #25
0
        public void Test01()
        {
            var c   = $@"
                st = new Stage
                    Procs
                        add b  = new Process
                            Name = 'AAA'
                            Name = 'aaa'
                        add new Process
                            Name = 'bbb'
            ";
            var jac = new JacInterpreter();

            jac.Exec(c);
            Assert.AreEqual(jac["st"].GetType(), typeof(JitStage));
            Assert.AreEqual(jac["b"].GetType(), typeof(JitProcess));
            var b = jac["b"] as JitProcess;

            Assert.AreEqual(b.Name, "aaa");
        }
Пример #26
0
        public void Test23()
        {
            var code = @"
                    p = new Process
                        Name = 'TestProc'
                    a123 = new Variable
                    a123.AAA = p
                    a123.BBB = p.Name   // To check that a123.BBB reference equals to p.Name
                ";
            var jac  = JacInterpreter.From(code);
            var p    = jac.GetProcess("p");
            var a123 = jac.GetVariable("a123");

            Assert.IsNotNull(p);
            Assert.IsTrue(a123.ChildVriables["AAA"].Is(":Process"));
            Assert.IsTrue(a123.ChildVriables["AAA"].Value is JitProcess);
            Assert.AreEqual(((JitProcess)a123.ChildVriables["AAA"].Value).Name, "TestProc");
            Assert.IsTrue(a123.ChildVriables["BBB"].Is(JitProcess.Class.String));
            Assert.AreEqual(a123.ChildVriables["BBB"].Value, "TestProc");
        }
Пример #27
0
        public void Test11()
        {
            var code = @"
                a = 1MS
                b = 2S
                c = 3M
                d = 4H
                e = 5D
                f = 6W
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.AreEqual(jac["a"], TimeSpan.FromMilliseconds(1));
            Assert.AreEqual(jac["b"], TimeSpan.FromSeconds(2));
            Assert.AreEqual(jac["c"], TimeSpan.FromMinutes(3));
            Assert.AreEqual(jac["d"], TimeSpan.FromHours(4));
            Assert.AreEqual(jac["e"], TimeSpan.FromDays(5));
            Assert.AreEqual(jac["f"], TimeSpan.FromDays(6 * 7));
        }
Пример #28
0
        public void Test12()
        {
            var code = @"
                a = 1.1MS
                b = 2.1S
                c = 3.1M
                d = 4.1H
                e = 5.1D
                f = 6.1W
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            Assert.AreEqual(jac["a"], TimeSpan.FromMilliseconds(1.1));
            Assert.AreEqual(jac["b"], TimeSpan.FromSeconds(2.1));
            Assert.AreEqual(jac["c"], TimeSpan.FromMinutes(3.1));
            Assert.AreEqual(jac["d"], TimeSpan.FromHours(4.1));
            Assert.AreEqual(jac["e"], TimeSpan.FromDays(5.1));
            Assert.AreEqual(jac["f"], TimeSpan.FromDays(6.1 * 7));
        }
Пример #29
0
        public void Test14_2()
        {
            var code = @"
                st = new Stage
                    Procs
                        add p1 = new Process
                            Name = 'PROCP1'
                            Cio
                                add i1 = new CiPickTo
                                    Delay = 1.5M
                                    TargetWorkClass = ':Car'
                                    DestProcessKey = 'SUPERLAZY'
            ";
            var jac  = new JacInterpreter();

            jac.Exec(code);
            var st = jac.GetStage("st");

            var i1 = jac["i1"] as CiPickTo;

            Assert.IsNotNull(i1);
            var i1dest = st.FindChildProcess("SUPERLAZY", isReturnNull: true);

            Assert.IsNull(i1dest);  // Expected Null because of no registered yet.

            var code2 = @"
                st
                    Procs
                        add p2 = new Process
                            Name = 'SUPERLAZY'
            ";

            jac.Exec(code2);
            i1dest = st.FindChildProcess("SUPERLAZY", isReturnNull: true);
            var p2 = jac.GetProcess("p2");

            Assert.AreEqual(i1dest, p2);                             // Then FindProcess can find p2 named SUPERLAZY

            i1dest = st.FindChildProcess(p2.ID, isReturnNull: true); // You can also find by ID
            Assert.AreEqual(i1dest, p2);
        }
Пример #30
0
        public void Test04()
        {
            var code = @"
                st = new Stage
                    Procs
                        add new Process
                            BadName = 'ShouldBeError'
            ";

            try
            {
                var jac = new JacInterpreter();
                jac.Exec(code);
                var st = jac["st"] as JitStage;
            }
            catch (JacException ex)
            {
                Assert.AreEqual(ex.Code, JacException.Codes.NotImplementedProperty);
                Assert.IsTrue(ex.Message.Contains("BadName"));
            }
        }