You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
3.7 KiB

  1. package parser;
  2. import static org.junit.Assert.assertEquals;
  3. import org.junit.Test;
  4. import expression.*;
  5. import parser.Parser.Operator;
  6. import program.*;
  7. import java.util.Optional;
  8. public class ParserTest {
  9. final String loopCode = "while (a) { r := r + b ; a := a - 1 }";
  10. final Loop loop = new Loop(new Identifier("a"), new Composition(new Assignment(new Identifier("r"), new Addition(new Identifier("r"), new Identifier("b"))), new Assignment(new Identifier("a"), new Subtraction(new Identifier("a"), new Int(1)))));
  11. final String assignmentCode = "a := 2";
  12. final Assignment assignment = new Assignment(new Identifier("a"), new Int(2));
  13. final String compositionCode = assignmentCode + " ; b := bar";
  14. final Composition composition = new Composition(assignment, new Assignment(new Identifier("b"), new Identifier("bar")));
  15. final String conditionalCode = "if (foo - bar) then { x := 5 } else { x := x }";
  16. final Conditional conditional = new Conditional(new Subtraction(new Identifier("foo"), new Identifier("bar")), new Assignment(new Identifier("x"), new Int(5)), new Assignment(new Identifier("x"), new Identifier("x")));
  17. final String programCode = compositionCode + " ; " + loopCode + " ; " + conditionalCode;
  18. final Program program = new Composition(new Composition(composition, loop), conditional);
  19. @Test
  20. public void testParse() {
  21. Parser parser = new Parser(programCode);
  22. assertEquals(program, parser.parse());
  23. }
  24. @Test
  25. public void testProgram() {
  26. Parser parser = new Parser(programCode);
  27. assertEquals(program, parser.program());
  28. }
  29. @Test
  30. public void testStatementAssignment() {
  31. Parser parser = new Parser(assignmentCode);
  32. assertEquals(assignment, parser.statement());
  33. }
  34. @Test
  35. public void testStatementConditional() {
  36. Parser parser = new Parser(conditionalCode);
  37. assertEquals(conditional, parser.statement());
  38. }
  39. @Test
  40. public void testStatementLoop() {
  41. Parser parser = new Parser(loopCode);
  42. assertEquals(loop, parser.statement());
  43. }
  44. @Test
  45. public void testAssignment() {
  46. Parser parser = new Parser(assignmentCode);
  47. assertEquals(assignment, parser.assignment());
  48. }
  49. @Test
  50. public void testConditional() {
  51. Parser parser = new Parser(conditionalCode);
  52. assertEquals(conditional, parser.conditional());
  53. }
  54. @Test
  55. public void testLoop() {
  56. Parser parser = new Parser(loopCode);
  57. assertEquals(loop, parser.loop());
  58. }
  59. final String expressionCode = "a+b - (c - 56) + -47";
  60. final Expression expression = new Addition(new Subtraction(new Addition(new Identifier("a"), new Identifier("b")), new Subtraction(new Identifier("c"), new Int(56))), new Int(-47));
  61. @Test
  62. public void testExpression() {
  63. Parser parser = new Parser(expressionCode);
  64. assertEquals(expression, parser.expression());
  65. }
  66. @Test
  67. public void testAtomExpression() {
  68. Parser parser = new Parser("(" + expressionCode + ")");
  69. assertEquals(expression, parser.atom());
  70. }
  71. @Test
  72. public void testAtomNumber() {
  73. Parser parser = new Parser("37658");
  74. assertEquals(new Int(37658), parser.atom());
  75. }
  76. @Test
  77. public void testAtomIdentifier() {
  78. Parser parser = new Parser("egjfd");
  79. assertEquals(new Identifier("egjfd"), parser.atom());
  80. }
  81. @Test
  82. public void testNumber() {
  83. Parser parser = new Parser("37658");
  84. assertEquals(new Int(37658), parser.integer());
  85. }
  86. @Test
  87. public void testIdentifier() {
  88. Parser parser = new Parser("egjfd");
  89. assertEquals(new Identifier("egjfd"), parser.identifier());
  90. }
  91. }