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
2585be2d77fc1556b0623f9edf9e2df738871caf49fTobias Thierer    // Android-changed: test_gc() was deleted. PhantomReferenceTest provides basic
2595be2d77fc1556b0623f9edf9e2df738871caf49fTobias Thierer    // coverage for the fact that System.gc() executes a garbage collection if
2605be2d77fc1556b0623f9edf9e2df738871caf49fTobias Thierer    // followed by System.runFinalization().
2618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getenv() {
2638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // String[] props = { "PATH", "HOME", "USER"};
2648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // only PATH of these three exists on android
2658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String[] props = { "PATH" };
2668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Map<String,String> envMap = System.getenv();
2688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse("environment map is empty.", envMap.isEmpty());
2698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue("env map contains less than 3 keys.",
2708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                props.length < envMap.keySet().size());
2718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (String prop : props) {
2728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertNotNull("There is no property: " + prop,
2738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    envMap.get(prop));
2748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getenvLString() {
2788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNotNull("PATH environment variable is not found",
2798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  System.getenv("PATH"));
2808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("Doesn't return NULL for non existent property",
2828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  System.getenv("nonexistent.property"));
2838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.getenv(null);
2868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
2878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
2888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2920005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath    public void test_load() throws Exception {
2938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Runtime.getRuntime().load("nonExistentLibrary");
2958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("UnsatisfiedLinkError was not thrown.");
2960005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        } catch(UnsatisfiedLinkError expected) {
2978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.load("nonExistentLibrary");
3018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("UnsatisfiedLinkError was not thrown.");
3020005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        } catch(UnsatisfiedLinkError expected) {
3038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.load(null);
3078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException was not thrown.");
3080005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        } catch(NullPointerException expected) {
3098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3100005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath
31119b9ddd600d80e8a572b381374e981a679d6dd71Przemyslaw Szczepaniak        // Trivial positive test for System.load: Attempt to load a liblog.so - it's guaranteed
31219b9ddd600d80e8a572b381374e981a679d6dd71Przemyslaw Szczepaniak        // to exist and is whitelisted for use from applications. Also, it's in the library search
31319b9ddd600d80e8a572b381374e981a679d6dd71Przemyslaw Szczepaniak        // path for host builds.
3140005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        final ClassLoader cl = getClass().getClassLoader();
3150005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        // ClassLoader.findLibrary has protected access, so it's guaranteed to exist.
3160005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        final Method m = ClassLoader.class.getDeclaredMethod("findLibrary", String.class);
3170005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        assertNotNull(m);
31819b9ddd600d80e8a572b381374e981a679d6dd71Przemyslaw Szczepaniak        String libPath = (String) m.invoke(cl, "log");
3190005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        assertNotNull(libPath);
3200005cba335019e1dd4e820173f9cf95e2eb74251Narayan Kamath        System.load(new File(libPath).getAbsolutePath());
32169496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath
32269496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        // A negative test for a library that exists but isn't specified as an absolute path.
32369496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        // In other words, a name for which System.loadLibrary(libname) would suceed and
32469496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        // System.load(libname) would fail.
32569496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        String libName = new File(libPath).getName();
32669496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        try {
32769496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath            System.load(libName);
32869496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath            fail();
32969496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        } catch (UnsatisfiedLinkError expected) {
33069496f90f9caa4fb88ce6e7a1bf1b5cbf94421b2Narayan Kamath        }
3318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_loadLibrary() {
3348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.loadLibrary("nonExistentLibrary");
3368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("UnsatisfiedLinkError was not thrown.");
3378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(UnsatisfiedLinkError ule) {
3388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.loadLibrary(null);
3438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException was not thrown.");
3448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
3458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_mapLibraryName() {
3508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("libname.so", System.mapLibraryName("name"));
3518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            System.mapLibraryName(null);
3548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
3558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
3568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_nanoTime() {
3618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long sleepTime = 5000;
3628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long beginTime = System.nanoTime();
3638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Thread.sleep(sleepTime);
3658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(Exception e) {
3668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Unknown exception was thrown.");
3678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        long endTime = System.nanoTime();
3698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue((endTime - beginTime) > sleepTime * 1000000);
3708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson}
372