18bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson/*
28bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  Licensed to the Apache Software Foundation (ASF) under one or more
38bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  contributor license agreements.  See the NOTICE file distributed with
48bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  this work for additional information regarding copyright ownership.
58bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  The ASF licenses this file to You under the Apache License, Version 2.0
68bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  (the "License"); you may not use this file except in compliance with
78bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  the License.  You may obtain a copy of the License at
88bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *
98bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *
118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  Unless required by applicable law or agreed to in writing, software
128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  distributed under the License is distributed on an "AS IS" BASIS,
138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  See the License for the specific language governing permissions and
158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  limitations under the License.
168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson */
178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpackage libcore.java.lang;
198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
200005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamathimport java.io.File;
218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.io.IOException;
220005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamathimport java.lang.reflect.Method;
238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.nio.channels.Channel;
248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.nio.channels.spi.SelectorProvider;
258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.Map;
268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.Properties;
278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.Vector;
288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpublic class OldSystemTest extends junit.framework.TestCase {
308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_arraycopyLjava_lang_ObjectILjava_lang_ObjectII() {
328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // Test for method void java.lang.System.arraycopy(java.lang.Object,
338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // int, java.lang.Object, int, int)
348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Integer a[] = new Integer[20];
358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Integer b[] = new Integer[20];
368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from non array object into Object array
398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(new Object(), 0, b, 0, 0);
408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ArrayStoreException is not thrown.");
418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ArrayStoreException  ase) {
428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from Object array into non array object
478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, 0, new Object(), 0, 0);
488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ArrayStoreException is not thrown.");
498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ArrayStoreException  ase) {
508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from primitive array into object array
558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(new char[] {'a'}, 0, new String[1], 0, 1);
568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ArrayStoreException is not thrown.");
578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ArrayStoreException  ase) {
588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from object array into primitive array
638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(new String[] {"a"}, 0, new char[1], 0, 1);
648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ArrayStoreException is not thrown.");
658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ArrayStoreException  ase) {
668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from primitive array into an array of another primitive type
718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(new char[] {'a'}, 0, new int[1], 0, 1);
728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ArrayStoreException is not thrown.");
738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ArrayStoreException  ase) {
748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from object array into an array of another Object type
798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(new Character[] {'a'}, 0, new Integer[1], 0, 1);
808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ArrayStoreException is not thrown.");
818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ArrayStoreException  ase) {
828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from null into an array of a primitive type
878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(null, 0, new int[1], 0, 1);
888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // copy from a primitive array into null
958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(new int[]{'1'}, 0, null, 0, 1);
968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, a.length + 1, b, 0, 1);
1038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, -1, b, 0, 1);
1108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, 0, b, -1, 1);
1178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, 0, b, 0, -1);
1248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, 11, b, 0, 10);
1318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, Integer.MAX_VALUE, b, 0, 10);
1388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, 0, b, Integer.MAX_VALUE, 10);
1458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.arraycopy(a, 0, b, 10, Integer.MAX_VALUE);
1528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IndexOutOfBoundsException is not thrown.");
1538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IndexOutOfBoundsException ioobe) {
1548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_currentTimeMillis() {
1598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // Test for method long java.lang.System.currentTimeMillis()
1608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            long firstRead = System.currentTimeMillis();
1628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            try {
1638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Thread.sleep(150);
1648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            } catch (InterruptedException e) {
1658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
1668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            long secondRead = System.currentTimeMillis();
1678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertTrue("Incorrect times returned: " + firstRead + ", "
1688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    + secondRead, firstRead < secondRead);
1698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch (Exception e) {
1708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Exception during test: " + e.toString());
1718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getProperties() {
1758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String [] props = {"java.vendor.url",
1768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "java.class.path", "user.home",
1778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "java.class.version", "os.version",
1788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "java.vendor", "user.dir",
1798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                /*"user.timezone",*/ "path.separator",
1808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "os.name", "os.arch",
1818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "line.separator", "file.separator",
1828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "user.name", "java.version", "java.home" };
1838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Properties p = System.getProperties();
1858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(p.size() > 0);
1868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // Ensure spec'ed properties are non-null. See System.getProperties()
1888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // spec.
1898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (String prop : props) {
1918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertNotNull("There is no property among returned properties: "
1928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    + prop, p.getProperty(prop));
1938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertNotNull("System property is null: " + prop,
1948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    System.getProperty(prop));
1958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getPropertyLjava_lang_String() {
1998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.getProperty(null);
2018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException should be thrown.");
2028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
2038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.getProperty("");
2088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalArgumentException should be thrown.");
2098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalArgumentException  iae) {
2108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getPropertyLjava_lang_StringLjava_lang_String() {
2158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.getProperty(null, "0.0");
2178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException should be thrown.");
2188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
2198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.getProperty("", "0");
2248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalArgumentException should be thrown.");
2258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalArgumentException  iae) {
2268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_inheritedChannel() throws IOException {
2318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Channel iChannel = System.inheritedChannel();
2328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("Incorrect value of channel", iChannel);
2338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        SelectorProvider sp = SelectorProvider.provider();
2348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Incorrect value of channel",
2358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                sp.inheritedChannel(), iChannel);
2368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_clearProperty() {
2398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        System.setProperty("test", "value");
2408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        System.clearProperty("test");
2418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("Property was not deleted.", System.getProperty("test"));
2428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.clearProperty(null);
2458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
2468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
2478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.clearProperty("");
2528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalArgumentException is not thrown.");
2538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalArgumentException iae) {
2548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_gc() {
2598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Runtime rt =  Runtime.getRuntime();
2608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Vector<StringBuffer> vec = new Vector<StringBuffer>();
2618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long beforeTest = rt.freeMemory();
2628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        while(rt.freeMemory() < beforeTest * 2/3) {
2638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson             vec.add(new StringBuffer(1000));
2648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
265f49f9d8762770b0c9e2493b4656c70ecb6803df4Mathieu Chartier        long beforeGC = rt.totalMemory() - rt.freeMemory();
266f49f9d8762770b0c9e2493b4656c70ecb6803df4Mathieu Chartier        vec = null;
2678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        System.gc();
268f49f9d8762770b0c9e2493b4656c70ecb6803df4Mathieu Chartier        System.runFinalization();
269f49f9d8762770b0c9e2493b4656c70ecb6803df4Mathieu Chartier        long afterGC = rt.totalMemory() - rt.freeMemory();
2708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue("memory was not released after calling System.gc()." +
2718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "before gc: " + beforeGC + "; after gc: " + afterGC,
272ea43704065f3472072355a2e199ef99ebaecd681Mathieu Chartier                beforeGC > afterGC);
2738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getenv() {
2768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // String[] props = { "PATH", "HOME", "USER"};
2778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // only PATH of these three exists on android
2788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String[] props = { "PATH" };
2798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Map<String,String> envMap = System.getenv();
2818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse("environment map is empty.", envMap.isEmpty());
2828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue("env map contains less than 3 keys.",
2838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                props.length < envMap.keySet().size());
2848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (String prop : props) {
2858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertNotNull("There is no property: " + prop,
2868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    envMap.get(prop));
2878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getenvLString() {
2918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNotNull("PATH environment variable is not found",
2928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  System.getenv("PATH"));
2938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("Doesn't return NULL for non existent property",
2958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  System.getenv("nonexistent.property"));
2968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.getenv(null);
2998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
3008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
3018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3050005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath    public void test_load() throws Exception {
3068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Runtime.getRuntime().load("nonExistentLibrary");
3088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("UnsatisfiedLinkError was not thrown.");
3090005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        } catch(UnsatisfiedLinkError expected) {
3108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.load("nonExistentLibrary");
3148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("UnsatisfiedLinkError was not thrown.");
3150005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        } catch(UnsatisfiedLinkError expected) {
3168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.load(null);
3208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException was not thrown.");
3210005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        } catch(NullPointerException expected) {
3228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3230005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath
3240005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        // Trivial positive test for System.load: Attempt to load a libc.so - it's guaranteed
3250005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        // to exist and is whitelisted for use from applications.
3260005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        final ClassLoader cl = getClass().getClassLoader();
3270005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        // ClassLoader.findLibrary has protected access, so it's guaranteed to exist.
3280005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        final Method m = ClassLoader.class.getDeclaredMethod("findLibrary", String.class);
3290005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        assertNotNull(m);
3300005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        String libPath = (String) m.invoke(cl, "c");
3310005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        assertNotNull(libPath);
3320005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        System.load(new File(libPath).getAbsolutePath());
3338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_loadLibrary() {
3368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.loadLibrary("nonExistentLibrary");
3388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("UnsatisfiedLinkError was not thrown.");
3398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(UnsatisfiedLinkError ule) {
3408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.loadLibrary(null);
3458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException was not thrown.");
3468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
3478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_mapLibraryName() {
3528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("libname.so", System.mapLibraryName("name"));
3538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.mapLibraryName(null);
3568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
3578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
3588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_nanoTime() {
3638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long sleepTime = 5000;
3648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long beginTime = System.nanoTime();
3658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Thread.sleep(sleepTime);
3678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(Exception e) {
3688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Unknown exception was thrown.");
3698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long endTime = System.nanoTime();
3718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue((endTime - beginTime) > sleepTime * 1000000);
3728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson}
374