/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package jikesRVM.core.bytecode;
import java.io.IOException;
import org.junit.Test;
import gov.nasa.jpf.annotation.Conditional;
import gov.nasa.jpf.util.test.TestJPF;
public class TestThrownException extends TestJPF {
static String[] JPF_CONFIGURATION = new String[] { "+nhandler.delegateUnhandledNative", "+search.class=.search.RandomSearch", "+choice=MapChoice" };
@Conditional
static boolean a = true;
@Test
public void main() {
if (verifyNoPropertyViolation(JPF_CONFIGURATION)) {
if (a) {
main(null);
}
}
}
private static void testHardwareException() {
System.out.println("testHardwareException");
int i = 1;
int j = 0;
int k = i / j;
System.out.println(k);
}
private static void testSoftwareException() {
System.out.println("testSoftwareException");
Float f = Float.valueOf("abc");
System.out.println(f);
}
private static void testUserException() throws IOException {
System.out.println("testUserException");
throw new IOException();
}
private static void testRethrownException() throws Exception {
System.out.println("testRethrownException");
try {
throw new Exception();
} catch (Exception e) {
throw e;
}
}
@SuppressWarnings("null")
private static void testNullException() {
System.out.println("testNullException");
Object foo = null;
foo.hashCode();
}
private static void testReThrownThruSynchronizedSection() throws Exception {
System.out.println("testReThrownThruSynchronizedSection");
Object lock = new Object();
synchronized (lock) {
try {
throw new RuntimeException("MyException");
} catch (Exception e) {
throw e;
}
}
}
static void trouble(int choice) throws Exception {
if (choice == 1)
testHardwareException();
if (choice == 2)
testSoftwareException();
if (choice == 3)
testUserException();
if (choice == 4)
testRethrownException();
if (choice == 5)
testNullException();
if (choice == 6)
testReThrownThruSynchronizedSection();
}
public static void main(String[] args) {
for (int i = 1; i <= 6; ++i) {
try {
trouble(i);
System.out.println("Error: no exception thrown!");
} catch (Exception e) {
System.out.println("caught " + e.getClass());
checkTrace(e);
continue;
}
fail();
}
}
private static void checkTrace(final Throwable throwable) {
final StackTraceElement[] elements = throwable.getStackTrace();
boolean foundOurClass = false;
for (StackTraceElement element : elements) {
if (element.getClassName().indexOf("TestThrownException") >= 0) {
System.out.println("Found our class in the stack trace");
foundOurClass = true;
break;
}
}
if (!foundOurClass) {
System.out.println("Error, our class wasn't found in the stack trace");
fail();
}
}
}