1*b7c941bbSAndroid Build Coastguard Worker /* 2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*b7c941bbSAndroid Build Coastguard Worker * 4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*b7c941bbSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*b7c941bbSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*b7c941bbSAndroid Build Coastguard Worker * 8*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*b7c941bbSAndroid Build Coastguard Worker * 10*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*b7c941bbSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*b7c941bbSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b7c941bbSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*b7c941bbSAndroid Build Coastguard Worker * limitations under the License. 15*b7c941bbSAndroid Build Coastguard Worker */ 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Worker package dot.junit; 18*b7c941bbSAndroid Build Coastguard Worker 19*b7c941bbSAndroid Build Coastguard Worker import junit.framework.TestCase; 20*b7c941bbSAndroid Build Coastguard Worker 21*b7c941bbSAndroid Build Coastguard Worker public class DxTestCase extends TestCase { 22*b7c941bbSAndroid Build Coastguard Worker checkError(Class<?> expectedErrorClass, Throwable thrown, boolean in_invocation_exc)23*b7c941bbSAndroid Build Coastguard Worker private static void checkError(Class<?> expectedErrorClass, Throwable thrown, 24*b7c941bbSAndroid Build Coastguard Worker boolean in_invocation_exc) { 25*b7c941bbSAndroid Build Coastguard Worker if (expectedErrorClass != null && thrown == null) { 26*b7c941bbSAndroid Build Coastguard Worker fail("Expected error of type " + expectedErrorClass); 27*b7c941bbSAndroid Build Coastguard Worker } else if (expectedErrorClass == null && thrown != null) { 28*b7c941bbSAndroid Build Coastguard Worker fail("Unexpected error " + thrown); 29*b7c941bbSAndroid Build Coastguard Worker } else if (expectedErrorClass != null && thrown != null) { 30*b7c941bbSAndroid Build Coastguard Worker if (in_invocation_exc) { 31*b7c941bbSAndroid Build Coastguard Worker if (!(thrown instanceof java.lang.reflect.InvocationTargetException)) { 32*b7c941bbSAndroid Build Coastguard Worker fail("Expected invocation target exception, but got " + thrown); 33*b7c941bbSAndroid Build Coastguard Worker } 34*b7c941bbSAndroid Build Coastguard Worker thrown = thrown.getCause(); 35*b7c941bbSAndroid Build Coastguard Worker } 36*b7c941bbSAndroid Build Coastguard Worker if (!expectedErrorClass.equals(thrown.getClass())) { 37*b7c941bbSAndroid Build Coastguard Worker fail("Expected error of type " + expectedErrorClass + ", but got " + 38*b7c941bbSAndroid Build Coastguard Worker thrown.getClass()); 39*b7c941bbSAndroid Build Coastguard Worker } 40*b7c941bbSAndroid Build Coastguard Worker } 41*b7c941bbSAndroid Build Coastguard Worker } 42*b7c941bbSAndroid Build Coastguard Worker 43*b7c941bbSAndroid Build Coastguard Worker /** 44*b7c941bbSAndroid Build Coastguard Worker * Try to load the class with the given name, and check for the expected error. 45*b7c941bbSAndroid Build Coastguard Worker */ load(String className, Class<?> expectedErrorClass)46*b7c941bbSAndroid Build Coastguard Worker public static Class<?> load(String className, Class<?> expectedErrorClass) { 47*b7c941bbSAndroid Build Coastguard Worker try { 48*b7c941bbSAndroid Build Coastguard Worker Class<?> c = Class.forName(className); 49*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, null, false); 50*b7c941bbSAndroid Build Coastguard Worker return c; 51*b7c941bbSAndroid Build Coastguard Worker } catch (Throwable t) { 52*b7c941bbSAndroid Build Coastguard Worker if (expectedErrorClass != null) { 53*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, t, false); 54*b7c941bbSAndroid Build Coastguard Worker } else { 55*b7c941bbSAndroid Build Coastguard Worker fail("Could not load class " + className + ": " + t); 56*b7c941bbSAndroid Build Coastguard Worker } 57*b7c941bbSAndroid Build Coastguard Worker return null; 58*b7c941bbSAndroid Build Coastguard Worker } 59*b7c941bbSAndroid Build Coastguard Worker } 60*b7c941bbSAndroid Build Coastguard Worker 61*b7c941bbSAndroid Build Coastguard Worker /** 62*b7c941bbSAndroid Build Coastguard Worker * Try to load the class with the given name, find the "run" method and run it. 63*b7c941bbSAndroid Build Coastguard Worker * If expectedErrorClass is not null, check for an exception of that class. 64*b7c941bbSAndroid Build Coastguard Worker */ loadAndRun(String className, boolean isStatic, boolean wrapped, Class<?> expectedErrorClass, Object... args)65*b7c941bbSAndroid Build Coastguard Worker public static void loadAndRun(String className, boolean isStatic, boolean wrapped, 66*b7c941bbSAndroid Build Coastguard Worker Class<?> expectedErrorClass, Object... args) { 67*b7c941bbSAndroid Build Coastguard Worker Class<?> c = load(className, null); 68*b7c941bbSAndroid Build Coastguard Worker 69*b7c941bbSAndroid Build Coastguard Worker java.lang.reflect.Method method = null; 70*b7c941bbSAndroid Build Coastguard Worker // We expect only ever one declared method named run, but don't know the arguments. So 71*b7c941bbSAndroid Build Coastguard Worker // search for one. 72*b7c941bbSAndroid Build Coastguard Worker for (java.lang.reflect.Method m : c.getDeclaredMethods()) { 73*b7c941bbSAndroid Build Coastguard Worker if (m.getName().equals("run")) { 74*b7c941bbSAndroid Build Coastguard Worker method = m; 75*b7c941bbSAndroid Build Coastguard Worker break; 76*b7c941bbSAndroid Build Coastguard Worker } 77*b7c941bbSAndroid Build Coastguard Worker } 78*b7c941bbSAndroid Build Coastguard Worker if (method == null) { 79*b7c941bbSAndroid Build Coastguard Worker fail("Could not find method 'run'"); 80*b7c941bbSAndroid Build Coastguard Worker } 81*b7c941bbSAndroid Build Coastguard Worker 82*b7c941bbSAndroid Build Coastguard Worker Object receiver = null; 83*b7c941bbSAndroid Build Coastguard Worker if (!isStatic) { 84*b7c941bbSAndroid Build Coastguard Worker try { 85*b7c941bbSAndroid Build Coastguard Worker receiver = c.newInstance(); 86*b7c941bbSAndroid Build Coastguard Worker } catch (Exception exc) { 87*b7c941bbSAndroid Build Coastguard Worker fail("Could not instantiate " + className + ": " + exc.getMessage()); 88*b7c941bbSAndroid Build Coastguard Worker } 89*b7c941bbSAndroid Build Coastguard Worker } 90*b7c941bbSAndroid Build Coastguard Worker 91*b7c941bbSAndroid Build Coastguard Worker try { 92*b7c941bbSAndroid Build Coastguard Worker method.invoke(receiver, args); 93*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, null, false); 94*b7c941bbSAndroid Build Coastguard Worker } catch (Throwable t) { 95*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, t, wrapped); 96*b7c941bbSAndroid Build Coastguard Worker } 97*b7c941bbSAndroid Build Coastguard Worker } 98*b7c941bbSAndroid Build Coastguard Worker loadAndRun(String className, Class<?> expectedErrorClass)99*b7c941bbSAndroid Build Coastguard Worker public static void loadAndRun(String className, Class<?> expectedErrorClass) { 100*b7c941bbSAndroid Build Coastguard Worker loadAndRun(className, false, true, expectedErrorClass); 101*b7c941bbSAndroid Build Coastguard Worker } 102*b7c941bbSAndroid Build Coastguard Worker loadAndRun(String className, Class<?> expectedErrorClass, Object... args)103*b7c941bbSAndroid Build Coastguard Worker public static void loadAndRun(String className, Class<?> expectedErrorClass, Object... args) { 104*b7c941bbSAndroid Build Coastguard Worker loadAndRun(className, false, true, expectedErrorClass, args); 105*b7c941bbSAndroid Build Coastguard Worker } 106*b7c941bbSAndroid Build Coastguard Worker 107*b7c941bbSAndroid Build Coastguard Worker // omit the "extends TestCase" and uncomment the following methods if you would like to run the tests as rolled-out, separate tests. 108*b7c941bbSAndroid Build Coastguard Worker 109*b7c941bbSAndroid Build Coastguard Worker /* 110*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(int expected, int actual) { 111*b7c941bbSAndroid Build Coastguard Worker if (expected != actual) throw new RuntimeException("AssertionFailedError: not equals"); 112*b7c941bbSAndroid Build Coastguard Worker } 113*b7c941bbSAndroid Build Coastguard Worker 114*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(long expected, long actual) { 115*b7c941bbSAndroid Build Coastguard Worker if (expected != actual) throw new RuntimeException("AssertionFailedError: not equals"); 116*b7c941bbSAndroid Build Coastguard Worker } 117*b7c941bbSAndroid Build Coastguard Worker 118*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(double expected, double actual, double delta) { 119*b7c941bbSAndroid Build Coastguard Worker if(!(Math.abs(expected-actual) <= delta)) throw new RuntimeException("AssertionFailedError: not within delta"); 120*b7c941bbSAndroid Build Coastguard Worker } 121*b7c941bbSAndroid Build Coastguard Worker 122*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(Object expected, Object actual) { 123*b7c941bbSAndroid Build Coastguard Worker if (expected == null && actual == null) 124*b7c941bbSAndroid Build Coastguard Worker return; 125*b7c941bbSAndroid Build Coastguard Worker if (expected != null && expected.equals(actual)) 126*b7c941bbSAndroid Build Coastguard Worker return; 127*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException("AssertionFailedError: not the same"); 128*b7c941bbSAndroid Build Coastguard Worker } 129*b7c941bbSAndroid Build Coastguard Worker 130*b7c941bbSAndroid Build Coastguard Worker static public void assertTrue(boolean condition) { 131*b7c941bbSAndroid Build Coastguard Worker if (!condition) throw new RuntimeException("AssertionFailedError: condition was false"); 132*b7c941bbSAndroid Build Coastguard Worker } 133*b7c941bbSAndroid Build Coastguard Worker 134*b7c941bbSAndroid Build Coastguard Worker static public void assertFalse(boolean condition) { 135*b7c941bbSAndroid Build Coastguard Worker if (condition) throw new RuntimeException("AssertionFailedError: condition was true"); 136*b7c941bbSAndroid Build Coastguard Worker } 137*b7c941bbSAndroid Build Coastguard Worker 138*b7c941bbSAndroid Build Coastguard Worker static public void assertNotNull(Object object) { 139*b7c941bbSAndroid Build Coastguard Worker if (object == null) throw new RuntimeException("AssertionFailedError: object was null"); 140*b7c941bbSAndroid Build Coastguard Worker } 141*b7c941bbSAndroid Build Coastguard Worker 142*b7c941bbSAndroid Build Coastguard Worker static public void assertNull(Object object) { 143*b7c941bbSAndroid Build Coastguard Worker if (object != null) throw new RuntimeException("AssertionFailedError: object was not null"); 144*b7c941bbSAndroid Build Coastguard Worker } 145*b7c941bbSAndroid Build Coastguard Worker 146*b7c941bbSAndroid Build Coastguard Worker static public void fail(String message) { 147*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException("AssertionFailedError msg:"+message); 148*b7c941bbSAndroid Build Coastguard Worker } 149*b7c941bbSAndroid Build Coastguard Worker */ 150*b7c941bbSAndroid Build Coastguard Worker 151*b7c941bbSAndroid Build Coastguard Worker 152*b7c941bbSAndroid Build Coastguard Worker } 153