public void RelinqScriptParserPotpourri()
        {
            var js = "({c:c}).f(function($0){return (2+2)*$0[2]}, [{$0:1}, {$0:2}])";
            var ast = new RelinqScriptParser(js, TestTransformationFramework.Integration).Parse();

            var paths = GetAllRootToLeafPaths(ast);

//            using(var fs = new StreamWriter(@"d:\pew-parser2.txt", false))
//            {
//                fs.WriteLine(String.Format("Assert.AreEqual({0}, paths.Count);", paths.Count));
//                for (var i = 0; i < paths.Count; i++)
//                {
//                    var s = paths[i];
//                    fs.WriteLine(String.Format(
//                        "Assert.AreEqual(\"{0}\", paths.ElementAt({1}));",
//                        s.ToVerbatimCSharpCopy(), i));
//                }
//            }

            Assert.AreEqual(6, paths.Count);
            Assert.AreEqual("/()/f:f/new/v:c", paths.ElementAt(0));
            Assert.AreEqual("/()/λ/*/+/c:(2, DecimalIntegerLiteral)", paths.ElementAt(1));
            Assert.AreEqual("/()/λ/*/+/c:(2, DecimalIntegerLiteral)", paths.ElementAt(2));
            Assert.AreEqual("/()/λ/*/[]/v:$0", paths.ElementAt(3));
            Assert.AreEqual("/()/λ/*/[]/c:(2, DecimalIntegerLiteral)", paths.ElementAt(4));
            Assert.AreEqual("/()/c:([{$0 : 1}, {$0 : 2}], ARRAY)", paths.ElementAt(5));
        }
        public void RelinqScriptParserWtf1()
        {
            var js = "2/2";
            var ast = new RelinqScriptParser(js, TestTransformationFramework.Integration).Parse();

            var paths = GetAllRootToLeafPaths(ast);

//            using (var fs = new StreamWriter(@"d:\pew-parser1.txt", false))
//            {
//                fs.WriteLine(String.Format("Assert.AreEqual({0}, paths.Count);", paths.Count));
//                for (var i = 0; i < paths.Count; i++)
//                {
//                    var s = paths[i];
//                    fs.WriteLine(String.Format(
//                        "Assert.AreEqual(\"{0}\", paths.ElementAt({1}));",
//                        s.ToVerbatimCSharpCopy(), i));
//                }
//            }

            Assert.AreEqual(2, paths.Count);
            Assert.AreEqual("///c:(2, DecimalIntegerLiteral)", paths.ElementAt(0));
            Assert.AreEqual("///c:(2, DecimalIntegerLiteral)", paths.ElementAt(1));
        }
Beispiel #3
0
 public Expression Compile(String relinqScriptCode)
 {
     var ast = new RelinqScriptParser(relinqScriptCode, Integration).Parse();
     var inferences = new TypeInferenceEngine(ast, Integration).InferTypes();
     return new CSharpExpressionTreeBuilder(ast, Integration).Compile(inferences);
 }
 public void RelinqScriptParserWtf2()
 {
     var js = "2;a*2;";
     var ast = new RelinqScriptParser(js, TestTransformationFramework.Integration).Parse();
 }
        public void RelinqScriptBuilderMonstrousTestNightmaresGoneLive()
        {
            var js = TestTransformationFramework.CSharpToJS(RelinqSuiteTests.Monster.Expression);
            var ast = new RelinqScriptParser(js, TestTransformationFramework.Integration).Parse();

            var paths = GetAllRootToLeafPaths(ast).Select(p => Rle(p, 2)).ToList();

//            using(var fs = new StreamWriter(@"d:\pew-parser3.txt", false))
//            {
//                fs.WriteLine(String.Format("Assert.AreEqual({0}, paths.Count);", paths.Count));
//                for (var i = 0; i < paths.Count; i++)
//                {
//                    var s = paths[i];
//                    fs.WriteLine(String.Format(
//                        "Assert.AreEqual(\"{0}\", paths.ElementAt({1}));", 
//                        s.ToVerbatimCSharpCopy(), i));
//                }
//            }

            Assert.AreEqual(92, paths.Count);
            Assert.AreEqual("sgsow11s11/f:Companies/k:ctx", paths.ElementAt(0));
            Assert.AreEqual("sgsow11s10/()/λ/new/v:c", paths.ElementAt(1));
            Assert.AreEqual("sgsow11s10/()/λ/new/c:('ee1e42c3-1d16-465a-b2b1-bcdbc645db3b', StringLiteral)", paths.ElementAt(2));
            Assert.AreEqual("sgsow11s9/()/λ/new/v:$0", paths.ElementAt(3));
            Assert.AreEqual("sgsow11s9/()/λ/new/c:('2', StringLiteral)", paths.ElementAt(4));
            Assert.AreEqual("sgsow11s8/()/λ/new/v:$2", paths.ElementAt(5));
            Assert.AreEqual("sgsow11s8/()/λ/new/()/f:D/f:c/f:$0/v:$2", paths.ElementAt(6));
            Assert.AreEqual("sgsow11s7/()/λ/new/v:$4", paths.ElementAt(7));
            Assert.AreEqual("sgsow11s7/()/λ/new/[]/f:Array1D/f:c/f:$0/f:$2/v:$4", paths.ElementAt(8));
            Assert.AreEqual("sgsow11s7/()/λ/new/[]/c:(0, DecimalIntegerLiteral)", paths.ElementAt(9));
            Assert.AreEqual("sgsow11s6/()/λ/new/v:$6", paths.ElementAt(10));
            Assert.AreEqual("sgsow11s6/()/λ/new/[]/[]/f:Array2DJagged/f:c/f:$0/f:$2/f:$4/v:$6", paths.ElementAt(11));
            Assert.AreEqual("sgsow11s6/()/λ/new/[]/[]/c:(0, DecimalIntegerLiteral)", paths.ElementAt(12));
            Assert.AreEqual("sgsow11s6/()/λ/new/[]/c:(0, DecimalIntegerLiteral)", paths.ElementAt(13));
            Assert.AreEqual("sgsow11s5/()/λ/new/v:$8", paths.ElementAt(14));
            Assert.AreEqual("sgsow11s5/()/λ/new/[]/f:Array2DRect/f:c/f:$0/f:$2/f:$4/f:$6/v:$8", paths.ElementAt(15));
            Assert.AreEqual("sgsow11s5/()/λ/new/[]/c:(0, DecimalIntegerLiteral)", paths.ElementAt(16));
            Assert.AreEqual("sgsow11s5/()/λ/new/[]/c:(0, DecimalIntegerLiteral)", paths.ElementAt(17));
            Assert.AreEqual("sgsow11s4/()/λ/new/v:$10", paths.ElementAt(18));
            Assert.AreEqual("sgsow11s4/()/λ/new/f:GetHashCode/+/c:(2, DecimalIntegerLiteral)", paths.ElementAt(19));
            Assert.AreEqual("sgsow11s4/()/λ/new/f:GetHashCode/+/test/!=/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/v:$10", paths.ElementAt(20));
            Assert.AreEqual("sgsow11s4/()/λ/new/f:GetHashCode/+/test/!=/c:(null, NULL)", paths.ElementAt(21));
            Assert.AreEqual("sgsow11s4/()/λ/new/f:GetHashCode/+/test/c:(2, DecimalIntegerLiteral)", paths.ElementAt(22));
            Assert.AreEqual("sgsow11s4/()/λ/new/f:GetHashCode/+/test/c:(0, DecimalIntegerLiteral)", paths.ElementAt(23));
            Assert.AreEqual("sgsow11s3/()/λ/new/v:$12", paths.ElementAt(24));
            Assert.AreEqual("sgsow11s3/()/λ/new/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/v:$12", paths.ElementAt(25));
            Assert.AreEqual("sgsow11ss/()/λ/new/v:$14", paths.ElementAt(26));
            Assert.AreEqual("sgsow11ss/()/λ/new/test/!=/f:Id/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/v:$14", paths.ElementAt(27));
            Assert.AreEqual("sgsow11ss/()/λ/new/test/!=/c:(null, NULL)", paths.ElementAt(28));
            Assert.AreEqual("sgsow11ss/()/λ/new/test/f:Id/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/v:$14", paths.ElementAt(29));
            Assert.AreEqual("sgsow11ss/()/λ/new/test/c:('\\0\\u031\\b\\r\\n\\f\\t\\v\\uf4\\'\"\\\\abcdef', StringLiteral)", paths.ElementAt(30));
            Assert.AreEqual("sgsow11s/()/λ/new/v:$16", paths.ElementAt(31));
            Assert.AreEqual("sgsow11s/()/λ/new/()/f:ToUpper/+/f:Name/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/v:$16", paths.ElementAt(32));
            Assert.AreEqual("sgsow11s/()/λ/new/()/f:ToUpper/+/c:(' rocks', StringLiteral)", paths.ElementAt(33));
            Assert.AreEqual("sgsow11/()/λ/new/v:$18", paths.ElementAt(34));
            Assert.AreEqual("sgsow11/()/λ/new/test/==/()/f:mg/f:$12/f:$14/f:$16/v:$18", paths.ElementAt(35));
            Assert.AreEqual("sgsow11/()/λ/new/test/==/c:(4, DecimalIntegerLiteral)", paths.ElementAt(36));
            Assert.AreEqual("sgsow11/()/λ/new/test/f:mg/f:$12/f:$14/f:$16/v:$18", paths.ElementAt(37));
            Assert.AreEqual("sgsow11/()/λ/new/test/λ/c:(4, DecimalIntegerLiteral)", paths.ElementAt(38));
            Assert.AreEqual("sgsow10/()/λ/==/()/f:imba/v:$20", paths.ElementAt(39));
            Assert.AreEqual("sgsow10/()/λ/==/c:(4, DecimalIntegerLiteral)", paths.ElementAt(40));
            Assert.AreEqual("sgsow9/()/λ/==/[]/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(41));
            Assert.AreEqual("sgsow9/()/λ/==/[]/c:(4, DecimalIntegerLiteral)", paths.ElementAt(42));
            Assert.AreEqual("sgsow9/()/λ/==/[]/c:(2, DecimalIntegerLiteral)", paths.ElementAt(43));
            Assert.AreEqual("sgsow9/()/λ/==/c:(8, DecimalIntegerLiteral)", paths.ElementAt(44));
            Assert.AreEqual("sgsow8/()/λ/==/f:Description/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(45));
            Assert.AreEqual("sgsow8/()/λ/==/c:('Dummy', StringLiteral)", paths.ElementAt(46));
            Assert.AreEqual("sgsow7/()/λ/==/==/[]/f:Description/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(47));
            Assert.AreEqual("sgsow7/()/λ/==/==/[]/c:(0, DecimalIntegerLiteral)", paths.ElementAt(48));
            Assert.AreEqual("sgsow7/()/λ/==/==/c:('c', StringLiteral)", paths.ElementAt(49));
            Assert.AreEqual("sgsow7/()/λ/==/c:(true, TRUE)", paths.ElementAt(50));
            Assert.AreEqual("sgsow6/()/λ/()/f:LolMethod/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(51));
            Assert.AreEqual("sgsow6/()/λ/()/c:('c', StringLiteral)", paths.ElementAt(52));
            Assert.AreEqual("sgsow5/()/λ/()/f:LolMethod/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(53));
            Assert.AreEqual("sgsow5/()/λ/()/c:(0, DecimalIntegerLiteral)", paths.ElementAt(54));
            Assert.AreEqual("sgsow4/()/λ/>/f:FoundationDate/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(55));
            Assert.AreEqual("sgsow4/()/λ/>/c:('203-01-01', StringLiteral)", paths.ElementAt(56));
            Assert.AreEqual("sgsow3/()/λ/==/||/f:e/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(57));
            Assert.AreEqual("sgsow3/()/λ/==/||/f:e/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(58));
            Assert.AreEqual("sgsow3/()/λ/==/c:(true, TRUE)", paths.ElementAt(59));
            Assert.AreEqual("sgsoww/()/λ/==/test/!=/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(60));
            Assert.AreEqual("sgsoww/()/λ/==/test/!=/c:(null, NULL)", paths.ElementAt(61));
            Assert.AreEqual("sgsoww/()/λ/==/test/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(62));
            Assert.AreEqual("sgsoww/()/λ/==/test/test/!=/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(63));
            Assert.AreEqual("sgsoww/()/λ/==/test/test/!=/c:(null, NULL)", paths.ElementAt(64));
            Assert.AreEqual("sgsoww/()/λ/==/test/test/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(65));
            Assert.AreEqual("sgsoww/()/λ/==/test/test/f:Employees/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(66));
            Assert.AreEqual("sgsoww/()/λ/==/c:(true, TRUE)", paths.ElementAt(67));
            Assert.AreEqual("sgsow/()/λ/()/f:Any/()/f:Concat/f:e/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(68));
            Assert.AreEqual("sgsow/()/λ/()/f:Any/()/c:([{Id : null, FirstName : 'Dummy', LastName : null, CompanyId : null}], ARRAY)", paths.ElementAt(69));
            Assert.AreEqual("sgsow/()/λ/()/λ/==/f:FirstName/v:ae", paths.ElementAt(70));
            Assert.AreEqual("sgsow/()/λ/()/λ/==/c:('Dummy', StringLiteral)", paths.ElementAt(71));
            Assert.AreEqual("sgso/()/λ/()/f:LolMethod/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(72));
            Assert.AreEqual("sgso/()/λ/()/c:(0, DecimalIntegerLiteral)", paths.ElementAt(73));
            Assert.AreEqual("sgso/()/λ/()/f:i/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(74));
            Assert.AreEqual("sgso/()/λ/()/c:(2, DecimalIntegerLiteral)", paths.ElementAt(75));
            Assert.AreEqual("sgs/()/λ/f:FoundationDate/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(76));
            Assert.AreEqual("sg/()/λ/new/v:$20", paths.ElementAt(77));
            Assert.AreEqual("sg/()/λ/new/new/f:c/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(78));
            Assert.AreEqual("sg/()/λ/new/new/f:i/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(79));
            Assert.AreEqual("sg/()/λ/new/new/f:g/f:$0/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(80));
            Assert.AreEqual("sg/()/λ/new/new/f:n/f:$2/f:$4/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(81));
            Assert.AreEqual("sg/()/λ/new/new/f:ai/f:$6/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(82));
            Assert.AreEqual("sg/()/λ/new/new/f:ai_jagged/f:$8/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(83));
            Assert.AreEqual("sg/()/λ/new/new/f:ai_rect/f:$10/f:$12/f:$14/f:$16/f:$18/v:$20", paths.ElementAt(84));
            Assert.AreEqual("sg/()/λ/new/new/c:([[2, 'string'], [3, 'string']], ARRAY)", paths.ElementAt(85));
            Assert.AreEqual("sg/()/λ/new/new/c:([1, 2, 3], ARRAY)", paths.ElementAt(86));
            Assert.AreEqual("sg/()/λ/new/new/f:id/f:$16/f:$18/v:$20", paths.ElementAt(87));
            Assert.AreEqual("sg/()/λ/new/new/f:ts/f:$18/v:$20", paths.ElementAt(88));
            Assert.AreEqual("s/()/λ/f:Name/f:c/f:monster/v:$22", paths.ElementAt(89));
            Assert.AreEqual("s/()/λ/f:monster/v:$22", paths.ElementAt(90));
            Assert.AreEqual("/()/λ/v:monsterg", paths.ElementAt(91));
        }