Пример #1
0
 public void EvaluateBooleanParentheticalStatements()
 {
     Assert.IsTrue((bool)FSQLEngine.Create().Execute("{return TRUE AND (TRUE OR FALSE);}"));
     Assert.IsTrue((bool)FSQLEngine.Create().Execute("{return TRUE OR (TRUE AND FALSE);}"));
     Assert.IsFalse((bool)FSQLEngine.Create().Execute("{return TRUE AND (TRUE AND FALSE);}"));
     //Assert.IsFalse((bool)FSQLEngine.Create().Execute("return FALSE AND FALSE"));
 }
Пример #2
0
 public void EvaluateOrderOfOperations()
 {
     Assert.AreEqual(0D, FSQLEngine.Create().Execute("{return 1+2-3;}"));
     Assert.AreEqual(2D, FSQLEngine.Create().Execute("{return 2*4-6;}"));
     Assert.AreEqual(-2D, FSQLEngine.Create().Execute("{return 6-4*2;}"));
     Assert.AreEqual(4D, FSQLEngine.Create().Execute("{return (6-4)*2;}"));
 }
Пример #3
0
        public void TestOpenRowSet()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
   MAP Release TO ""..\\Release"" WITH FILTER ""*.*"";
   MAP Debug To ""."" WITH FILTER ""*.*"";
}");

            Assert.IsNotNull(ctx);
            Assert.AreEqual(2, ctx.Aliases.Count());
            var rel = ctx.GetAlias("Release");
            var dbg = ctx.GetAlias("Debug");

            var relTable = rel.Open();
            var dbgTable = dbg.Open();

            //relTable.GetData().WriteLine();
            //dbgTable.GetData().WriteLine();

            var results = relTable.Join(
                dbgTable,
                (l, r) => l.FileName == r.FileName,
                ScopedAttribute.Create(new[]
            {
                new[] { "Release", "FileName", "ReleaseFullName" },
                new[] { "Release", "size", "ReleaseSize" },
                new[] { "Debug", "size", "DebugSize" }
            }).ToArray()
                );

            results.WriteLine();
        }
Пример #4
0
        public void TestSimulateDeleteFromStatement()
        {
            var script = @"
            { 
                SIMULATE {
                    DELETE FROM "".\\Folder2"" F2;
                }

                return SELECT * FROM F2; // Should see alias from query above.
                                
            }";

            var ctx = FSQLEngine.Create().Debug(script, xCtx => xCtx.TracingEnabled = true);

            //var expected = "TargetFile1.txt";
            Assert.IsNotNull(ctx);
            if (ctx.TracingEnabled)
            {
                TestCtx.WriteLine(ctx.Dump(Priority.Verbose));
            }

            var actual = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(actual);

            actual.WriteLine();

            Assert.AreEqual(3, actual.Rows.Count);
        }
Пример #5
0
        public void TestJoinOperation()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
   TRACE ON;

   MAP F1 TO "".\\Folder1"";
   MAP F2 To "".\\Folder2"";

   return
   SELECT F1.FileName, F2.Size as DebugSize, F1.Size AS F1Size
     FROM F1 JOIN F2 ON F1.FileName == F2.FileName AS CompareSizes
   ;

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(results);

            results.WriteLine();

            if (ctx.TracingEnabled)
            {
                TestCtx.WriteLine(ctx.Dump(Priority.Verbose));
            }

            Assert.AreEqual(3, results.Columns.Count);
        }
Пример #6
0
        public void TestSelectWithSpecificAttributesReorderingFields()
        {
            var expected = @".";
            var ctx      = FSQLEngine.Create().Debug(@"
{   
   MAP Bin To ""."" WITH FILTER ""*.dll"";

   @Results = SELECT Bin.Size AS FileLength, Created as CreatedOn, Bin.Updated AS LastModified, NameOnly, Extension as Ext FROM Bin;
   return @Results;

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(results);

            Assert.AreEqual(1, ctx.Aliases.Count());
            var bin = ctx.GetAlias("Bin");

            Assert.AreEqual(expected, bin.Location);
            var binTable = bin.Open();

            Assert.AreEqual(binTable.Rows.Count(), results.Rows.Count);

            results.WriteLine();
        }
Пример #7
0
 public void EvaluateBooleanAndStatements()
 {
     Assert.IsTrue((bool)FSQLEngine.Create().Execute("{return TRUE AND TRUE;}"));
     Assert.IsFalse((bool)FSQLEngine.Create().Execute("{return TRUE AND FALSE;}"));
     Assert.IsFalse((bool)FSQLEngine.Create().Execute("{return FALSE AND TRUE;}"));
     Assert.IsFalse((bool)FSQLEngine.Create().Execute("{return FALSE AND FALSE;}"));
 }
Пример #8
0
        public void TestOutputToScreen()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
   MAP Rel TO ""..\\Release"";
   MAP Dbg To ""."";

   @results =
   SELECT Rel.FileName as Name, Dbg.Size as Debug, Rel.Size AS Release
     FROM Rel JOIN Dbg ON Rel.FileName == Dbg.FileName AS CompareSizes
   OUTPUT TO SCREEN;

    return @results;

}", execCtx => execCtx.TracingEnabled = true);

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(results);

            TestCtx.WriteLine(ctx.Dump(Priority.Verbose));

            Assert.AreEqual(3, results.Columns.Count);
        }
Пример #9
0
        public void TestJoinOperationUsingBin()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
   MAP Rel TO ""..\\Release"";
   MAP Dbg To ""."";

   return
   SELECT Rel.FileName, Dbg.Size as DebugSize, Rel.Size AS ReleaseSize
     FROM Rel JOIN Dbg ON Rel.FileName == Dbg.FileName AS CompareSizes
   ;

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(results);

            results.WriteLine();

            TestCtx.WriteLine(ctx.Dump(Priority.Verbose));

            Assert.AreEqual(3, results.Columns.Count);
        }
        public void TestRecursiveFunction()
        {
            var script   = @"
{
    Trace On;
    Func Factorial(@num) {
        if (@num == 0) {
            @results = 1;
        } else {
            @prev = Factorial(@num-1);
            @results = @num * @prev;
        }
        return @results;
    }
    return Factorial(5);
}
";
            var expected = 5 * 4 * 3 * 2;
            var ctx      = FSQLEngine.Create().Debug(script);
            var actual   = (int)ctx.ReturnValue;
            var dump     = ctx.Dump(Priority.Verbose);

            TestCtx.WriteLine(dump.Replace("{", "{{").Replace("}", "}}"));
            Assert.AreEqual(expected, actual);
        }
Пример #11
0
        public void TestSubquery()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
   TRACE ON;

   MAP F1 TO "".\\Folder1"";
   MAP F2 To "".\\Folder2"";

   return
       SELECT F1.FileName as FolderOneOnly FROM F1
        WHERE F1.FileName NOT IN (SELECT F2.FileName FROM F2)
   ;     
   
}");

            //var expected = "TargetFile1";
            Assert.IsNotNull(ctx);
            if (ctx.TracingEnabled)
            {
                TestCtx.WriteLine(ctx.Dump(Priority.Verbose));
            }


            var actual = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(actual);

            Console.WriteLine($"File in Folder 1 But not Folder 2:");
            actual.WriteLine();


            // Assert.AreEqual(expected, actual);
        }
        public void TestPrivateVariables()
        {
            var script   = @"
{
    Trace On;

    @notExported = 65;

    func testExport() {
        @exported = 35; // This variable will be exported to the calling context.
        @notExported = 80;
        export @exported;
        return @notExported == 80;
    }

    @fnResults=testExport(); // Run the function.
    WriteLine(""@fnResults should be TRUE."");
    return @notExported;
}
";
            var expected = 65;
            var ctx      = FSQLEngine.Create().Debug(script);
            var actual   = ctx.ReturnValue;

            TestCtx.WriteLine(ctx.Dump(Priority.Verbose));
            Assert.AreEqual(expected, actual);
            //TestCtx.WriteLine(ctx["fnresults"].ToString());
            //TestCtx.WriteLine(ctx["fnresults"].GetType().Name);
            Assert.IsTrue((bool)ctx["fnresults"]);
        }
Пример #13
0
        public void TestSimulateStatement()
        {
            var script = @"
            { 
                @results = Simulate { 
                    @retValue = SELECT F1.FileName as F1Name, F2.FileName as F2Name, F1.CheckSum 
                                  FROM "".\\Folder1"" F1 
                                  JOIN "".\\Folder2"" F2 
                                    ON ((F1.FileName == F2.FileName) AND NOT (F1.CheckSum == F2.CheckSum)); 
                    return @retValue;
                };
                return @results;
            }";

            var ctx = FSQLEngine.Create().Debug(script, xCtx => xCtx.TracingEnabled = true);

            //var expected = "TargetFile1.txt";
            Assert.IsNotNull(ctx);
            if (ctx.TracingEnabled)
            {
                TestCtx.WriteLine(ctx.Dump(Priority.Verbose));
            }

            var actual = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(actual);

            Console.WriteLine($"File in Folder 1 With Size > 30 (Including Checksums):");
            actual.WriteLine();

            Assert.AreEqual(1, actual.Rows.Count);
        }
Пример #14
0
        public void SelectWithInlineAlias()
        {
            var expected = @".";
            var ctx      = FSQLEngine.Create().Debug(@"
{      
   @Results = SELECT Bin.Size AS FileLength, NameOnly, Extension as Ext 
                FROM ""."" Bin
              ;
   return @Results;

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(results);

            Assert.AreEqual(1, ctx.Aliases.Count());
            var bin = ctx.GetAlias("Bin");

            Assert.AreEqual(expected, bin.Location);
            var binTable = bin.Open();

            Assert.AreEqual(binTable.Rows.Count(), results.Rows.Count);

            results.WriteLine();
        }
        public void TestCoreDumpSystemFunction()
        {
            var script               = @"
{
    TRACE ON;
    @topLevelVariable = 5;
    FUNC myfunction() {

        FUNC subFunction() {
            return CoreDump();
        }
        
        @tempvar = subFunction();
        WriteLine();
        WriteLine(""==========================="");
        WriteLine(@tempvar);
        WriteLine(""==========================="");
        WriteLine();
        return @tempvar;
    }

    return myFunction();
}
";
            IExecutionContext ctx    = null;
            object            actual = null;

            try {
                ctx    = FSQLEngine.Create().Debug(script);
                actual = ctx.ReturnValue;
            } finally {
                Console.WriteLine(ctx.Dump(Priority.Verbose));
                //TestCtx.WriteLine(actual.ToString());
            }
        }
Пример #16
0
        public void SelectWithAlternateWildcard()
        {
            var expected = @".";
            var ctx      = FSQLEngine.Create().Debug(@"
{   
   TRACE ON;
   MAP Bin To ""."" WITH FILTER ""FSQL*.*"";

   @Results = SELECT Bin.Size AS FileLength, NameOnly, Extension as Ext FROM Bin;
   return @results; // Notice case insensitivity...

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as DataTable;

            Assert.IsNotNull(results);

            Assert.AreEqual(3, results.Columns.Count);

            Assert.AreEqual(1, ctx.Aliases.Count());
            var bin = ctx.GetAlias("Bin");

            Assert.AreEqual(expected, bin.Location);
            var binTable = bin.Open();

            Assert.AreEqual(binTable.Rows.Count(), results.Rows.Count);

            results.WriteLine();

            TestContext.WriteLine(ctx.ToString());
        }
Пример #17
0
        public void TestJsonOutputToClipboard()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
   MAP Rel TO ""..\\Release"";
   MAP Dbg To ""."";

   @results =
   SELECT Rel.FileName, Dbg.Size, Rel.Size AS ReleaseSize
     FROM Rel JOIN Dbg ON Rel.FileName == Dbg.FileName 
      AND NOT (Rel.Size == Dbg.Size) AS CompareSizes
   FORMAT AS JSON
   OUTPUT TO CLIPBOARD;

    return @results;

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as string;

            Assert.IsNotNull(results);
            Console.WriteLine(results);

            var clipString = System.Windows.Forms.Clipboard.GetText();

            Assert.AreEqual(results, clipString);
        }
Пример #18
0
        public void EvaluateStringConcat()
        {
            var          source   = "{ return \"Hello, \" + \"World!\";} ";
            const string expected = "Hello, World!";
            var          actual   = FSQLEngine.Create().Execute(source);

            Assert.AreEqual(expected, actual);
        }
        public void TestIntegerReturnStatement()
        {
            var expected = 31;
            var actual   = FSQLEngine.Create().Execute("{ return 31; return 42; }");

            Assert.AreEqual(expected, actual);

            expected = 78;
            actual   = FSQLEngine.Create().Execute("{ return 78; return 61; }");
            Assert.AreEqual(expected, actual);
        }
        public void TestBooleanReturnStatement()
        {
            var expected = true;
            var actual   = FSQLEngine.Create().Execute("{ return true; return false; }");

            Assert.AreEqual(expected, actual);

            expected = false;
            actual   = FSQLEngine.Create().Execute("{ return false; return true; }");
            Assert.AreEqual(expected, actual);
        }
Пример #21
0
        public void CalculateLeahsAge()
        {
            var expected = 13;
            var actual   = FSQLEngine.Create().Execute(@"
{
   @currentyear=2017;
   @leahwasbornin=2004;
   @leahsage=@currentyear-@leahwasbornin; 
   return @leahsage; 
}");

            Assert.AreEqual(expected, actual);
        }
Пример #22
0
        public void TestMapToStatement()
        {
            var expected = @"K:\Source\Antlr\AntlrTutorial\FSQL";
            var ctx      = FSQLEngine.Create().Debug(@"
{
   MAP Source TO ""K:\\Source\\Antlr\\AntlrTutorial\\FSQL"";
   MAP Bin To ""K:\\Source\\Antlr\\AntlrTutorial\\FSQL\\bin"" WITH FILTER ""*.dll"";
}");

            Assert.IsNotNull(ctx);
            Assert.AreEqual(2, ctx.Aliases.Count());
            var actual = ctx.GetAlias("Source");

            Assert.AreEqual(expected, actual.Location);
        }
Пример #23
0
        public void SetAndRetrieveVariableViaScript()
        {
            var expected = 42;
            var actual   = FSQLEngine.Create().Execute(@"
{
   @answer=41; 
   @answer=@answer+5;
   @answer=@answer-4; 
   @answer=@answer*2; 
   @answer=@answer/2; 
   return @answer; 
}");

            Assert.AreEqual(expected, actual);
        }
        public void TestFunctionsAsParameters()
        {
            var script = @"
{
    FUNC add(@left, @right) {
        @results = @left + @right;
        return @results;
    }

    return add(add(1,1), add(1,3));
}
";
            var actual = Convert.ToInt32(FSQLEngine.Create().Execute(script));

            Assert.AreEqual(6, actual);
            Console.WriteLine(actual);
        }
Пример #25
0
        public void TestWhileDoStatement()
        {
            var script   = @"
{
    @candy = -3;
    While (5 > @candy) {
        @candy = @candy + 1;
    } 

    return @candy;
}
    ";
            var expected = 5;
            var actual   = FSQLEngine.Create().Execute(script);

            Assert.AreEqual(expected, actual);
        }
Пример #26
0
        public void TestIfFalseWithoutElseStatement()
        {
            var script   = @"
{
    @candy = 45;
    if (false) {
        @candy = 80;
    } 

    return @candy;
}
    ";
            var expected = 45;
            var actual   = FSQLEngine.Create().Execute(script);

            Assert.AreEqual(expected, actual);
        }
        public void TestFunctionParameters()
        {
            var script = @"
{
    FUNC add(@left, @right) {
        @results = @left + @right;
        return @results;
    }

    return add(2, 4);
}
";
            var ctx    = FSQLEngine.Create().Debug(script);
            var actual = Convert.ToInt32(ctx.ReturnValue);

            Console.WriteLine(ctx.Dump(Priority.Verbose));
            Assert.AreEqual(6, actual);
        }
Пример #28
0
        public void TestWriteToFileAndDeleteFile()
        {
            var ctx = FSQLEngine.Create().Debug(@"
{
    TRACE ON;
    @testsPassed = 0;

    func Check(@cond) {
        if (@cond) { @testsPassed = @testsPassed + 1; } 
        return @testsPassed;
    }

    @f1 = "".\\Folder1"";
    @f2 = "".\\Folder2"";

    @fName = ""F1.Files.Txt"";

    @targetFile = @f2 + ""\\"" + @fName;
    
    //Create File
    MAP F1 TO @f1;
    @files = SELECT F1.* FROM F1 FORMAT AS JSON OUTPUT TO FILE @targetFile;
    
    //Delete file
    MAP F2 TO @f2;
    @results = DELETE FROM F2 WHERE F2.FileName == @fName;

    @testsPassed = Check(@results == 1);

    return @testsPassed;

}");

            Assert.IsNotNull(ctx);
            if (ctx.TracingEnabled)
            {
                TestCtx.WriteLine(ctx.Dump(Priority.Verbose).Replace("{", "{{").Replace("}", "}}"));
            }

            var results = Convert.ToInt32(ctx.ReturnValue);

            Assert.AreEqual(1, results);
            Console.WriteLine(results.ToString());
        }
Пример #29
0
        public void TestIfTrueStatement()
        {
            var script   = @"
{
    @candy = 45;
    if (true) {
        @candy = 80;
    } else {
        @candy = 60;
    }

    return @candy;
}
";
            var expected = 80;
            var actual   = FSQLEngine.Create().Execute(script);

            Assert.AreEqual(expected, actual);
        }
Пример #30
0
        public void SelectWithAlternateWildcardToCsv()
        {
            //var expected = @".";
            var ctx = FSQLEngine.Create().Debug(@"
{   
   MAP Bin To ""."" WITH FILTER ""FSQL*.*"";

   @Results = SELECT Bin.Size AS FileLength, NameOnly, Extension as Ext FROM Bin FORMAT AS CSV;
   return @results; // Notice case insensitivity...

}");

            Assert.IsNotNull(ctx);

            var results = ctx.ReturnValue as string;

            Assert.IsNotNull(results);

            Console.WriteLine(results);
        }