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 libcore.java.lang; 18 19import junit.framework.TestCase; 20 21public class OldStackTraceElementTest extends TestCase { 22 23 public class Original extends TestCase { 24 25 public void pureJavaMethod(Object test) throws Exception { 26 throw new Exception("pure java method"); 27 } 28 29 native public void pureNativeMethod(Object test); 30 } 31 32 private Original original; 33 34 @Override 35 protected void setUp() throws Exception { 36 original = new Original(); 37 super.setUp(); 38 } 39 40 @Override 41 protected void tearDown() throws Exception { 42 super.tearDown(); 43 } 44 45 public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_StringI() { 46 StackTraceElement ste2 = null; 47 try { 48 original.pureJavaMethod(new Object()); 49 fail(); 50 } catch (Exception e) { 51 StackTraceElement ste1 = e.getStackTrace()[0]; 52 ste2 = new StackTraceElement(ste1.getClassName(), 53 ste1.getMethodName(), 54 ste1.getFileName(), 55 ste1.getLineNumber()); 56 assertEquals("Incorrect value of class name", 57 ste1.getClassName(), ste2.getClassName()); 58 assertEquals("Incorrect value of method name", 59 ste1.getMethodName(), ste2.getMethodName()); 60 assertEquals("Incorrect value of file name", 61 ste1.getFileName(), ste2.getFileName()); 62 assertEquals("Incorrect value of line number", 63 ste1.getLineNumber(), ste2.getLineNumber()); 64 } 65 assertNotNull("Incorrect stack trace object", ste2); 66 try { 67 new StackTraceElement(null, 68 ste2.getMethodName(), 69 ste2.getFileName(), 70 ste2.getLineNumber()); 71 fail("Expected NullPointerException was not thrown"); 72 } catch (NullPointerException e) { 73 // expected 74 } 75 try { 76 new StackTraceElement(ste2.getClassName(), 77 null, 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 ste2.getMethodName(), 87 null, 88 ste2.getLineNumber()); 89 } catch (NullPointerException e) { 90 fail("Unexpected exception " + e.toString()); 91 } 92 } 93 94 public void test_equalsLjava_lang_Object() { 95 try { 96 original.pureJavaMethod(new Object()); 97 fail(); 98 } catch (Exception e) { 99 StackTraceElement ste1 = e.getStackTrace()[0]; 100 StackTraceElement ste2 = 101 new StackTraceElement(ste1.getClassName(), 102 ste1.getMethodName(), 103 ste1.getFileName(), 104 ste1.getLineNumber()); 105 assertEquals("Objects are equaled", ste1, ste2); 106 } 107 } 108 109 public void test_getClassName() { 110 try { 111 original.pureJavaMethod(new Object()); 112 fail(); 113 } catch (Exception e) { 114 assertEquals("Incorrect class name", 115 "libcore.java.lang.OldStackTraceElementTest$Original", 116 e.getStackTrace()[0].getClassName()); 117 assertEquals("Incorrect class name", 118 "libcore.java.lang.OldStackTraceElementTest", 119 e.getStackTrace()[1].getClassName()); 120 } 121 } 122 123 public void test_getFileName() { 124 try { 125 original.pureJavaMethod(new Object()); 126 fail(); 127 } catch (Exception e) { 128 assertEquals("Incorrect file name", 129 "OldStackTraceElementTest.java", 130 e.getStackTrace()[0].getFileName()); 131 assertEquals("Incorrect file name", 132 "OldStackTraceElementTest.java", 133 e.getStackTrace()[1].getFileName()); 134 } 135 } 136 137 public void test_getLineNumber() { 138 try { 139 original.pureJavaMethod(new Object()); 140 fail(); 141 } catch (Exception e) { 142 assertEquals("Incorrect line number", 143 26, e.getStackTrace()[0].getLineNumber()); 144 } 145 } 146 147 public void test_getMethodName() { 148 try { 149 original.pureJavaMethod(new Object()); 150 fail(); 151 } catch (Exception e) { 152 assertEquals("Incorrect method name", 153 "pureJavaMethod", 154 e.getStackTrace()[0].getMethodName()); 155 assertEquals("Incorrect method name", 156 "test_getMethodName", 157 e.getStackTrace()[1].getMethodName()); 158 } 159 } 160 161 public void test_hashCode() { 162 try { 163 original.pureJavaMethod(new Object()); 164 fail(); 165 } catch (Exception e) { 166 StackTraceElement ste1 = e.getStackTrace()[0]; 167 StackTraceElement ste2 = 168 new StackTraceElement(ste1.getClassName(), 169 ste1.getMethodName(), 170 ste1.getFileName(), 171 ste1.getLineNumber()); 172 assertEquals("Incorrect value of hash code", 173 ste1.hashCode(), ste2.hashCode()); 174 assertFalse("Incorrect value of hash code", 175 ste1.hashCode() == e.getStackTrace()[1].hashCode()); 176 } 177 } 178 179 public void test_isNativeMethod() { 180 try { 181 original.pureJavaMethod(new Object()); 182 fail(); 183 } catch (Exception e) { 184 assertFalse("Incorrect method type", 185 e.getStackTrace()[0].isNativeMethod()); 186 } 187 try { 188 original.pureNativeMethod(new Object()); 189 fail(); 190 } catch (Error e) { 191 assertTrue("Incorrect method type", 192 e.getStackTrace()[0].isNativeMethod()); 193 } 194 } 195 196 public void test_toString() { 197 try { 198 original.pureJavaMethod(new Object()); 199 fail(); 200 } catch (Exception e) { 201 StackTraceElement ste = e.getStackTrace()[0]; 202 assertTrue("String representation doesn't contain a package name", 203 ste.toString().contains(getClass().getPackage().getName())); 204 assertTrue("String representation doesn't contain a class name", 205 ste.toString().contains("Original")); 206 assertTrue("String representation doesn't contain a file name", 207 ste.toString().contains("OldStackTraceElementTest.java")); 208 assertTrue("String representation doesn't contain a line number", 209 ste.toString().contains("26")); 210 assertTrue("String representation doesn't contain a method name", 211 ste.toString().contains("pureJavaMethod")); 212 } 213 } 214} 215