initial commit
This commit is contained in:
406
MicroJava Tests/tests/ssw/mj/test/ParserTest.java
Normal file
406
MicroJava Tests/tests/ssw/mj/test/ParserTest.java
Normal file
@@ -0,0 +1,406 @@
|
||||
package ssw.mj.test;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import ssw.mj.scanner.Token;
|
||||
import ssw.mj.test.support.BaseCompilerTestCase;
|
||||
|
||||
import static ssw.mj.Errors.Message.*;
|
||||
|
||||
public class ParserTest extends BaseCompilerTestCase {
|
||||
|
||||
@Test
|
||||
public void testWorkingFinalDecls() {
|
||||
initCode("program Test" + LF + // 1
|
||||
" final int i = 1;" + LF + // 2
|
||||
" final int j = 1;" + LF + // 3
|
||||
" final int k = 1;" + LF + // 4
|
||||
"{ void main() { } }"); // 5
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingDecls() {
|
||||
initCode("program Test" + LF + // 1
|
||||
" int i;" + LF + // 2
|
||||
" int j, k;" + LF + // 3
|
||||
"{ void main() { } }"); // 4
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethods() {
|
||||
initCode("program Test" + LF + // 1
|
||||
" int i;" + LF + // 2
|
||||
" int j, k;" + LF + // 3
|
||||
"{" + LF + // 4
|
||||
" void foo() { }" + LF + // 5
|
||||
" void bar() { }" + LF + // 6
|
||||
" void main() { }" + LF + // 7
|
||||
" }" + LF // 8
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethodsWithParameters() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void foo(int i) { }" + LF + // 3
|
||||
" void bar(int i, char c) { }" + LF + // 4
|
||||
" void main() { }" + LF + // 5
|
||||
" }" + LF // 6
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethodsWithLocals() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void foo() int i; { }" + LF + // 3
|
||||
" void bar() int i; char c; { }" + LF + // 4
|
||||
" void main() { }" + LF + // 5
|
||||
" }" + LF // 6
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethodsWithParametersAndLocals() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void foo(char ch) int i; { }" + LF + // 3
|
||||
" void bar(int x, int y) int i; char c; { }" + LF + // 4
|
||||
" void main() { }" + LF + // 5
|
||||
" }" + LF // 6
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethodCall() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void foo(char ch) int i; { }" + LF + // 3
|
||||
" void main() { foo('a'); }" + LF + // 4
|
||||
" }" + LF // 5
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethodCallTwoParams() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void foo(char ch, int x) int i; { }" + LF + // 3
|
||||
" void main() { foo('a', 1); }" + LF + // 4
|
||||
" }" + LF // 5
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingMethodCallThreeParams() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void foo(char ch, int x, char ch2) int i; { }" + LF + // 3
|
||||
" void main() { foo('a', 1, 'b'); }" + LF + // 4
|
||||
" }" + LF // 5
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingClass() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"class X { int i; int j; }" + LF + // 2
|
||||
"{" + LF + // 3
|
||||
" void main() X x; { x = new X; }" + LF + // 4
|
||||
"}" + LF // 5
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingArray() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void main() int[] x; { x = new int[10]; }" + LF + // 3
|
||||
"}" + LF // 4
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingIncDec() {
|
||||
initCode("program Test" + LF + // 1
|
||||
"{" + LF + // 2
|
||||
" void main() int i; { i--; i++; }" + LF + // 3
|
||||
" }" + LF // 4
|
||||
);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingElseIf() {
|
||||
initCode("program Test {" + LF + // 1
|
||||
" void main() int i; {" + LF + // 2
|
||||
" if (i > 10) i++;" + LF + // 3
|
||||
" else if (i < 5) i--;" + LF + // 4
|
||||
" else i += 8;" + LF + // 5
|
||||
" }" + LF + // 6
|
||||
"}");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingLoop() {
|
||||
initCode("program Test {" + LF + // 1
|
||||
" void main () int i; {" + LF + // 2
|
||||
" i = 0;" + LF + // 3
|
||||
" while (i < 42) {" + LF + // 4
|
||||
" i++;" + LF + // 5
|
||||
" }" + LF + // 6
|
||||
" }" + LF + // 7
|
||||
"}");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mulAssign() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() int i; {" + LF + //
|
||||
" i = 2;" + LF + //
|
||||
" i *= 2;" + LF + //
|
||||
" }" + LF + //
|
||||
"}");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void returnExpr() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() { }" + LF + //
|
||||
" int wrong1() { " + LF + //
|
||||
" return 2 + 3;" + LF + //
|
||||
" }" + LF + //
|
||||
"}");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongConstDecl() {
|
||||
initCode("program Test" + LF + //
|
||||
" final int i = a;" + LF + //
|
||||
"{ void main() { } }");
|
||||
expectError(2, 17, INVALID_CONST_TYPE);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongDesignFollow() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() int i; {" + LF + //
|
||||
" i**;" + LF + //
|
||||
" }" + LF + //
|
||||
"}");
|
||||
expectError(3, 6, INVALID_DESIGNATOR_STATEMENT);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongFactor() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main () int i; { " + LF + //
|
||||
" i = i + if;" + LF + //
|
||||
" }" + LF + //
|
||||
"}");
|
||||
expectError(3, 13, INVALID_FACTOR);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongRelOp() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() int i; {" + LF + //
|
||||
" if (i x 5);" + LF + //
|
||||
" }" + LF + //
|
||||
"}");
|
||||
expectError(3, 11, INVALID_REL_OP);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongStart() {
|
||||
initCode("noprogram Test { }");
|
||||
expectError(1, 1, TOKEN_EXPECTED, "program");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noProgName() {
|
||||
initCode("program { }");
|
||||
expectError(1, 9, TOKEN_EXPECTED, "identifier");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongVarDecl() {
|
||||
initCode("program Test " + LF + //
|
||||
"int var1,,,,var2;" + LF + //
|
||||
"{ void main() { } }");
|
||||
expectError(2, 10, TOKEN_EXPECTED, Token.Kind.ident.label());
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void eofExpected() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() {}" + LF + //
|
||||
"}moretext");
|
||||
expectError(3, 2, TOKEN_EXPECTED, "end of file");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invalidEOF1() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() {");
|
||||
expectError(2, 16, TOKEN_EXPECTED, "}");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invalidEOF2() {
|
||||
initCode("program Test {" + LF + //
|
||||
" void main() {" + LF + //
|
||||
" if ()");
|
||||
expectError(3, 9, INVALID_FACTOR);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invalidEOF3() {
|
||||
initCode("program Test" + LF + //
|
||||
" class C {" + LF + //
|
||||
" int i");
|
||||
expectError(3, 10, TOKEN_EXPECTED, ";");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWorkingReadAndPrint() {
|
||||
initCode("program Test {" + LF + // 1
|
||||
" void main() int i; {" + LF + // 2
|
||||
" read(i);" + LF +
|
||||
" print(i);" + LF +
|
||||
" }" + LF + //3
|
||||
"}");//4
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
// index from end tests
|
||||
@Test
|
||||
public void wrongTildeInExpr() {
|
||||
initCode("""
|
||||
program Test {
|
||||
void main() int i; {
|
||||
i = ~1;
|
||||
}
|
||||
}""");
|
||||
expectError(3, 9, INVALID_FACTOR);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongTildeCompoundAssign() {
|
||||
initCode("""
|
||||
program Test {
|
||||
void main() int i; {
|
||||
i ~= 2;
|
||||
}
|
||||
}""");
|
||||
expectError(3, 7, INVALID_DESIGNATOR_STATEMENT);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrongDoubleTilde() {
|
||||
initCode("""
|
||||
program Test {
|
||||
void main() int[] a; int i; {
|
||||
i = a[~~1];
|
||||
}
|
||||
}
|
||||
""");
|
||||
expectError(3, 12, INVALID_FACTOR);
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void constantArrayAccessFromEnd() {
|
||||
initCode("""
|
||||
program Test {
|
||||
void main() int[] a; int i; {
|
||||
a = new int[3];
|
||||
a[~1] = 3;
|
||||
a[~2] = 2;
|
||||
a[~3] = 1;
|
||||
i = a[~1];
|
||||
print(i);
|
||||
}
|
||||
}""");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void computedArrayAccessFromEnd() {
|
||||
initCode("""
|
||||
program Test {
|
||||
void main() int[] a; int i; {
|
||||
a = new int[3];
|
||||
a[~(2 * 6 - 11)] = 3;
|
||||
a[~(9 - 11 + 4)] = 2;
|
||||
a[~(-(-3))] = 1;
|
||||
i = a[~(a[0] + 2 * 6 - 11)];
|
||||
print(i);
|
||||
}
|
||||
}""");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dynamicArrayAccessFromEnd() {
|
||||
initCode("""
|
||||
program Test {
|
||||
void main() int[] a; int i; {
|
||||
read(i);
|
||||
a = new int[i];
|
||||
a[~i] = 1;
|
||||
a[~(i - 1)] = 2;
|
||||
a[~(i - 2)] = 3;
|
||||
i = a[~i];
|
||||
print(i);
|
||||
}
|
||||
}""");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void globalArrayAccessFromEnd() {
|
||||
initCode("""
|
||||
program Test
|
||||
final int len = 3;
|
||||
{
|
||||
void main() int[] a; int i; {
|
||||
a = new int[len];
|
||||
a[~len] = 1;
|
||||
a[~(len - 1)] = 2;
|
||||
a[~(len - 2)] = 3;
|
||||
i = a[~len];
|
||||
print(i);
|
||||
}
|
||||
}""");
|
||||
parseVerifyVisualize();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user