TestFiles.java 文件源码

java
阅读 27 收藏 0 点赞 0 评论 0

项目:rpgleparser 作者:
@Test
public void test() throws IOException, URISyntaxException{
    final String inputString = TestUtils.loadFile(sourceFile);
    final File expectedFile = new File(sourceFile.getPath().replaceAll("\\.rpgle", ".expected.txt"));
    final String expectedFileText = expectedFile.exists()?TestUtils.loadFile(expectedFile):null;
    final String expectedTokens = getTokens(expectedFileText);
    String expectedTree = getTree(expectedFileText);
    final List<String> errors = new ArrayList<String>();
       final ANTLRInputStream input = new ANTLRInputStream(new FixedWidthBufferedReader(inputString));
    final RpgLexer rpglexer = new RpgLexer(input);
       final TokenSource lexer = new PreprocessTokenSource(rpglexer);
       final CommonTokenStream tokens = new CommonTokenStream(lexer);

       final RpgParser parser = new RpgParser(tokens);

       final ErrorListener errorListener = new ErrorListener(errors, rpglexer, parser);
       rpglexer.addErrorListener(errorListener);
       parser.addErrorListener(errorListener);

    final String actualTokens = TestUtils.printTokens(lexer,rpglexer.getVocabulary());
       boolean rewriteExpectFile=false;
    if(expectedTokens != null && expectedTokens.trim().length()>0 ){
        if(autoReplaceFailed && !expectedTokens.equals(actualTokens)){
            rewriteExpectFile=true;
        }else{
            assertEquals("Token lists do not match",expectedTokens,actualTokens);
        }
    }
    rpglexer.reset();

    parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
    parser.reset();
    final ParseTree parseTree = parser.r();

    final String actualTree = TreeUtils.printTree(parseTree, parser);
    if(!errors.isEmpty()){
        System.out.println("/*===TOKENS===*/\r\n" + actualTokens + "\r\n");
        System.out.println("/*===TREE===*/\r\n" + actualTree + "\r\n/*======*/");
    }
    assertThat(errors, is(empty()));

    if(expectedTree==null || expectedTree.trim().length() == 0||rewriteExpectFile){
        writeExpectFile(expectedFile,actualTokens,actualTree);
        System.out.println("Tree written to " + expectedFile);
    }else{
        if(autoReplaceFailed && !actualTree.equals(expectedTree)){
            System.out.println("Replaced content of " + expectedFile);
            expectedTree = actualTree;
            writeExpectFile(expectedFile,actualTokens,actualTree);
        }
        assertEquals("Parse trees do not match",expectedTree,actualTree);
       }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号