1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpackage libcore.java.lang;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.resource.Support_Resources;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpublic class OldRuntimeTest extends junit.framework.TestCase {
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Runtime r = Runtime.getRuntime();
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    InputStream is;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getRuntime() {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.Runtime java.lang.Runtime.getRuntime()
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(Runtime.getRuntime());
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_addShutdownHook() {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread thrException = new Thread () {
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Runtime.getRuntime().addShutdownHook(this);
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("IllegalStateException was not thrown.");
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch(IllegalStateException ise) {
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    //expected
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
51f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            }
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
53f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().addShutdownHook(thrException);
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Throwable t) {
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(t.getMessage());
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().addShutdownHook(thrException);
62f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            fail("IllegalArgumentException was not thrown.");
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IllegalArgumentException  iae) {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecurityManager sm = new SecurityManager() {
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkPermission(Permission perm) {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (perm.getName().equals("shutdownHooks")) {
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new SecurityException();
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // remove previously added hook so we're not depending on the priority
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // of the Exceptions to be thrown.
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Runtime.getRuntime().removeShutdownHook(thrException);
79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread.currentThread().sleep(1000);
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InterruptedException ie) {
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_availableProcessors() {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(Runtime.getRuntime().availableProcessors() > 0);
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
90f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_execLjava_lang_StringLjava_lang_StringArray() {
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String [] envp =  getEnv();
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(0, envp, null);
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(0, null, null);
96f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec((String)null, null);
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown.");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException ioe) {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecurityManager sm = new SecurityManager() {
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkPermission(Permission perm) {
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (perm.getName().equals("checkExec")) {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new SecurityException();
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkExec(String cmd) {
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new SecurityException();
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
118f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec("", envp);
121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            fail("IllegalArgumentException should be thrown.");
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IllegalArgumentException iae) {
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_execLjava_lang_StringArrayLjava_lang_StringArray() {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String [] envp =  getEnv();
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(4, envp, null);
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(4, null, null);
134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec((String[])null, null);
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown.");
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException ioe) {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{"ls", null}, null);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown.");
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException ioe) {
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecurityManager sm = new SecurityManager() {
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkPermission(Permission perm) {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (perm.getName().equals("checkExec")) {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new SecurityException();
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
160f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkExec(String cmd) {
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new SecurityException();
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
165f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{}, envp);
168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            fail("IndexOutOfBoundsException should be thrown.");
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IndexOutOfBoundsException ioob) {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{""}, envp);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException should be thrown.");
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) { /* expected */ }
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_execLjava_lang_StringLjava_lang_StringArrayLjava_io_File() {
182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String [] envp =  getEnv();
184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File workFolder = Support_Resources.createTempFolder();
186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(2, envp, workFolder);
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(2, null, null);
189f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec((String)null, null, workFolder);
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown.");
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException ioe) {
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecurityManager sm = new SecurityManager() {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkPermission(Permission perm) {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (perm.getName().equals("checkExec")) {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new SecurityException();
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkExec(String cmd) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new SecurityException();
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec("",  envp, workFolder);
214f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            fail("SecurityException should be thrown.");
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IllegalArgumentException iae) {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_execLjava_lang_StringArrayLjava_lang_StringArrayLjava_io_File() {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String [] envp =  getEnv();
224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File workFolder = Support_Resources.createTempFolder();
226f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(5, envp, workFolder);
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        checkExec(5, null, null);
229f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec((String[])null, null, workFolder);
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown.");
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException ioe) {
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
238f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{"ls", null}, null, workFolder);
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown.");
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException ioe) {
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
247f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SecurityManager sm = new SecurityManager() {
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkPermission(Permission perm) {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (perm.getName().equals("checkExec")) {
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new SecurityException();
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
255f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void checkExec(String cmd) {
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new SecurityException();
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{""}, envp, workFolder);
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException should be thrown.");
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
268f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    String [] getEnv() {
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object [] valueSet = System.getenv().values().toArray();
271f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        Object [] keySet = System.getenv().keySet().toArray();
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String [] envp = new String[valueSet.length];
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for(int i = 0; i < envp.length; i++) {
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            envp[i] = keySet[i] + "=" + valueSet[i];
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return envp;
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
278f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    void checkExec(int testCase, String [] envp, File file) {
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String dirName = "Test_Directory";
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String dirParentName = "Parent_Directory";
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File resources = Support_Resources.createTempFolder();
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String folder = resources.getAbsolutePath() + "/" + dirName;
284f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        String folderWithParent = resources.getAbsolutePath() + "/"  +
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                    dirParentName + "/" + dirName;
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String command = "mkdir " + folder;
287f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        String [] commandArguments = {"mkdir", folder};
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Process proc = null;
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            switch(testCase) {
291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                case 0:
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    proc = Runtime.getRuntime().exec(command, envp);
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    break;
294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                case 1:
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    proc = Runtime.getRuntime().exec(command);
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    break;
297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                case 2:
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    proc = Runtime.getRuntime().exec(command, envp, file);
299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    break;
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                case 3:
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    proc = Runtime.getRuntime().exec(commandArguments);
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    break;
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                case 4:
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    proc = Runtime.getRuntime().exec(commandArguments, envp);
305f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    break;
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                case 5:
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    proc = Runtime.getRuntime().exec(commandArguments, envp, file);
308f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    break;
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(proc);
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Thread.sleep(3000);
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch(InterruptedException ie) {
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("InterruptedException was thrown.");
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            File f = new File(folder);
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(f.exists());
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if(f.exists()) {
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                f.delete();
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IOException io) {
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_execLjava_lang_String() {
327f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        checkExec(1, null, null);
328f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec((String) null);
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException was not thrown.");
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec("");
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException was not thrown.");
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IllegalArgumentException iae) {
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
345f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_execLjava_lang_StringArray() {
349f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
350f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        checkExec(3, null, null);
351f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec((String[]) null);
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException was not thrown.");
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
360f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{"ls", null});
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException was not thrown.");
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
368f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
369f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{});
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IndexOutOfBoundsException iobe) {
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException was thrown.");
377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
378f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().exec(new String[]{""});
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException should be thrown.");
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
385f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    }
386f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_runFinalizersOnExit() {
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Runtime.getRuntime().runFinalizersOnExit(true);
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeShutdownHookLjava_lang_Thread() {
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread thr1 = new Thread () {
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Runtime.getRuntime().addShutdownHook(this);
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch(IllegalStateException ise) {
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("IllegalStateException shouldn't be thrown.");
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
399f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            }
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
401f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().addShutdownHook(thr1);
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().removeShutdownHook(thr1);
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Throwable t) {
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(t.getMessage());
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
408f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Thread thr2 = new Thread () {
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Runtime.getRuntime().removeShutdownHook(this);
413f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    fail("IllegalStateException wasn't thrown.");
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch(IllegalStateException ise) {
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    //expected
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            }
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().addShutdownHook(thr2);
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Throwable t) {
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(t.getMessage());
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread.currentThread().sleep(1000);
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InterruptedException ie) {
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
431f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_traceInstructions() {
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Runtime.getRuntime().traceInstructions(false);
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Runtime.getRuntime().traceInstructions(true);
435cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann        Runtime.getRuntime().traceInstructions(false);
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
437f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_traceMethodCalls() {
439cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann        try {
440cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            Runtime.getRuntime().traceMethodCalls(false);
441cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            Runtime.getRuntime().traceMethodCalls(true);
442cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            Runtime.getRuntime().traceMethodCalls(false);
443cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann        } catch (RuntimeException ex) {
444cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            // Slightly ugly: we default to the SD card, which may or may not
445cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            // be there. So we also accept the error case as a success, since
446cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            // it means we actually did enable tracing (or tried to).
447cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            if (!"file open failed".equals(ex.getMessage())) {
448cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann                throw ex;
449cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann            }
450cdd1dac0489aa82d07ad80415622b38732abce65Jorg Pleumann        }
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
452f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
454498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson    public void test_getLocalizedInputStream() throws Exception {
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String simpleString = "Heart \u2f3c";
456498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        byte[] expected = simpleString.getBytes("UTF-8");
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] returned = new byte[expected.length];
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
459498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        ByteArrayInputStream bais = new ByteArrayInputStream(
460498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson                simpleString.getBytes("UTF-8"));
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
462498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        InputStream lcIn =
463498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson                Runtime.getRuntime().getLocalizedInputStream(bais);
464498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        lcIn.read(returned);
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
466498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        assertTrue("wrong result for String: " + simpleString,
467498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson                Arrays.equals(expected, returned));
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
469f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
471498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson    public void test_getLocalizedOutputStream() throws IOException {
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String simpleString = "Heart \u2f3c";
473498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        byte[] expected = simpleString.getBytes("UTF-8");
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
475498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        ByteArrayOutputStream out = new ByteArrayOutputStream();
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
477498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        OutputStream lcOut =
478498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson                Runtime.getRuntime().getLocalizedOutputStream(out);
479498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        lcOut.write(simpleString.getBytes("UTF-8"));
480498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        lcOut.flush();
481498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        lcOut.close();
482f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
483498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        byte[] returned = out.toByteArray();
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
485498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson        assertTrue("wrong result for String: " + returned.toString() +
486498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson                " expected string: " + expected.toString(),
487498e6e60b7c9180b6d58818fe49fd72ad0209a65Jesse Wilson                Arrays.equals(expected, returned));
488f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    }
489f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
490f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_load() {
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().load("nonExistentLibrary");
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("UnsatisfiedLinkError was not thrown.");
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(UnsatisfiedLinkError ule) {
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
498f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().load(null);
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException was not thrown.");
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
506f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_loadLibrary() {
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().loadLibrary("nonExistentLibrary");
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("UnsatisfiedLinkError was not thrown.");
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(UnsatisfiedLinkError ule) {
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
514f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Runtime.getRuntime().loadLibrary(null);
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException was not thrown.");
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(NullPointerException npe) {
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
523