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.

112 line
3.6 KiB

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