001    package serp.util;
002    
003    import junit.framework.*;
004    import junit.textui.*;
005    
006    /**
007     * Tests the {@link Strings} type.
008     *
009     * @author Abe White
010     */
011    public class TestStrings extends TestCase {
012        public TestStrings(String test) {
013            super(test);
014        }
015    
016        /**
017         * Test {@link Strings#split}.
018         */
019        public void testSplit() {
020            String str = "boo:and:foo";
021    
022            assertEquals(new String[] { "boo", "and:foo" },
023                Strings.split(str, ":", 2));
024            assertEquals(new String[] { "boo:and:foo" }, 
025                Strings.split(str, ":", 1));
026            assertEquals(new String[] { "boo", "and", "foo" },
027                Strings.split(str, ":", 0));
028            assertEquals(new String[] { "boo", "and", "foo" },
029                Strings.split(str, ":", -2));
030            assertEquals(new String[] { "b", "", ":and:f", "", "" },
031                Strings.split(str, "o", 5));
032            assertEquals(new String[] { "b", "", ":and:f", "o" },
033                Strings.split(str, "o", 4));
034            assertEquals(new String[] { "b", "", ":and:f", "", "" },
035                Strings.split(str, "o", -2));
036            assertEquals(new String[] { "b", "", ":and:f" },
037                Strings.split(str, "o", 0));
038            assertEquals(new String[] { "", "b", "", ":and:f" },
039                Strings.split("o" + str, "o", 0));
040        }
041    
042        /**
043         * Test {@link Strings#classForName}.
044         */
045        public void testClassForName() {
046            // test primitives
047            assertEquals(boolean.class, Strings.toClass("boolean", null));
048            assertEquals(byte.class, Strings.toClass("byte", null));
049            assertEquals(char.class, Strings.toClass("char", null));
050            assertEquals(double.class, Strings.toClass("double", null));
051            assertEquals(float.class, Strings.toClass("float", null));
052            assertEquals(int.class, Strings.toClass("int", null));
053            assertEquals(long.class, Strings.toClass("long", null));
054            assertEquals(short.class, Strings.toClass("short", null));
055            assertEquals(void.class, Strings.toClass("void", null));
056    
057            // test objects
058            assertEquals(String.class, Strings.toClass(String.class.getName(), 
059                null));
060    
061            // test arrays
062            assertEquals(boolean[].class, Strings.toClass("[Z", null));
063            assertEquals(byte[].class, Strings.toClass("[B", null));
064            assertEquals(char[].class, Strings.toClass("[C", null));
065            assertEquals(double[].class, Strings.toClass("[D", null));
066            assertEquals(float[].class, Strings.toClass("[F", null));
067            assertEquals(int[].class, Strings.toClass("[I", null));
068            assertEquals(long[].class, Strings.toClass("[J", null));
069            assertEquals(short[].class, Strings.toClass("[S", null));
070            assertEquals(String[].class,
071                Strings.toClass(String[].class.getName(), null));
072            assertEquals(boolean[][].class, Strings.toClass("[[Z", null));
073            assertEquals(String[][].class,
074                Strings.toClass(String[][].class.getName(), null));
075    
076            assertEquals(boolean[].class, Strings.toClass("boolean[]", null));
077            assertEquals(byte[].class, Strings.toClass("byte[]", null));
078            assertEquals(char[].class, Strings.toClass("char[]", null));
079            assertEquals(double[].class, Strings.toClass("double[]", null));
080            assertEquals(float[].class, Strings.toClass("float[]", null));
081            assertEquals(int[].class, Strings.toClass("int[]", null));
082            assertEquals(long[].class, Strings.toClass("long[]", null));
083            assertEquals(short[].class, Strings.toClass("short[]", null));
084            assertEquals(String[].class, Strings.toClass("java.lang.String[]", 
085                null));
086    
087            try {
088                Strings.toClass("[V", null);
089                fail("Allowed invalid class name");
090            } catch (RuntimeException re) {
091            }
092    
093            try {
094                Strings.toClass("java.lang.Foo", null);
095                fail("Allowed invalid class name");
096            } catch (RuntimeException re) {
097            }
098        }
099    
100        private void assertEquals(String[] arr1, String[] arr2) {
101            assertEquals(arr1.length, arr2.length);
102    
103            for (int i = 0; i < arr1.length; i++)
104                assertEquals(arr1[i], arr2[i]);
105        }
106    
107        public static Test suite() {
108            return new TestSuite(TestStrings.class);
109        }
110    
111        public static void main(String[] args) {
112            TestRunner.run(suite());
113        }
114    }