178 lines
4.9 KiB
Java
178 lines
4.9 KiB
Java
package ssw.mj.test;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
import ssw.mj.Errors.Message;
|
|
import ssw.mj.test.support.BaseCompilerTestCase;
|
|
|
|
import static ssw.mj.Errors.Message.*;
|
|
|
|
public class RecoverTest extends BaseCompilerTestCase {
|
|
@Test
|
|
public void wrongGlobalDecl() {
|
|
initCode("program Test" + LF + //
|
|
" 123;" + LF + //
|
|
"{ void main() { } }");
|
|
expectError(2, 3, DECLARATION_RECOVERY);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void wrongMethDecl1() {
|
|
initCode("program Test {" + LF + //
|
|
" void main() { }" + LF + //
|
|
" program wrong1() { " + LF + //
|
|
" if (1>2);" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
expectError(3, 3, METHOD_DECL_RECOVERY);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void wrongMethDecl2() {
|
|
initCode("program Test {" + LF + //
|
|
" program wrong1() { " + LF + //
|
|
" if (1>2);" + LF + //
|
|
" }" + LF + //
|
|
" void main() { }" + LF + //
|
|
" program wrong2() {" + LF + //
|
|
" if (1>2);" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
expectError(2, 3, METHOD_DECL_RECOVERY);
|
|
expectError(6, 3, METHOD_DECL_RECOVERY);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void wrongMethDecl3() {
|
|
initCode("program Test {" + LF + //
|
|
" program wrong1() { }" + LF + //
|
|
" void main() { }" + LF + //
|
|
" program wrong2() { }" + LF + //
|
|
"}");
|
|
expectError(2, 3, METHOD_DECL_RECOVERY);
|
|
expectError(4, 3, METHOD_DECL_RECOVERY);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void wrongStat() {
|
|
initCode("program Test {" + LF + //
|
|
" void main() { " + LF + //
|
|
" 123;" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
expectError(3, 5, STATEMENT_RECOVERY);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void multipleErrors() {
|
|
initCode("program Test " + LF + //
|
|
" int x" + LF + //
|
|
"{" + LF + //
|
|
" void main( {" + LF + //
|
|
" if (1 x 2);" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
expectError(3, 1, TOKEN_EXPECTED, ";");
|
|
expectError(4, 14, TOKEN_EXPECTED, ")");
|
|
expectError(5, 11, INVALID_REL_OP);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
// ---- multiple errors & recovery
|
|
@Test
|
|
public void noRecover1() {
|
|
initCode("program Test {" + LF + //
|
|
" void main this method will never recover");
|
|
|
|
expectError(2, 13, TOKEN_EXPECTED, "(");
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void noRecover2() {
|
|
initCode("program Test {" + LF + //
|
|
" void main() { " + LF + //
|
|
" if this method will never recover");
|
|
|
|
expectError(3, 8, TOKEN_EXPECTED, "(");
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void recoverDecl1() {
|
|
initCode("program Test" + LF + //
|
|
" int i1, if" + LF + //
|
|
" in i2;" + LF + //
|
|
" final int i3 = 0;" + LF + //
|
|
"{" + LF + //
|
|
" void main() { " + LF + //
|
|
" if (i1 < i3);" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
|
|
expectError(2, 11, TOKEN_EXPECTED, "identifier");
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void recoverDecl2() {
|
|
initCode("program Test" + LF + //
|
|
" int i1, if" + LF + //
|
|
" in i2;" + LF + //
|
|
" int i3;" + LF + //
|
|
"{" + LF + //
|
|
" void main() { " + LF + //
|
|
" if (i1 < i3);" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
|
|
expectError(2, 11, TOKEN_EXPECTED, "identifier");
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void recoverStat() {
|
|
initCode("program Test {" + LF + //
|
|
" void main() { " + LF + //
|
|
" 567 since distance stays too small no follow up errors here;" + LF + //
|
|
" if (1 < 2);" + LF + //
|
|
" if (1 x 2);" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
|
|
expectError(3, 5, STATEMENT_RECOVERY);
|
|
expectError(5, 11, INVALID_REL_OP);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void resetErrDist() {
|
|
initCode("program Test {" + LF + //
|
|
" void main() {" + LF + //
|
|
" if () if () if();" + LF + //
|
|
" }" + LF + //
|
|
"}");
|
|
expectError(3, 9, INVALID_FACTOR);
|
|
expectError(3, 15, INVALID_FACTOR);
|
|
expectError(3, 20, INVALID_FACTOR);
|
|
parseVerifyVisualize();
|
|
}
|
|
|
|
@Test
|
|
public void illegalMethodStart() {
|
|
initCode("program Test" + LF + // 1
|
|
"{" + LF + // 2
|
|
" void foo()" + LF + // 3
|
|
" void foo(char x) { }" + LF + // 4
|
|
" void main() { }" + LF + // 5
|
|
"}" + LF // 6
|
|
);
|
|
expectError(4, 3, Message.TOKEN_EXPECTED, "{");
|
|
parseVerifyVisualize();
|
|
}
|
|
}
|