Example #1
0
        public void Test_Controls_If()
        {
            const string xml = @"
<xml>
  <block type=""controls_if"" >
    <value name=""IF0"">
      <block type=""logic_boolean"">
        <field name=""BOOL"">TRUE</field>
      </block>
    </value>
    <statement name=""DO0"">
      <block type=""text_print"">
        <value name=""TEXT"">
          <shadow type=""text"">
            <field name=""TEXT"">success</field>
          </shadow>
        </value>
      </block>
    </statement>
  </block>       
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("success", TestExtensions.GetDebugText().First());
        }
Example #2
0
        public void Test_Args_Input()
        {
            const string xml = @"
<xml>
  <block type=""text_print"">
    <value name=""TEXT"">
      <block type=""variables_get"">
        <field name=""VAR"">message</field>
      </block>
    </value>
  </block>
</xml>";

            var args = new Dictionary <string, object>();

            args.Add("message", "Hello World");

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate(args);

            Assert.AreEqual("Hello World", TestExtensions.GetDebugText().First());
        }
Example #3
0
        public void Test_Procedure_No_Return()
        {
            const string xml = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <variables>
    <variable type="""">x</variable>
  </variables>
  <block type=""procedures_defnoreturn"">
    <mutation>
      <arg name=""x""></arg>
    </mutation>
    <field name=""NAME"">do something</field>
    <comment pinned=""false"" h=""80"" w=""160"">Describe this function...</comment>
    <statement name=""STACK"">
      <block type=""text_print"">
        <value name=""TEXT"">
          <shadow type=""text"">
            <field name=""TEXT"">abc</field>
          </shadow>
          <block type=""variables_get"" >
            <field name=""VAR"" variabletype="""">x</field>
          </block>
        </value>
      </block>
    </statement>
  </block>
  <block type=""controls_repeat_ext"">
    <value name=""TIMES"">
      <shadow type=""math_number"">
        <field name=""NUM"">3</field>
      </shadow>
    </value>
    <statement name=""DO"">
      <block type=""procedures_callnoreturn"">
        <mutation name=""do something"">
          <arg name=""x""></arg>
        </mutation>
        <value name=""ARG0"">
          <block type=""text"">
            <field name=""TEXT"">hello world</field>
          </block>
        </value>
      </block>
    </statement>
  </block>
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("hello world,hello world,hello world", string.Join(",", TestExtensions.GetDebugText()));
        }
Example #4
0
        public void Test_Controls_Flow_Break()
        {
            const string xml = @"
<xml>
  <block type=""controls_repeat_ext"">
    <value name=""TIMES"">
      <shadow type=""math_number"">
        <field name=""NUM"">3</field>
      </shadow>
    </value>
    <statement name=""DO"">
      <block type=""text_print"">
        <value name=""TEXT"">
          <shadow type=""text"">
            <field name=""TEXT"">hello</field>
          </shadow>
        </value>
        <next>
          <block type=""controls_if"">
            <value name=""IF0"">
              <block type=""logic_boolean"">
                <field name=""BOOL"">TRUE</field>
              </block>
            </value>
            <statement name=""DO0"">
              <block type=""controls_flow_statements"">
                <field name=""FLOW"">BREAK</field>
              </block>
            </statement>
            <next>
              <block type=""text_print"">
                <value name=""TEXT"">
                  <shadow type=""text"">
                    <field name=""TEXT"">world</field>
                  </shadow>
                </value>
              </block>
            </next>
          </block>
        </next>
      </block>
    </statement>
  </block>
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("hello", string.Join(",", TestExtensions.GetDebugText()));
        }
Example #5
0
        public void Test_Example2()
        {
            var xml    = File.ReadAllText("../../../Examples/example2.xml");
            var parser = new Parser();

            parser.AddStandardBlocks();
            var printer = parser.AddDebugPrinter();

            parser.Parse(xml).Evaluate();

            Assert.AreEqual("Don't panic", TestExtensions.GetDebugText().First());
        }
Example #6
0
        public void Test_Example1()
        {
            var xml    = File.ReadAllText("../../../Examples/example1.xml");
            var parser = new Parser();

            parser.AddStandardBlocks();
            var printer = parser.AddDebugPrinter();

            parser.Parse(xml).Evaluate();

            Assert.AreEqual("2,4,8,16", string.Join(",", TestExtensions.GetDebugText()));
        }
Example #7
0
        public void Issue_17()
        {
            const string xml = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <block type=""controls_if"" id=""`Du+(_vc^5di^SX-r)Gy"" x=""-563"" y=""-187"">
    <value name=""IF0"">
      <block type=""logic_compare"" id=""IzaPI5pFR:fkFMJ@)E]9"">
        <field name=""OP"">EQ</field>
        <value name=""A"">
          <block type=""math_number"" id=""?M*ou@g~A#r=O3ic;$(5"">
            <field name=""NUM"">1</field>
          </block>
        </value>
        <value name=""B"">
          <block type=""text_indexOf"" id=""G`rDOxciV.H@2e(^)d$r"">
            <field name=""END"">FIRST</field>
            <value name=""VALUE"">
              <block type=""text"" id=""ofLQvK5G,]B7,_IWMu1W"">
                <field name=""TEXT"">foo bar baz</field>
              </block>
            </value>
            <value name=""FIND"">
              <shadow type=""text"" id=""c0^@7@Cn!{_2GLo/3ki`"">
                <field name=""TEXT"">foo</field>
              </shadow>
            </value>
          </block>
        </value>
      </block>
    </value>
    <statement name=""DO0"">
      <block type=""text_print"" id=""vhk7~#CLW_:TTeXy#.34"">
        <value name=""TEXT"">
          <shadow type=""text"" id=""x?1zGi1mkq)$XIq7*t_-"">
            <field name=""TEXT"">it worked</field>
          </shadow>
        </value>
      </block>
    </statement>
  </block>
</xml>
";

            var output = new Parser()
                         .AddStandardBlocks()
                         .AddDebugPrinter()
                         .Parse(xml)
                         .Evaluate();

            Assert.AreEqual("it worked", TestExtensions.GetDebugText().First());
        }
Example #8
0
        public void Test_Controls_For_Each()
        {
            const string xml = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <variables>
    <variable type="""" id=""%%M;gt+!MJxzjuj,*~.X"">i</variable>
  </variables>
  <block type=""controls_forEach"" id=""Mue=s2=VyJ,|.^Jk7Y6$"" x=""112"" y=""112"">
    <field name=""VAR"" id=""%%M;gt+!MJxzjuj,*~.X"" variabletype="""">i</field>
    <value name=""LIST"">
      <block type=""lists_split"" id=""U@Eu{y]crRkv4qeX!wgB"">
        <mutation mode=""SPLIT""></mutation>
        <field name=""MODE"">SPLIT</field>
        <value name=""INPUT"">
          <block type=""text"" id=""JkR7d1MvrJydd#t2yr,O"">
            <field name=""TEXT"">a,b,c</field>
          </block>
        </value>
        <value name=""DELIM"">
          <shadow type=""text"" id=""M6%A!]!KJA04vggp9X8*"">
            <field name=""TEXT"">,</field>
          </shadow>
        </value>
      </block>
    </value>
    <statement name=""DO"">
      <block type=""text_print"" id="";j~?B]t;80-uv1Ef3qnZ"">
        <value name=""TEXT"">
          <shadow type=""text"" id=""wD|J$)cg{^g4+P3!1QpW"">
            <field name=""TEXT"">abc</field>
          </shadow>
          <block type=""variables_get"" id=""Kp`QS4LS,+l.Bb0~+tx2"">
            <field name=""VAR"" id=""%%M;gt+!MJxzjuj,*~.X"" variabletype="""">i</field>
          </block>
        </value>
      </block>
    </statement>
  </block>
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("a|b|c", string.Join("|", TestExtensions.GetDebugText()));
        }
Example #9
0
        public void Test_Text_Join()
        {
            const string xml = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <variables>
    <variable>x</variable>
  </variables>
  <block type=""variables_set"">
    <field name=""VAR"">x</field>
    <value name=""VALUE"">
      <block type=""text_join"">
        <mutation items=""3""></mutation>
        <value name=""ADD0"">
          <block type=""text"">
            <field name=""TEXT"">foo</field>
          </block>
        </value>
        <value name=""ADD1"">
          <block type=""text"">
            <field name=""TEXT"">bar</field>
          </block>
        </value>
      </block>
    </value>
    <next>
      <block type=""text_print"">
        <value name=""TEXT"">
          <shadow type=""text"">
            <field name=""TEXT"">abc</field>
          </shadow>
          <block type=""variables_get"">
            <field name=""VAR"">x</field>
          </block>
        </value>
      </block>
    </next>
  </block>
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("foobar", TestExtensions.GetDebugText().First());
        }
Example #10
0
        public void Test_Text_Append()
        {
            const string xml = @"
<xml>
 <variables>
    <variable type="""">x</variable>
  </variables>
  <block type=""variables_set"">
    <field name=""VAR"">x</field>
    <value name=""VALUE"">
      <block type=""text"">
        <field name=""TEXT"">foo</field>
      </block>
    </value>
    <next>
      <block type=""text_append"">
        <field name=""VAR"">x</field>
        <value name=""TEXT"">
          <shadow type=""text"">
            <field name=""TEXT"">bar</field>
          </shadow>
        </value>
        <next>
          <block type=""text_print"">
            <value name=""TEXT"">
              <shadow type=""text"">
                <field name=""TEXT"">abc</field>
              </shadow>
              <block type=""variables_get"">
                <field name=""VAR"">x</field>
              </block>
            </value>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("foobar", TestExtensions.GetDebugText().First());
        }
Example #11
0
        public void Test_Controls_For()
        {
            const string xml = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <variables>
    <variable type="""" id=""%%M;gt+!MJxzjuj,*~.X"">i</variable>
  </variables>
  <block type=""controls_for"" id=""d/iaO@0M8X3$3qCi@QR]"" x=""113"" y=""263"">
    <field name=""VAR"" id=""%%M;gt+!MJxzjuj,*~.X"" variabletype="""">i</field>
    <value name=""FROM"">
      <shadow type=""math_number"" id=""Rx;IYft^ona!~Skl@in`"">
        <field name=""NUM"">1</field>
      </shadow>
    </value>
    <value name=""TO"">
      <shadow type=""math_number"" id=""sl*-19-B$bU7=H3D2W`q"">
        <field name=""NUM"">3</field>
      </shadow>
    </value>
    <value name=""BY"">
      <shadow type=""math_number"" id=""I6{~_*N.9;,`_8brq`)i"">
        <field name=""NUM"">1</field>
      </shadow>
    </value>
    <statement name=""DO"">
      <block type=""text_print"" id="";j~?B]t;80-uv1Ef3qnZ"">
        <value name=""TEXT"">
          <shadow type=""text"" id=""wD|J$)cg{^g4+P3!1QpW"">
            <field name=""TEXT"">abc</field>
          </shadow>
          <block type=""variables_get"" id=""Kp`QS4LS,+l.Bb0~+tx2"">
            <field name=""VAR"" id=""%%M;gt+!MJxzjuj,*~.X"" variabletype="""">i</field>
          </block>
        </value>
      </block>
    </statement>
  </block>
</xml>
";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("1,2,3", string.Join(",", TestExtensions.GetDebugText()));
        }
Example #12
0
        public void Issue_40()
        {
            const string xml = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <block type=""controls_if"" id=""`Du+(_vc^5di^SX-r)Gy"" x=""-563"" y=""-187"">
    <value name=""IF0"">
      <block type=""logic_compare"" id=""IzaPI5pFR:fkFMJ@)E]9"">
        <field name=""OP"">EQ</field>
        <value name=""A"">
          <block type=""logic_boolean"">
            <field name=""BOOL"">TRUE</field>
          </block>
        </value>
        <value name=""B"">
          <block type=""logic_boolean"">
            <field name=""BOOL"">TRUE</field>
          </block>
        </value>
      </block>
    </value>
    <statement name=""DO0"">
      <block type=""text_print"" id=""vhk7~#CLW_:TTeXy#.34"">
        <value name=""TEXT"">
          <shadow type=""text"" id=""x?1zGi1mkq)$XIq7*t_-"">
            <field name=""TEXT"">it worked</field>
          </shadow>
        </value>
      </block>
    </statement>
  </block>
</xml>
";

            var output = new Parser()
                         .AddStandardBlocks()
                         .AddDebugPrinter()
                         .Parse(xml)
                         .Evaluate();

            Assert.AreEqual("it worked", TestExtensions.GetDebugText().First());
        }
Example #13
0
        public void Test_Shadow()
        {
            const string xml = @"
<xml>
  <block type=""text_print"">
    <value name=""TEXT"">
      <shadow type=""text"">
        <field name=""TEXT"">abc</field>
      </shadow>
    </value>
  </block>
</xml>";

            new Parser()
            .AddStandardBlocks()
            .AddDebugPrinter()
            .Parse(xml)
            .Evaluate();

            Assert.AreEqual("abc", TestExtensions.GetDebugText().First());
        }
Example #14
0
        public void Test_Controls_WhileUntil()
        {
            const string xml    = @"
<xml xmlns=""http://www.w3.org/1999/xhtml"">
  <variables>
    <variable type="""">x</variable>
  </variables>
  <block type=""variables_set"">
    <field name=""VAR"" variabletype="""">x</field>
    <value name=""VALUE"">
      <block type=""math_number"">
        <field name=""NUM"">0</field>
      </block>
    </value>
    <next>
      <block type=""controls_whileUntil"">
        <field name=""MODE"">WHILE</field>
        <value name=""BOOL"">
          <block type=""logic_compare"">
            <field name=""OP"">EQ</field>
            <value name=""A"">
              <block type=""variables_get"">
                <field name=""VAR"" variabletype="""">x</field>
              </block>
            </value>
            <value name=""B"">
              <block type=""math_number"">
                <field name=""NUM"">0</field>
              </block>
            </value>
          </block>
        </value>
        <statement name=""DO"">
          <block type=""text_print"">
            <value name=""TEXT"">
              <shadow type=""text"">
                <field name=""TEXT"">abc</field>
              </shadow>
              <block type=""variables_get"">
                <field name=""VAR"" variabletype="""">x</field>
              </block>
            </value>
            <next>
              <block type=""variables_set"">
                <field name=""VAR"" variabletype="""">x</field>
                <value name=""VALUE"">
                  <block type=""math_number"">
                    <field name=""NUM"">1</field>
                  </block>
                </value>
              </block>
            </next>
          </block>
        </statement>
      </block>
    </next>
  </block>
</xml>
";
            var          parser = new Parser()
                                  .AddStandardBlocks()
                                  .AddDebugPrinter()
                                  .Parse(xml)
                                  .Evaluate();

            Assert.AreEqual("0", string.Join(",", TestExtensions.GetDebugText()));
        }