StackTraceElementTest.java revision 89c1feb0a69a7707b271086e749975b3f7acacf7
1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.apache.harmony.luni.tests.java.lang;
18
19import dalvik.annotation.TestInfo;
20import dalvik.annotation.TestLevel;
21import dalvik.annotation.TestTarget;
22import dalvik.annotation.TestTargetClass;
23
24import junit.framework.TestCase;
25
26@TestTargetClass(StackTraceElement.class)
27public class StackTraceElementTest extends TestCase {
28    private StackTraceElementOriginal original;
29
30    @Override
31    protected void setUp() throws Exception {
32        original = new StackTraceElementOriginal();
33        super.setUp();
34    }
35
36    @Override
37    protected void tearDown() throws Exception {
38        super.tearDown();
39    }
40
41    /**
42     * @tests java.lang.StackTraceElement#StackTraceElement(java.lang.String,
43     *     java.lang.String, java.lang.String, int)
44     */
45    @TestInfo(
46      level = TestLevel.COMPLETE,
47      purpose = "",
48      targets = {
49        @TestTarget(
50          methodName = "StackTraceElement",
51          methodArgs = {java.lang.String.class, java.lang.String.class, java.lang.String.class, int.class}
52        )
53    })
54    public void
55    test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_StringI() {
56        StackTraceElement ste2 = null;
57        try {
58            original.pureJavaMethod(new Object());
59        } catch (Exception e) {
60            StackTraceElement ste1 = e.getStackTrace()[0];
61            ste2 = new StackTraceElement(ste1.getClassName(),
62                    ste1.getMethodName(),
63                    ste1.getFileName(),
64                    ste1.getLineNumber());
65            assertEquals("Incorrect value of class name",
66                    ste1.getClassName(), ste2.getClassName());
67            assertEquals("Incorrect value of method name",
68                    ste1.getMethodName(), ste2.getMethodName());
69            assertEquals("Incorrect value of file name",
70                    ste1.getFileName(), ste2.getFileName());
71            assertEquals("Incorrect value of line number",
72                    ste1.getLineNumber(), ste2.getLineNumber());
73        }
74        assertNotNull("Incorrect stack trace object", ste2);
75        try {
76            new StackTraceElement(null,
77                    ste2.getMethodName(),
78                    ste2.getFileName(),
79                    ste2.getLineNumber());
80            fail("Expected NullPointerException was not thrown");
81        } catch (NullPointerException e) {
82            // expected
83        }
84        try {
85            new StackTraceElement(ste2.getClassName(),
86                    null,
87                    ste2.getFileName(),
88                    ste2.getLineNumber());
89            fail("Expected NullPointerException was not thrown");
90        } catch (NullPointerException e) {
91            // expected
92        }
93        try {
94            new StackTraceElement(ste2.getClassName(),
95                    ste2.getMethodName(),
96                    null,
97                    ste2.getLineNumber());
98        } catch (NullPointerException e) {
99            fail("Unexpected exception " + e.toString());
100        }
101    }
102
103    /**
104     * @tests java.lang.StackTraceElement#equals(java.lang.Object)
105     */
106    @TestInfo(
107      level = TestLevel.COMPLETE,
108      purpose = "",
109      targets = {
110        @TestTarget(
111          methodName = "equals",
112          methodArgs = {java.lang.Object.class}
113        )
114    })
115    public void test_equalsLjava_lang_Object() {
116        try {
117            original.pureJavaMethod(new Object());
118        } catch (Exception e) {
119            StackTraceElement ste1 = e.getStackTrace()[0];
120            StackTraceElement ste2 =
121                new StackTraceElement(ste1.getClassName(),
122                        ste1.getMethodName(),
123                        ste1.getFileName(),
124                        ste1.getLineNumber());
125            assertEquals("Objects are equaled", ste1, ste2);
126        }
127    }
128
129    /**
130     * @tests java.lang.StackTraceElement#getClassName()
131     */
132    @TestInfo(
133      level = TestLevel.COMPLETE,
134      purpose = "",
135      targets = {
136        @TestTarget(
137          methodName = "getClassName",
138          methodArgs = {}
139        )
140    })
141    public void test_getClassName() {
142        try {
143            original.pureJavaMethod(new Object());
144        } catch (Exception e) {
145            assertEquals("Incorrect class name",
146                    getClass().getPackage().getName() +
147                    ".StackTraceElementOriginal",
148                    e.getStackTrace()[0].getClassName());
149            assertEquals("Incorrect class name",
150                    getClass().getPackage().getName() +
151                    ".StackTraceElementTest",
152                    e.getStackTrace()[1].getClassName());
153        }
154    }
155
156    /**
157     * @tests java.lang.StackTraceElement#getFileName()
158     */
159    @TestInfo(
160      level = TestLevel.COMPLETE,
161      purpose = "",
162      targets = {
163        @TestTarget(
164          methodName = "getFileName",
165          methodArgs = {}
166        )
167    })
168    public void test_getFileName() {
169        try {
170            original.pureJavaMethod(new Object());
171        } catch (Exception e) {
172            assertEquals("Incorrect file name",
173                    "StackTraceElementOriginal.java",
174                    e.getStackTrace()[0].getFileName());
175            assertEquals("Incorrect file name",
176                    "StackTraceElementTest.java",
177                    e.getStackTrace()[1].getFileName());
178        }
179    }
180
181    /**
182     * @tests java.lang.StackTraceElement#getLineNumber()
183     */
184    @TestInfo(
185      level = TestLevel.COMPLETE,
186      purpose = "",
187      targets = {
188        @TestTarget(
189          methodName = "getLineNumber",
190          methodArgs = {}
191        )
192    })
193    public void _test_getLineNumber() {
194        try {
195            original.pureJavaMethod(new Object());
196        } catch (Exception e) {
197            assertEquals("Incorrect line number",
198                    24, e.getStackTrace()[0].getLineNumber());
199        }
200    }
201
202    /**
203     * @tests java.lang.StackTraceElement#getMethodName()
204     */
205    @TestInfo(
206      level = TestLevel.COMPLETE,
207      purpose = "",
208      targets = {
209        @TestTarget(
210          methodName = "getMethodName",
211          methodArgs = {}
212        )
213    })
214    public void test_getMethodName() {
215        try {
216            original.pureJavaMethod(new Object());
217        } catch (Exception e) {
218            assertEquals("Incorrect method name",
219                    "pureJavaMethod",
220                    e.getStackTrace()[0].getMethodName());
221            assertEquals("Incorrect method name",
222                    "test_getMethodName",
223                    e.getStackTrace()[1].getMethodName());
224        }
225    }
226
227    /**
228     * @tests java.lang.StackTraceElement#hashCode()
229     */
230    @TestInfo(
231      level = TestLevel.COMPLETE,
232      purpose = "",
233      targets = {
234        @TestTarget(
235          methodName = "hashCode",
236          methodArgs = {}
237        )
238    })
239    public void test_hashCode() {
240        try {
241            original.pureJavaMethod(new Object());
242        } catch (Exception e) {
243            StackTraceElement ste1 = e.getStackTrace()[0];
244            StackTraceElement ste2 =
245                new StackTraceElement(ste1.getClassName(),
246                        ste1.getMethodName(),
247                        ste1.getFileName(),
248                        ste1.getLineNumber());
249            assertEquals("Incorrect value of hash code",
250                    ste1.hashCode(), ste2.hashCode());
251            assertFalse("Incorrect value of hash code",
252                    ste1.hashCode() == e.getStackTrace()[1].hashCode());
253        }
254    }
255
256    /**
257     * @tests java.lang.StackTraceElement#isNativeMethod()
258     */
259    @TestInfo(
260      level = TestLevel.COMPLETE,
261      purpose = "",
262      targets = {
263        @TestTarget(
264          methodName = "isNativeMethod",
265          methodArgs = {}
266        )
267    })
268    public void test_isNativeMethod() {
269        try {
270            original.pureJavaMethod(new Object());
271        } catch (Exception e) {
272            assertFalse("Incorrect method type",
273                    e.getStackTrace()[0].isNativeMethod());
274        }
275        try {
276            original.pureNativeMethod(new Object());
277        } catch (Error e) {
278            assertTrue("Incorrect method type",
279                    e.getStackTrace()[0].isNativeMethod());
280        }
281    }
282
283    /**
284     * @tests java.lang.StackTraceElement#toString()
285     */
286    @TestInfo(
287      level = TestLevel.COMPLETE,
288      purpose = "",
289      targets = {
290        @TestTarget(
291          methodName = "toString",
292          methodArgs = {}
293        )
294    })
295    public void _test_toString() {
296        try {
297            original.pureJavaMethod(new Object());
298        } catch (Exception e) {
299            StackTraceElement ste = e.getStackTrace()[0];
300            assertTrue("String representation doesn't contain a package name",
301                    ste.toString().contains(getClass().getPackage().getName()));
302            assertTrue("String representation doesn't contain a class name",
303                    ste.toString().contains("StackTraceElementOriginal"));
304            assertTrue("String representation doesn't contain a file name",
305                    ste.toString().contains("StackTraceElementOriginal.java"));
306            assertTrue("String representation doesn't contain a line number",
307                    ste.toString().contains("24"));
308            assertTrue("String representation doesn't contain a method name",
309                    ste.toString().contains("pureJavaMethod"));
310        }
311    }
312}
313