Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

127 rader
4.1 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. final String callCode = "print(x + 36)";
  43. final Call call = new Call(new Identifier("print"), new Addition(new Identifier("x"), new Int(36)));
  44. @Test
  45. public void testStatementCall() {
  46. Parser parser = new Parser(callCode);
  47. assertEquals(call, parser.statement());
  48. }
  49. @Test
  50. public void testAssignment() {
  51. Parser parser = new Parser(assignmentCode);
  52. assertEquals(assignment, parser.assignment());
  53. }
  54. @Test
  55. public void testConditional() {
  56. Parser parser = new Parser(conditionalCode);
  57. assertEquals(conditional, parser.conditional());
  58. }
  59. @Test
  60. public void testLoop() {
  61. Parser parser = new Parser(loopCode);
  62. assertEquals(loop, parser.loop());
  63. }
  64. @Test
  65. public void testCall() {
  66. Parser parser = new Parser(callCode);
  67. assertEquals(call, parser.call());
  68. }
  69. final String expressionCode = "a+b - (c - 56) + -47";
  70. 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));
  71. @Test
  72. public void testExpression() {
  73. Parser parser = new Parser(expressionCode);
  74. assertEquals(expression, parser.expression());
  75. }
  76. @Test
  77. public void testAtomExpression() {
  78. Parser parser = new Parser("(" + expressionCode + ")");
  79. assertEquals(expression, parser.atom());
  80. }
  81. @Test
  82. public void testAtomNumber() {
  83. Parser parser = new Parser("37658");
  84. assertEquals(new Int(37658), parser.atom());
  85. }
  86. @Test
  87. public void testAtomIdentifier() {
  88. Parser parser = new Parser("egjfd");
  89. assertEquals(new Identifier("egjfd"), parser.atom());
  90. }
  91. @Test
  92. public void testNumber() {
  93. Parser parser = new Parser("37658");
  94. assertEquals(new Int(37658), parser.integer());
  95. }
  96. @Test
  97. public void testIdentifier() {
  98. Parser parser = new Parser("egjfd");
  99. assertEquals(new Identifier("egjfd"), parser.identifier());
  100. }
  101. }