Commit 35057175 authored by Fred Eisele's avatar Fred Eisele
Browse files

cleaned up testing, added antlr4 parser to test suite

parent b77c0dc9
Loading
Loading
Loading
Loading
+12 −0
Changes for src/main/java/catdata/aql/exp/AqlParserFactory.java: 12 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -25,4 +25,16 @@ public abstract class AqlParserFactory {
		}
	}

	public static IAqlParser getParser(final Mode mode) {
		if(mode == Mode.COMBINATOR) {
			return new CombinatorParser();
		}
		else if(mode == Mode.ANTLR4) {
			return new Antlr4Parser();
		}
		else {
			return new CombinatorParser();
		}
	}
	
}
+42 −28
Changes for src/test/java/catdata/aql/AqlExampleTest.java: 42 added lines, 28 removed lines.
Original line number Diff line number Diff line
package catdata.aql;

import catdata.ParseException;
import catdata.Program;
import catdata.aql.exp.AqlEnv;
import catdata.aql.exp.AqlMultiDriver;
@@ -12,29 +13,51 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.fail;

public class AqlExampleTest {

    @ParameterizedTest
    @MethodSource("loadExamples")
    public void testSourceText(String description, String src) {
        System.out.println("testing example: " + description);
        try {
            final Program<Exp<?>> prog = AqlParserFactory.getParser().parseProgram(src);
            final AqlMultiDriver driver = new AqlMultiDriver(prog, new String[1], null);
  public static Stream<Arguments> loadExamples(Language lang) {
    return Examples
            .getExamples(lang).stream()
            .map(example ->
                    new Arguments[]{
                            Arguments.of(
                                    example.getName(),
                                    example.getText(),
                                    AqlParserFactory.Mode.COMBINATOR,
                                    new String[1]),
                            Arguments.of(
                                    example.getName(),
                                    example.getText(),
                                    AqlParserFactory.Mode.ANTLR4,
                                    new String[1])})
            .flatMap(a -> Arrays.stream(a));
  }
  public void runSourceText(String description, String src, AqlParserFactory.Mode mode, String[] args)
          throws ParseException
  {
    System.out.println("testing example: " + description + " parser: " + mode + " args: " + Arrays.toString(args));

      final Program<Exp<?>> prog = AqlParserFactory.getParser(mode).parseProgram(src);
      final AqlMultiDriver driver = new AqlMultiDriver(prog, args, null);
      driver.start();
      final AqlEnv lastEnv = driver.env;
      if (lastEnv.exn != null) {
        throw lastEnv.exn;
      }
            final String msg = new StringBuilder()
                    .append("Test failed AS EXPECTED for test case '")
                    .append(description)
                    .append("' \n")
                    .toString();
    }

    @ParameterizedTest
    @MethodSource("loadEffectiveExamples")
    public void testSourceText(String description, String src, AqlParserFactory.Mode mode, String[] args) {
        System.out.println("testing example: " + description + " parser: " + mode + " args: " + Arrays.toString(args));
        try {
            runSourceText(description,src,mode,args);
        } catch (Exception e) {
            final String msg = new StringBuilder()
                    .append("Test failed for test case '")
@@ -48,26 +71,18 @@ public class AqlExampleTest {
        }
    }

    public static Stream<Arguments> loadExamples() {
        return Examples
                .getExamples(Language.AQL).stream()
                .map(example -> Arguments.of(example.getName(), example.getText()));
  public static Stream<Arguments> loadEffectiveExamples() {
    return loadExamples(Language.AQL);
  }

  @ParameterizedTest
  @MethodSource("loadDefectiveExamples")
    public void testDefectiveSourceText(String description, String src) {
  public void testDefectiveSourceText(String description, String src, AqlParserFactory.Mode mode, String[] args) {
      System.out.println("testing example: " + description);
      try {
            final Program<Exp<?>> prog = AqlParserFactory.getParser().parseProgram(src);
            final AqlMultiDriver driver = new AqlMultiDriver(prog, new String[1], null);
            driver.start();
            final AqlEnv lastEnv = driver.env;
            if (lastEnv.exn != null) {
                throw lastEnv.exn;
            }
        runSourceText(description,src,mode,args);
          final String msg = new StringBuilder()
                    .append("Test succeeded for test case '")
                  .append("Test succeeded when expected to fail for test case '")
                  .append(description)
                  .append("' \n")
                  .toString();
@@ -77,9 +92,8 @@ public class AqlExampleTest {
  }

  public static Stream<Arguments> loadDefectiveExamples() {
        return Examples
                .getExamples(Language.AQL_ALT).stream()
                .map(example -> Arguments.of(example.getName(), example.getText()));
    return loadExamples(Language.AQL_ALT);
  }


}