package com.nominanuda.dataobject.schema; import static org.junit.Assert.*; import java.io.StringReader; import org.antlr.runtime.ANTLRReaderStream; import org.antlr.runtime.CharStream; import org.antlr.runtime.CommonTokenStream; import org.junit.Test; import com.nominanuda.dataobject.WrappingRecognitionException; public class JclParseTest { private String[] validExprs = new String[] { "(n|b)","[n]","n","{}","[]","{a:n,a:s,z:b}","{at:n,a:s,z}","{a,a,z}","{a,a,z : [({}|n|[])]}" }; private String[] invalidExprs = new String[] { "a,b ", " ", "", "{[]} ", ":", "{a b}", "{} {}" }; @Test public void testValid() throws Exception { for(String expr : validExprs) { parse(expr); } } @Test public void testInvalid() throws Exception { for(String expr : invalidExprs) { try { parse(expr); fail(expr + " -- should not be valid"); } catch(Exception e) { assertTrue(e.getClass().getName().startsWith("org.antlr") || e instanceof IllegalArgumentException); } } } private void parse(String expr) throws Exception { try { CharStream cs = new ANTLRReaderStream(new StringReader(expr)); JclLexer lexer = new JclLexer(cs); CommonTokenStream tokens = new CommonTokenStream(lexer); JclParser parser = new JclParser(tokens); parser.program(); } catch(WrappingRecognitionException e) { throw e.getWrappedException(); } } }