Package org.epic.core.parser

Source Code of org.epic.core.parser.TestPerlMultiLexer

package org.epic.core.parser;

import java.io.*;
import java.net.URL;
import java.util.*;

import antlr.Token;
import antlr.TokenStreamException;

import org.eclipse.jface.text.Document;
import org.epic.perl.editor.test.BaseTestCase;

public class TestPerlMultiLexer extends BaseTestCase
{
    private Map tokenNames;
    private List tokenCounts = new ArrayList();
   
    public void testGlob() throws Exception
    {
        _testFile(
            "workspace/EPICTest/test_Glob.pl",
            new PrintWriter(new OutputStreamWriter(System.out), true));  
    }

    public void testHeredoc() throws Exception
    {
        _testFile(
            "workspace/EPICTest/test_Heredoc.pl",
            new PrintWriter(new OutputStreamWriter(System.out), true));  
    }
   
    /*public void testSelectedCase() throws Exception
    {
        _testFile(
            "workspace/EPICTest/format2.pl",
            new PrintWriter(new OutputStreamWriter(System.out), true));  
    }*/
   
    public void testAll() throws Exception
    {  
        if (!"true".equals(getProperty("TestPerlMultiLexer.enabled"))) return;

        BufferedReader r = null;
        PrintWriter w = null;
        String path = null;
       
        try
        {
            long t1 = System.currentTimeMillis();
            r = new BufferedReader(new FileReader("test.in/TestPerlMultiLexer-in.txt"));
            w = new PrintWriter(/*sw*/new OutputStreamWriter(System.out), true);
           
            int i = 0;
            tokenCounts = new ArrayList();
            while ((path = r.readLine()) != null)
            {
                _testFile(path, w);
                i++;
            }
            long t2 = System.currentTimeMillis();
            Collections.sort(tokenCounts);
           
            double msPerFile = (double)(t2-t1) / i;
            System.out.println((t2-t1) + " ... " + msPerFile);
            System.out.println("tokens per file: " + tokenCounts.get((int)(tokenCounts.size()*0.75)));
         
            /*assertEquals(
                readFile("test.in/TestPerlMultiLexer-expected.txt"),
                sw.toString());*/
        }
        catch (Exception e)
        {
            System.err.println("failed in file: " + path);
            throw e;
        }
        finally
        {
            if (r != null) try { r.close(); } catch (Exception e) { }
            if (w != null) try { w.close(); } catch (Exception e) { }
        }
    }

    private void _testFile(String path, PrintWriter w)
        throws IOException, TokenStreamException
    {
        String source = readFile(path);
        PerlMultiLexer selector =
            new PerlMultiLexer(new Document(source), null);

        int i = 0;
        Token t;
        while ((t = nextToken(selector, path)).getType() != Token.EOF_TYPE)
        {
            //System.err.println(path + ": " + i + ":" + token2String(t) + " " + t.getClass());
            i++;
        }
        tokenCounts.add(new Integer(i));
    }
   
    protected void setUp()
        throws Exception
    {
        super.setUp();       
        setUpTokenNames();
    }
   
    private void setUpTokenNames() throws IOException
    {
        tokenNames = new HashMap();
        URL tokensURL = PerlLexer.class.getResource("PerlTokenTypes.txt");
        assertNotNull(tokensURL);
        List lines = readLines(tokensURL.getPath());

        for (int i = 2; i < lines.size(); i++)
        {
            String line = (String) lines.get(i);
            StringTokenizer st = new StringTokenizer(line, "=");           
            String name = st.nextToken();
            Integer value = new Integer(st.nextToken());           
            tokenNames.put(value, name);
        }
    }
   
    private PerlToken nextToken(PerlMultiLexer lexer, String path) throws TokenStreamException
    {
        try
        {
            return (PerlToken) lexer.nextToken();
        }
        catch (TokenStreamException e)
        {
            lexer.recover();
            System.err.println(
                "WARNING: " + path + ": PerlMultiLexer recovery performed: " +
                e.getMessage()); // TODO log it when in development mode?
            return (PerlToken) lexer.nextToken();
        }
    }
   
    private String token2String(Token t)
    {
        StringBuffer buf = new StringBuffer();
        buf.append('<');
        buf.append(tokenNames.get(new Integer(t.getType())));
        buf.append(">,line=");
        buf.append(t.getLine());
        buf.append(",col=");
        buf.append(t.getColumn());
        buf.append(":\"");
        buf.append(t.getText());
        buf.append('\"');
        if (buf.length() > 200) { buf.setLength(200); buf.append("..."); }
        return buf.toString();
    }
}
TOP

Related Classes of org.epic.core.parser.TestPerlMultiLexer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.