コード例 #1
0
 private QuestionForm ParseQLFile(FileInfo qlFile)
 {
     try
     {
         var qlController = new QLController();
         return(qlController.ParseQLFile(qlFile));
     }
     catch (Exception ex)
     {
         throw new ApplicationException("An unexpected error occured during parsing of the QL file.", ex);
     }
 }
コード例 #2
0
        public void TestParseEmptyString()
        {
            // Arrange
            var    controller = new QLController();
            string ql         = String.Empty; // An empty string is also valid QL code.

            // Act
            var form = controller.ParseQLString(ql);

            // Assert
            Assert.IsNotNull(form, "Method ParseQLString should never return a null value.");
            Assert.AreEqual <int>(0, form.Statements.Count());
        }
コード例 #3
0
        public void TestParseEmptyString()
        {
            // Arrange
            var controller = new QLController();
            string ql = String.Empty; // An empty string is also valid QL code.

            // Act
            var form = controller.ParseQLString(ql);

            // Assert
            Assert.IsNotNull(form, "Method ParseQLString should never return a null value.");
            Assert.AreEqual<int>(0, form.Statements.Count());
        }
コード例 #4
0
        public void TestStringConcationation()
        {
            // Arrange
            var controller  = new QLController();
            var form        = controller.ParseQLString("name = \"What's your name?\" string = \"Piet\" + \"Jansen\"");
            var typeChecker = new TypeChecker();
            var report      = new ValidationReport();

            // Act
            typeChecker.Validate(form, report);

            // Assert
            Assert.AreEqual <int>(0, report.NrOfErrors);
        }
コード例 #5
0
        public void TestStringConcationation()
        {
            // Arrange
            var controller = new QLController();
            var form = controller.ParseQLString("name = \"What's your name?\" string = \"Piet\" + \"Jansen\"");
            var typeChecker = new TypeChecker();
            var report = new ValidationReport();

            // Act
            typeChecker.Validate(form, report);

            // Assert
            Assert.AreEqual<int>(0, report.NrOfErrors);
        }
コード例 #6
0
        public void TestParseQuestion()
        {
            // Arrange
            var controller = new QLController();
            string ql = "FavoriteColor \"What is your favorite color?\" string";

            // Act
            var form = controller.ParseQLString(ql);

            // Assert
            Assert.IsNotNull(form, "Method ParseQLString should never return a null value.");
            Assert.AreEqual<int>(1, form.Statements.Count());
            var question = form.Statements.First() as Question;
            Assert.AreEqual<string>("What is your favorite color?", question.Label);
            Assert.AreEqual<string>("FavoriteColor", question.Id.Name);
            Assert.AreEqual<DataType>(DataType.String, question.DataType);
        }
コード例 #7
0
        public void TestParseIfStatement()
        {
            // Arrange
            var controller = new QLController();
            string ql = "if(hasSoldHouse && boughtNew) { int sellingPrice = 0 }";

            // Act
            var form = controller.ParseQLString(ql);

            // Assert
            Assert.IsNotNull(form, "Method ParseQLString should never return a null value.");
            Assert.AreEqual<int>(1, form.Statements.Count());
            Assert.IsInstanceOfType(form.Statements.First(), typeof(IfStatement));
            var ifStatement = form.Statements.First() as IfStatement;
            Assert.AreEqual<int>(1, ifStatement.Then.Count());
            Assert.AreEqual<int>(0, ifStatement.Else.Count());
        }
コード例 #8
0
        public void TestParseIfElseStatement()
        {
            // Arrange
            var    controller = new QLController();
            string ql         = "if(hasSoldHouse && boughtNew) { int sellingPrice = 0 } else { int askingPrice = 0 }";

            // Act
            var form = controller.ParseQLString(ql);

            // Assert
            Assert.IsNotNull(form, "Method ParseQLString should never return a null value.");
            Assert.AreEqual <int>(1, form.Statements.Count());
            Assert.IsInstanceOfType(form.Statements.First(), typeof(IfStatement));
            var ifStatement = form.Statements.First() as IfStatement;

            Assert.AreEqual <int>(1, ifStatement.Then.Count());
            Assert.AreEqual <int>(1, ifStatement.Else.Count());
        }
コード例 #9
0
        public void TestParseQuestion()
        {
            // Arrange
            var    controller = new QLController();
            string ql         = "FavoriteColor \"What is your favorite color?\" string";

            // Act
            var form = controller.ParseQLString(ql);

            // Assert
            Assert.IsNotNull(form, "Method ParseQLString should never return a null value.");
            Assert.AreEqual <int>(1, form.Statements.Count());
            var question = form.Statements.First() as Question;

            Assert.AreEqual <string>("What is your favorite color?", question.Label);
            Assert.AreEqual <string>("FavoriteColor", question.Id.Name);
            Assert.AreEqual <DataType>(DataType.String, question.DataType);
        }
コード例 #10
0
        public void TestInvalidInteger()
        {
            // Arrange
            var ql = new StringBuilder();
            ql.AppendLine("int someInt = 8374398748349837489274"); // An integer value that well surpasses the 32-bit range.

            var controller = new QLController();
            var form = controller.ParseQLString(ql.ToString());

            var checker = new LiteralChecker();
            var report = new ValidationReport();

            // Act
            checker.Validate(form, report);

            // Assert
            Assert.AreEqual<int>(1, report.NrOfErrors);
        }
コード例 #11
0
        public void TestNegatedIfStatement()
        {
            // Arrange
            var ql = new StringBuilder();
            ql.AppendLine("isHappy \"Are you happy?\" bool");
            ql.AppendLine("if(!isHappy)");
            ql.AppendLine("{ }");

            var controller = new QLController();
            var form = controller.ParseQLString(ql.ToString());
            var typeChecker = new TypeChecker();
            var report = new ValidationReport();

            // Act
            typeChecker.Validate(form, report);

            // Assert
            Assert.AreEqual<int>(0, report.NrOfErrors);
        }
コード例 #12
0
        public void TestInvalidInteger()
        {
            // Arrange
            var ql = new StringBuilder();

            ql.AppendLine("int someInt = 8374398748349837489274"); // An integer value that well surpasses the 32-bit range.

            var controller = new QLController();
            var form       = controller.ParseQLString(ql.ToString());

            var checker = new LiteralChecker();
            var report  = new ValidationReport();

            // Act
            checker.Validate(form, report);

            // Assert
            Assert.AreEqual <int>(1, report.NrOfErrors);
        }
コード例 #13
0
        public void TestInvalidDates()
        {
            // Arrange
            var ql = new StringBuilder();
            ql.AppendLine("date someDateA = [1-31-2015]");
            ql.AppendLine("date someDateB = [30-02-2015]");

            var controller = new QLController();
            var form = controller.ParseQLString(ql.ToString());

            var checker = new LiteralChecker();
            var report = new ValidationReport();

            // Act
            checker.Validate(form, report);

            // Assert
            Assert.AreEqual<int>(2, report.NrOfErrors);
        }
コード例 #14
0
        public void TestNegatedIfStatement()
        {
            // Arrange
            var ql = new StringBuilder();

            ql.AppendLine("isHappy \"Are you happy?\" bool");
            ql.AppendLine("if(!isHappy)");
            ql.AppendLine("{ }");

            var controller  = new QLController();
            var form        = controller.ParseQLString(ql.ToString());
            var typeChecker = new TypeChecker();
            var report      = new ValidationReport();

            // Act
            typeChecker.Validate(form, report);

            // Assert
            Assert.AreEqual <int>(0, report.NrOfErrors);
        }
コード例 #15
0
        public void TestInvalidDates()
        {
            // Arrange
            var ql = new StringBuilder();

            ql.AppendLine("date someDateA = [1-31-2015]");
            ql.AppendLine("date someDateB = [30-02-2015]");

            var controller = new QLController();
            var form       = controller.ParseQLString(ql.ToString());

            var checker = new LiteralChecker();
            var report  = new ValidationReport();

            // Act
            checker.Validate(form, report);

            // Assert
            Assert.AreEqual <int>(2, report.NrOfErrors);
        }
コード例 #16
0
        public void TestValidDates()
        {
            // Arrange
            var ql = new StringBuilder();
            ql.AppendLine("date someDateA = [31-1-2015]");
            ql.AppendLine("date someDateB = [01-01-2015]");
            ql.AppendLine("date someDateC = [5-06-1920]");
            ql.AppendLine("date someDateD = [today]");
            ql.AppendLine("date someDateE = [yesterday]");
            ql.AppendLine("date someDateF = [tomorrow]");

            var controller = new QLController();
            var form = controller.ParseQLString(ql.ToString());

            var checker = new LiteralChecker();
            var report = new ValidationReport();

            // Act
            checker.Validate(form, report);

            // Assert
            Assert.AreEqual<int>(0, report.NrOfErrors + report.NrOfWarnings);
        }
コード例 #17
0
        public void TestValidDates()
        {
            // Arrange
            var ql = new StringBuilder();

            ql.AppendLine("date someDateA = [31-1-2015]");
            ql.AppendLine("date someDateB = [01-01-2015]");
            ql.AppendLine("date someDateC = [5-06-1920]");
            ql.AppendLine("date someDateD = [today]");
            ql.AppendLine("date someDateE = [yesterday]");
            ql.AppendLine("date someDateF = [tomorrow]");

            var controller = new QLController();
            var form       = controller.ParseQLString(ql.ToString());

            var checker = new LiteralChecker();
            var report  = new ValidationReport();

            // Act
            checker.Validate(form, report);

            // Assert
            Assert.AreEqual <int>(0, report.NrOfErrors + report.NrOfWarnings);
        }