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(); }
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(); }
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(); }
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(); }
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]); }
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]); }
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); }
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]); }
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]); }
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]); }
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]); }
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); }
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]); }
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]); }
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]); }
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]); }
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); }
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(); }
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(); }
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(); }
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(); }
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]); }
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]); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }