Exemplo n.º 1
0
        public void ParseMultipleQuestionsWithASimpleAssignment_WillSucceed()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("questionWithSimpleAssignment.ql")));

            // Assert
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("sellingPrice", question.Label);
                Assert.AreEqual("What was the selling price?", question.Description);
                Assert.AreEqual(QLType.Decimal, question.Type);
            });
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("valueHouse", question.Label);
                Assert.AreEqual("Value house:", question.Description);
                Assert.AreEqual(QLType.Decimal, question.Type);
            });
            _assertVisitor.EnqueueVariableNodeCallback(variable =>
            {
                Assert.AreEqual("sellingPrice", variable.Label);
            });
            task.Ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 2
0
        public void ParseSimpleStylesheetWithTwoPagesAndSections_WillSucceed()
        {
            var  stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("emptyStylesheetWithTwoPagesAndSections.qls"), new SymbolTable());
            Node ast            = _parsingService.Process(stylesheetTask).Ast;

            _assertVisitor.EnqueueStylesheetNodeCallback(st =>
            {
                Assert.AreEqual("test", st.Label);
            });
            _assertVisitor.EnqueuePageNodeCallback(p =>
            {
                Assert.AreEqual("testPage", p.Label);
            });
            _assertVisitor.EnqueuePageNodeCallback(p =>
            {
                Assert.AreEqual("nextPage", p.Label);
            });
            _assertVisitor.EnqueueSectionNodeCallback(s =>
            {
                Assert.AreEqual("testSection", s.Label);
            });
            _assertVisitor.EnqueueSectionNodeCallback(s =>
            {
                Assert.AreEqual("nextSection", s.Label);
            });
            ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 3
0
        public void ParseQuestionWithSimpleExpression_WillSucceed()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("simpleExpression.ql")));

            // Assert
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("howTo", question.Label);
                Assert.AreEqual("Testtetstes?", question.Description);
                Assert.AreEqual(QLType.Integer, question.Type);
            });
            _assertVisitor.EnqueueExpressionNodeCallback(expression =>
            {
                Assert.IsInstanceOfType(expression.Operator, typeof(Substraction));
            });
            _assertVisitor.EnqueueExpressionNodeCallback(expression =>
            {
                Assert.IsInstanceOfType(expression.Operator, typeof(Addition));
            });
            _assertVisitor.EnqueueLiteralNodeCallback(literal =>
            {
                Assert.AreEqual("1", literal.Value);
            });
            _assertVisitor.EnqueueLiteralNodeCallback(literal =>
            {
                Assert.AreEqual("2", literal.Value);
            });
            _assertVisitor.EnqueueLiteralNodeCallback(literal =>
            {
                Assert.AreEqual("3", literal.Value);
            });
            task.Ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 4
0
        public void ParseMultipleQuestionsWithALabelNoConditional_WillSucceed()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("multipleQuestions.ql")));

            // Assert
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("whatIsMeaning", question.Label);
                Assert.AreEqual("What is the meaning of life?", question.Description);
                Assert.AreEqual(QLType.Decimal, question.Type);
            });
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("hasSoldHouse", question.Label);
                Assert.AreEqual("Did you sell a house in 2010?", question.Description);
                Assert.AreEqual(QLType.Boolean, question.Type);
            });
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("dayToday", question.Label);
                Assert.AreEqual("Which day is today?", question.Description);
                Assert.AreEqual(QLType.Date, question.Type);
            });
            task.Ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 5
0
        public void WrongTypeInAssignment_OneAssignmentErrorDetected()
        {
            var parsingTasks = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("boolAssignedToInt.ql")));

            Assert.AreEqual(1, parsingTasks.Errors.Count);
            Assert.AreEqual("Type error in line 2: The question is of type \'Integer\' "
                            + "but the assignment evaluates to a(n) Boolean", parsingTasks.Errors[0]);
        }
Exemplo n.º 6
0
        public void WrongTypesInBinaryOperator_OneBinaryOperatorTypeErrorDetected()
        {
            var parsingTasks = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("binaryExpressionWithWrongTypes.ql")));

            Assert.AreEqual(1, parsingTasks.Errors.Count);
            Assert.AreEqual("Type error in line 3: \'?\' cannot be applied to " +
                            "the combination of Decimal and Boolean", parsingTasks.Errors[0]);
        }
Exemplo n.º 7
0
        public void FormWithOneQuestion_OneSymbolDetectedCorrectly()
        {
            var parsingTask = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("singleQuestion.ql")));

            Assert.AreEqual(1, parsingTask.SymbolTable.Count);
            Assert.AreEqual("whatIsMeaning", parsingTask.SymbolTable[0].Name);
            Assert.AreEqual(QLType.Decimal, parsingTask.SymbolTable[0].Type);
        }
Exemplo n.º 8
0
        public void DecimalInConditional_OneConditionalErrorDetected()
        {
            var parsingTasks = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("decimalInCoditional.ql")));

            Assert.AreEqual(1, parsingTasks.Errors.Count);
            Assert.AreEqual("Type error in line 2: required type was boolean, but Decimal was given. " +
                            "The expression in a conditional statement should always evaluate to a boolean.", parsingTasks.Errors[0]);
        }
Exemplo n.º 9
0
        public void ParseQuestionWithIncorrectType_WillReportError()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("wrongType.ql")));

            // Assert
            Assert.AreEqual("Syntax error in line 3, character 10: mismatched input 'cadeautje' expecting {'boolean', 'integer', 'decimal', 'string', 'date'}.",
                            task.Errors[0]);
        }
Exemplo n.º 10
0
        public void ParseIfWithAnUnclosedBlock_WillReportError()
        {
            // Arrange & Act
            var parsedTask = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("unclosedBlock.ql")));

            // Assert
            Assert.AreEqual("Syntax error in line 8, character 0: extraneous input '<EOF>' expecting {'if', '}', STRING}.",
                            parsedTask.Errors[0]);
        }
Exemplo n.º 11
0
        public void ParseBinaryExpressionWithMissingOperand_WillReportError()
        {
            // Arrange & Act
            var parsedSymbols = Module.ParsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("binaryExpressionWithMissingOperand.ql")));

            // Assert
            Assert.AreEqual("Syntax error in line 9, character 0: extraneous input 'noItIsnt' expecting {'if', '}', STRING}.",
                            parsedSymbols.Errors[0]);
        }
Exemplo n.º 12
0
        public void forwardReferencing_ErrorDetectedCorrectly()
        {
            var parsingTask             = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("forwardReferencing.ql")));
            var ReferenceErrorExtractor = new ReferenceCheckingVisitor();

            parsingTask.Ast.Accept(ReferenceErrorExtractor);

            Assert.AreEqual(1, ReferenceErrorExtractor.ReferencingErrors.Count);
        }
Exemplo n.º 13
0
        public void ParseQuestionWithEmptyExpression_WillReportError()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("emptyExpression.ql")));

            // Assert
            Assert.AreEqual("Syntax error in line 4, character 0: mismatched input '}' expecting {'!', '+', '-', '(', BOOLEAN, INTEGER, DECIMAL, STRING, DATE, LABEL}.",
                            task.Errors[0]);
        }
Exemplo n.º 14
0
        public void ParseQuestionWithMissingText_WillReportError()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("missingQuestionText.ql")));

            // Assert
            Assert.AreEqual("Syntax error in line 2, character 0: mismatched input 'whatIsThis' expecting {'if', '}', STRING}.",
                            task.Errors[0]);
        }
Exemplo n.º 15
0
        public void ParseQuestionWithMissingLabel_WillReportError()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("missingLabel.ql")));

            // Assert
            Assert.AreEqual("Syntax error in line 3, character 0: missing LABEL at ':'.",
                            task.Errors[0]);
        }
Exemplo n.º 16
0
        public void ParseEmptyFormWithNoStatements_WillSucceed()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("emptyForm.ql")));

            // Assert
            _assertVisitor.EnqueueFormNodeCallback(formNode =>
            {
                Assert.AreEqual("empty", formNode.Label);
            });
            task.Ast.Accept(_assertVisitor);
        }
        public void StyleSheetWithDuplicateReference_OneErrorFound()
        {
            // Arrange
            var stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("onePageStylesheetDuplicateQuestion.qls"), new SymbolTable());

            // Act
            _parsingService.Process(stylesheetTask);

            // Assert
            Assert.AreEqual(1, stylesheetTask.Errors.Count);
            Assert.AreEqual("Reference error in line 5: \"questionOne\" was already defined.", stylesheetTask.Errors[0]);
        }
Exemplo n.º 18
0
        public void FormWithThreeQuestion_OneSymbolDetectedCorrectly()
        {
            var parsingTask = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("multipleQuestions.ql")));

            Assert.AreEqual(3, parsingTask.SymbolTable.Count);
            Assert.AreEqual("whatIsMeaning", parsingTask.SymbolTable[0].Name);
            Assert.AreEqual("hasSoldHouse", parsingTask.SymbolTable[1].Name);
            Assert.AreEqual("dayToday", parsingTask.SymbolTable[2].Name);
            Assert.AreEqual(QLType.Decimal, parsingTask.SymbolTable[0].Type);
            Assert.AreEqual(QLType.Boolean, parsingTask.SymbolTable[1].Type);
            Assert.AreEqual(QLType.Date, parsingTask.SymbolTable[2].Type);
        }
Exemplo n.º 19
0
        public void ParseSimpleStylesheetWithOnePageOneSectionOneQuestionAndWidget_WillSucceed()
        {
            var  stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("onePageStylesheetWithQuestionAndWidget.qls"), new SymbolTable());
            Node ast            = _parsingService.Process(stylesheetTask).Ast;

            _assertVisitor.EnqueueWidgetNodeCallback(w =>
            {
                Assert.AreEqual("Radio", w.Widget.ToString());
            });
            ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 20
0
        public void ParseIfConditionalOnly_WillSucceed()
        {
            var parsedTask = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("ifStatement.ql")));

            _assertVisitor.EnqueueConditionalNodeCallback(_ => { });
            _assertVisitor.EnqueueLiteralNodeCallback(literal =>
            {
                Assert.AreEqual("true", literal.Value);
            });

            parsedTask.Ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 21
0
        public void ParseSimpleStylesheetWithOnePage_WillSucceed()
        {
            Node ast = _parsingService.ParseQLSSheet(TestDataResolver.LoadTestFile("emptyStylesheetWithOnePage.qls"));

            _assertVisitor.EnqueueStylesheetNodeCallback(st =>
            {
                Assert.AreEqual("test", st.Label);
            });
            _assertVisitor.EnqueuePageNodeCallback(p =>
            {
                Assert.AreEqual("testPage", p.Label);
            });
            ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 22
0
        public void ParseOneQuestionWithALabelNoConditional_WillSucceed()
        {
            // Arrange & Act
            var task = _parsingPipeline.Process(new ParsingTask(TestDataResolver.LoadTestFile("singleQuestion.ql")));

            // Assert
            _assertVisitor.EnqueueQuestionNodeCallback(question =>
            {
                Assert.AreEqual("whatIsMeaning", question.Label);
                Assert.AreEqual("What is the meaning of life?", question.Description);
                Assert.AreEqual(QLType.Decimal, question.Type);
            });
            task.Ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 23
0
        public void RadioWidgetWithIntegerQuestion_OneTypeErrorFound()
        {
            // Arrange
            var QLquestions = new SymbolTable();

            QLquestions.Add(new Symbol("questionOne", QLType.Integer, null));
            var stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("onePageStylesheetWithQuestionAndWidget.qls"), QLquestions);

            // Act
            _parsingService.Process(stylesheetTask);

            // Assert
            Assert.AreEqual(1, stylesheetTask.Errors.Count);
            Assert.AreEqual("Type error in line 5: The type of \"questionOne\" (Integer) is not compatible with the type of the widget (Radio).", stylesheetTask.Errors[0]);
        }
Exemplo n.º 24
0
        public void StyleSheetWithMissingReference_OneErrorFound()
        {
            // Arrange
            var QLquestions = new SymbolTable();

            QLquestions.Add(new Symbol("a", QLType.Undefined, null));
            var stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("emptyStylesheetWithOnePage.qls"), QLquestions);

            // Act
            _parsingService.Process(stylesheetTask);

            // Assert
            Assert.AreEqual(1, stylesheetTask.Errors.Count);
            Assert.AreEqual("Reference error in line 0 of the QL file: No style was defined for \"a\" in QLS.", stylesheetTask.Errors[0]);
        }
Exemplo n.º 25
0
        public void OneLiteralBooleanEvaluation_WillEvaluateCorrectly()
        {
            // Arrange
            var         parsingTask = new ParsingTask(TestDataResolver.LoadTestFile("oneBooleanEvaluation.ql"));
            ParsingTask taskOutput  = _parsingPipeline.Process(parsingTask);
            var         newAst      = _interpreter.EvaluateAst(taskOutput.Ast, _memory, taskOutput.SymbolTable);

            _assertVisitor.EnqueueLiteralNodeCallback(ln =>
            {
                Assert.AreEqual(true, bool.Parse(ln.Value));
            });

            // Act
            newAst.Accept(_assertVisitor);

            // Verify
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 26
0
        public void OneConditionalAssignment_WillRemoveTheIfBlock()
        {
            // Arrange
            var         parsingTask = new ParsingTask(TestDataResolver.LoadTestFile("oneConditional.ql"));
            ParsingTask taskOutput  = _parsingPipeline.Process(parsingTask);
            var         newAst      = _interpreter.EvaluateAst(parsingTask.Ast, _memory, parsingTask.SymbolTable);

            _assertVisitor.EnqueueQuestionNodeCallback(q =>
            {
                Assert.AreEqual("elseQuestion", q.Description);
            });

            // Act
            newAst.Accept(_assertVisitor);

            // Verify
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 27
0
        public void ParseSimpleStylesheetWithOnePageOneSectionOneQuestion_WillSucceed()
        {
            var  stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("onePageStylesheetWithQuestion.qls"), new SymbolTable());
            Node ast            = _parsingService.Process(stylesheetTask).Ast;

            _assertVisitor.EnqueueStylesheetNodeCallback(st =>
            {
                Assert.AreEqual("test", st.Label);
            });
            _assertVisitor.EnqueuePageNodeCallback(p =>
            {
                Assert.AreEqual("testPage", p.Label);
            });
            _assertVisitor.EnqueueQuestionNodeCallback(q =>
            {
                Assert.AreEqual("questionOne", q.Label);
            });
            ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 28
0
        public void ParseOptionWidgetWithCustomText_WillSucceed()
        {
            var  stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("optionWidgetTest.qls"), new SymbolTable());
            Node ast            = _parsingService.Process(stylesheetTask).Ast;

            _assertVisitor.EnqueueWidgetNodeCallback(w =>
            {
                Assert.AreEqual("Radio", w.Widget.ToString());
            });
            _assertVisitor.EnqueueWidgetOptionNodeCallback(o =>
            {
                Assert.AreEqual("Good", o.Label);
            });
            _assertVisitor.EnqueueWidgetOptionNodeCallback(o =>
            {
                Assert.AreEqual("Evil", o.Label);
            });
            ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 29
0
        public void ParseStylesheetWithALocalStyleAndAllProperties_WillSucceed()
        {
            var  stylesheetTask = new StylesheetTask(TestDataResolver.LoadTestFile("stylesheetWithOneQuestionAndLocalStyle.qls"), new SymbolTable());
            Node ast            = _parsingService.Process(stylesheetTask).Ast;

            _assertVisitor.EnqueueQuestionNodeCallback(q =>
            {
                Assert.AreEqual("questionOne", q.Label);
            });
            _assertVisitor.EnqueuePropertyNodeCallback(p =>
            {
                Assert.AreEqual("width", p.Name);
                Assert.AreEqual("400", p.Value);
            });
            _assertVisitor.EnqueuePropertyNodeCallback(p =>
            {
                Assert.AreEqual("font", p.Name);
                Assert.AreEqual("Arial", p.Value);
            });
            _assertVisitor.EnqueuePropertyNodeCallback(p =>
            {
                Assert.AreEqual("fontsize", p.Name);
                Assert.AreEqual("14", p.Value);
            });
            _assertVisitor.EnqueuePropertyNodeCallback(p =>
            {
                Assert.AreEqual("color", p.Name);
                Assert.AreEqual("#999999", p.Value);
            });
            _assertVisitor.EnqueueWidgetNodeCallback(p =>
            {
                Assert.AreEqual("Spinbox", p.Widget.ToString());
            });
            ast.Accept(_assertVisitor);
            _assertVisitor.VerifyAll();
        }
Exemplo n.º 30
0
        public void TwoQuestionsOneReference_WillResolveTheReferenceAndCalculateCorrectValue()
        {
            // Arrange
            var         parsingTask = new ParsingTask(TestDataResolver.LoadTestFile("twoQuestionsOneReference.ql"));
            ParsingTask taskOutput  = _parsingPipeline.Process(parsingTask);

            _memory.AssignValue("whatIsMeaning", _valueFactory.CreateValue(42, QLType.Integer));
            var newAst = _interpreter.EvaluateAst(parsingTask.Ast, _memory, parsingTask.SymbolTable);

            _assertVisitor.EnqueueLiteralNodeCallback(lt =>
            {
                Assert.AreEqual(42, int.Parse(lt.Value));
            });
            _assertVisitor.EnqueueLiteralNodeCallback(lt =>
            {
                Assert.AreEqual(84, int.Parse(lt.Value));
            });

            // Act
            newAst.Accept(_assertVisitor);

            // Verify
            _assertVisitor.VerifyAll();
        }