1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStream;
22f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fullerimport java.util.ArrayList;
23f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fullerimport java.util.List;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Vector;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class RuntimeTest extends junit.framework.TestCase {
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    Runtime r = Runtime.getRuntime();
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    InputStream is;
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    String s;
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static boolean flag = false;
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static boolean ranFinalize = false;
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    class HasFinalizer {
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String internalString;
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        HasFinalizer(String s) {
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            internalString = s;
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        @Override
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        protected void finalize() {
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            internalString = "hit";
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @Override
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void finalize() {
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        if (flag)
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ranFinalize = true;
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected RuntimeTest createInstance() {
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return new RuntimeTest("FT");
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Runtime#exit(int)
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_exitI() {
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.lang.Runtime.exit(int)
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Can't really test this", true);
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Runtime#exec(java.lang.String)
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_exec() {
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        boolean success = false;
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        /* successful exec's are tested by java.lang.Process */
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Runtime.getRuntime().exec("AnInexistentProgram");
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            success = true;
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                "failed to throw IOException when exec'ed inexistent program",
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                success);
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Runtime#getRuntime()
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getRuntime() {
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.lang.Runtime java.lang.Runtime.getRuntime()
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Used to test", true);
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Runtime#runFinalization()
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_runFinalization() {
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.lang.Runtime.runFinalization()
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        flag = true;
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        createInstance();
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int count = 10;
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // the gc below likely bogosifies the test, but will have to do for
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // the moment
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        while (!ranFinalize && count-- > 0) {
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            r.gc();
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            r.runFinalization();
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to run finalization", ranFinalize);
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
113f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller     * java.lang.Runtime#freeMemory() / java.lang.Runtime#totalMemory() /
114f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller     * java.lang.Runtime#maxMemory()
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
116f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller    public void test_memory() {
1174c8cbbd148b3478a597ac6bc95c17115fdd865a8Mathieu Chartier        assertTrue("freeMemory < 0", r.freeMemory() >= 0);
118f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller        assertTrue("totalMemory() < freeMemory()", r.totalMemory() >= r.freeMemory());
119f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller        assertTrue("maxMemory() < totalMemory()", r.maxMemory() >= r.totalMemory());
120f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller    }
121f54d81e0e2d97798b928ba32f5edab5519622f28Neil Fuller
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public RuntimeTest() {
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public RuntimeTest(String name) {
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super(name);
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
129