package it.unimi.dsi.lang; import java.util.Set; import it.unimi.dsi.lang.ObjectParser; import junit.framework.TestCase; public class ObjectParserTest extends TestCase { public void testObject() throws Exception { assertEquals( Object.class, ObjectParser.fromSpec( "java.lang.Object" ).getClass() ); assertEquals( Object.class, ObjectParser.fromSpec( "java.lang.Object()" ).getClass() ); assertEquals( Object.class, ObjectParser.fromSpec( "Object", Object.class, new String[] { "java.lang" } ).getClass() ); assertEquals( Object.class, ObjectParser.fromSpec( "Object", Object.class, new String[] { "foo", "java.lang" } ).getClass() ); } public void testString() throws Exception { assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String(foo)" ) ); assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String(\"foo\")" ) ); assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String( foo)" ) ); assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String( \"foo\")" ) ); assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String( foo )" ) ); assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String( \"f\\oo\" )" ) ); assertEquals( "f\\oo", ObjectParser.fromSpec( "java.lang.String( f\\oo )" ) ); assertEquals( "foo", ObjectParser.fromSpec( "java.lang.String( \"foo\" )" ) ); assertEquals( "fo\"o", ObjectParser.fromSpec( "java.lang.String(\"fo\\\"o\")" ) ); boolean error = false; try { ObjectParser.fromSpec( "java.lang.String(\"fo\"o\")" ); } catch( IllegalArgumentException thisIsWhatWeWant ) { error = true; } assertTrue( error ); error = false; try { ObjectParser.fromSpec( "java.lang.String(fo" ); } catch( IllegalArgumentException thisIsWhatWeWant ) { error = true; } assertTrue( error ); error = false; try { ObjectParser.fromSpec( "java.lang.String()", Set.class ); } catch( ClassCastException thisIsWhatWeWant ) { error = true; } assertTrue( error ); assertEquals( "", ObjectParser.fromSpec( "java.lang.String()" ) ); assertEquals( "", ObjectParser.fromSpec( "java.lang.String" ) ); assertEquals( ")foo", ObjectParser.fromSpec( "java.lang.String()foo)" ) ); } public void testTwoStrings() throws Exception { final Object context = new Object(); assertEquals( new TwoStrings( "foo", "bar" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings(\"foo\", \"bar\")" )); assertEquals( new TwoStrings( "foo", "bar" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings(foo, bar)" )); assertEquals( new TwoStrings( "foo", "bar" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings( foo , bar )" )); assertEquals( new TwoStrings( "", "" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings(,)" )); assertEquals( new TwoStrings( "", "" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings( , )" )); assertEquals( new TwoStrings( "", "" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings( ,\"\" )" )); assertEquals( new TwoStrings( "foo", "foo" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings(foo)", Object.class, null, new String[] { "getInstance" } )); assertEquals( new TwoStrings( "3", "3" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings(foo,bar,boo)", Object.class, null, new String[] { "getInstance" } )); assertEquals( new TwoStrings( "foo", "3" ), ObjectParser.fromSpec( "it.unimi.dsi.lang.TwoStrings(foo,bar,boo)", Object.class )); assertEquals( new TwoStrings( context, "foo", "bar" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings(\"foo\", \"bar\")" )); assertEquals( new TwoStrings( context, "foo", "bar" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings(foo, bar)" )); assertEquals( new TwoStrings( context, "foo", "bar" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings( foo , bar )" )); assertEquals( new TwoStrings( context, "", "" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings(,)" )); assertEquals( new TwoStrings( context, "", "" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings( , )" )); assertEquals( new TwoStrings( context, "", "" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings( ,\"\" )" )); assertEquals( new TwoStrings( context, "foo", "foo" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings(foo)", Object.class, null, new String[] { "getInstance" } )); assertEquals( new TwoStrings( context, "3", "3" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings(foo,bar,boo)", Object.class, null, new String[] { "getInstance" } )); assertEquals( new TwoStrings( context, "foo", "3" ), ObjectParser.fromSpec( context, "it.unimi.dsi.lang.TwoStrings(foo,bar,boo)", Object.class )); } }