/////////////////////////////////////////////////////////////////////// // STANFORD LOGIC GROUP // // General Game Playing Project // // // // Sample Player Implementation // // // // (c) 2007. See LICENSE and CONTRIBUTORS. // /////////////////////////////////////////////////////////////////////// /** * */ package stanfordlogic.test.gdl; import java.io.ByteArrayInputStream; import stanfordlogic.gdl.GdlAtom; import stanfordlogic.gdl.GdlExpression; import stanfordlogic.gdl.GdlList; import stanfordlogic.gdl.GdlVariable; import stanfordlogic.gdl.Parser; import stanfordlogic.gdl.SymbolTable; import junit.framework.TestCase; /** Simple test cases for GDL parser. * */ public class ParserTest extends TestCase { Parser parser_; SymbolTable symbolTable_; @Override protected void setUp() throws Exception { parser_ = new Parser(); symbolTable_ = parser_.getSymbolTable(); } private GdlAtom atom(String name) { return new GdlAtom(symbolTable_, symbolTable_.get(name)); } private GdlVariable var(String name) { return GdlVariable.getGdlVariable(symbolTable_, symbolTable_.get(name)); } /* * Test method for 'camembert.gdl.Parser.parse(InputStream)' */ public void testParse() { String str = "(true (control xplayer)) (true (cell 2 2 b)) (role xplayer)" + "(<= (next (control ?x)) (control ?y) (distinct ?x ?y))"; ByteArrayInputStream in = new ByteArrayInputStream( str.getBytes() ); GdlList gdl = parser_.parse( in ); assertEquals(4, gdl.getSize()); for ( GdlExpression elem : gdl ) assertEquals(GdlList.class, elem.getClass()); GdlList elem1 = (GdlList) gdl.getElement(0); GdlList elem2 = (GdlList) gdl.getElement(1); GdlList elem3 = (GdlList) gdl.getElement(2); GdlList elem4 = (GdlList) gdl.getElement(3); assertEquals(2, elem1.getSize()); assertEquals(2, elem2.getSize()); assertEquals(2, elem3.getSize()); assertEquals(4, elem4.getSize()); GdlList l; assertEquals( atom( "true" ), elem1.getElement( 0 ) ); l = new GdlList( symbolTable_, new GdlExpression [] { atom( "control" ), atom( "xplayer" ) } ); assertEquals( l, elem1.getElement( 1 ) ); assertEquals( atom( "true" ), elem2.getElement( 0 ) ); l = new GdlList( symbolTable_, new GdlExpression [] { atom( "cell" ), atom( "2" ), atom( "2" ), atom( "b" ) } ); assertEquals( l, elem2.getElement( 1 ) ); assertEquals( atom( "role" ), elem3.getElement( 0 ) ); assertEquals( atom( "xplayer" ), elem3.getElement( 1 ) ); assertEquals( atom( "<=" ), elem4.getElement( 0 ) ); l = new GdlList( symbolTable_, new GdlExpression [] { atom( "next" ), new GdlList( symbolTable_, new GdlExpression [] { atom( "control" ), var( "x" ) } ) } ); assertEquals( l, elem4.getElement( 1 ) ); l = new GdlList( symbolTable_, new GdlExpression [] { atom( "control" ), var( "y" ) } ); assertEquals( l, elem4.getElement( 2 ) ); l = new GdlList( symbolTable_, new GdlExpression [] { atom( "distinct" ), var( "x" ), var( "y" ) } ); assertEquals( l, elem4.getElement( 3 ) ); } public void testParse2() { String str = "(true ((control xplayer)) (true (cell 2 2 b)) (role xplayer)" + "(<= (next (control ?x)) (control ?y) (distinct ?x ?y))"; ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes()); // this should not parse (one too many parens before control): try { parser_.parse(in); assertTrue(false); } catch (Exception e) { // ok, we got an exception } } }