| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.emultest.java.lang; |
| |
| import com.google.gwt.testing.TestUtils; |
| |
| /** |
| * Unit tests for the GWT emulation of java.lang.Throwable class. |
| */ |
| public class ThrowableTest extends ThrowableTestBase { |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.emultest.EmulSuite"; |
| } |
| |
| public void testStackTrace() { |
| Throwable e = new Throwable("<my msg>"); |
| assertTrue(e.getStackTrace().length > 0); |
| |
| e = new Throwable("<my msg>") { |
| public Throwable fillInStackTrace() { |
| // Replace fill in stack trace with no-op. |
| return this; |
| } |
| }; |
| assertEquals(0, e.getStackTrace().length); |
| |
| e = new Throwable("<my msg>", null, true, false) { }; |
| assertEquals(0, e.getStackTrace().length); |
| } |
| |
| public void testSetStackTrace() { |
| Throwable throwable = new Throwable("stacktrace"); |
| throwable.fillInStackTrace(); |
| StackTraceElement[] newStackTrace = new StackTraceElement[2]; |
| newStackTrace[0] = new StackTraceElement("TestClass", "testMethod", "fakefile", 10); |
| newStackTrace[1] = new StackTraceElement("TestClass", "testCaller", "fakefile2", 97); |
| throwable.setStackTrace(newStackTrace); |
| StackTraceElement[] trace = throwable.getStackTrace(); |
| assertNotNull(trace); |
| assertEquals(2, trace.length); |
| assertEquals("TestClass", trace[0].getClassName()); |
| assertEquals("testMethod", trace[0].getMethodName()); |
| assertEquals("fakefile", trace[0].getFileName()); |
| assertEquals(10, trace[0].getLineNumber()); |
| assertEquals("TestClass.testMethod(fakefile:10)", trace[0].toString()); |
| assertEquals("TestClass.testCaller(fakefile2:97)", trace[1].toString()); |
| } |
| |
| public void testCatchJava() { |
| Throwable e = new Throwable(); |
| assertSame(e, catchJava(createThrower(e))); |
| } |
| |
| public void testCatchNative() { |
| if (TestUtils.isJvm()) { |
| return; |
| } |
| Throwable e = new Throwable("<my msg>"); |
| Object caughtNative = catchNative(createThrower(e)); |
| assertInstanceOf("Error", caughtNative); |
| assertTrue(caughtNative.toString().contains("<my msg>")); |
| assertTrue(caughtNative.toString().contains(Throwable.class.getName())); |
| } |
| |
| public void testCatchNativeWithFillInStackTraceOverride() { |
| if (TestUtils.isJvm()) { |
| return; |
| } |
| Throwable e = new Throwable("<my msg>") { |
| public Throwable fillInStackTrace() { |
| // Replace fill in stack trace with no-op. |
| return this; |
| } |
| }; |
| |
| Object caughtNative = catchNative(createThrower(e)); |
| assertInstanceOf("Error", caughtNative); |
| assertTrue(caughtNative.toString().contains("<my msg>")); |
| assertTrue(caughtNative.toString().contains(e.getClass().getName())); |
| } |
| |
| public void testJavaNativeJavaSandwichCatch() { |
| if (TestUtils.isJvm()) { |
| return; |
| } |
| Throwable e = new Throwable(); |
| assertSame(e, javaNativeJavaSandwich(e)); |
| } |
| } |