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 public class DxAbstractMain { 20*b7c941bbSAndroid Build Coastguard Worker 21*b7c941bbSAndroid Build Coastguard Worker /* NOTE: Because of how tests are generated, this is replicated between 22*b7c941bbSAndroid Build Coastguard Worker * this class and DxTestCase. 23*b7c941bbSAndroid Build Coastguard Worker */ 24*b7c941bbSAndroid Build Coastguard Worker checkError(Class<?> expectedErrorClass, Throwable thrown, boolean in_invocation_exc)25*b7c941bbSAndroid Build Coastguard Worker private static void checkError(Class<?> expectedErrorClass, Throwable thrown, 26*b7c941bbSAndroid Build Coastguard Worker boolean in_invocation_exc) { 27*b7c941bbSAndroid Build Coastguard Worker if (expectedErrorClass != null && thrown == null) { 28*b7c941bbSAndroid Build Coastguard Worker fail("Expected error of type " + expectedErrorClass, null); 29*b7c941bbSAndroid Build Coastguard Worker } else if (expectedErrorClass == null && thrown != null) { 30*b7c941bbSAndroid Build Coastguard Worker fail("Unexpected error " + thrown, thrown); 31*b7c941bbSAndroid Build Coastguard Worker } else if (expectedErrorClass != null && thrown != null) { 32*b7c941bbSAndroid Build Coastguard Worker if (in_invocation_exc) { 33*b7c941bbSAndroid Build Coastguard Worker if (!(thrown instanceof java.lang.reflect.InvocationTargetException)) { 34*b7c941bbSAndroid Build Coastguard Worker fail("Expected invocation target exception, but got " + thrown, thrown); 35*b7c941bbSAndroid Build Coastguard Worker } 36*b7c941bbSAndroid Build Coastguard Worker thrown = thrown.getCause(); 37*b7c941bbSAndroid Build Coastguard Worker } 38*b7c941bbSAndroid Build Coastguard Worker if (!expectedErrorClass.equals(thrown.getClass())) { 39*b7c941bbSAndroid Build Coastguard Worker fail("Expected error of type " + expectedErrorClass + ", but got " + 40*b7c941bbSAndroid Build Coastguard Worker thrown.getClass(), thrown); 41*b7c941bbSAndroid Build Coastguard Worker } 42*b7c941bbSAndroid Build Coastguard Worker } 43*b7c941bbSAndroid Build Coastguard Worker } 44*b7c941bbSAndroid Build Coastguard Worker 45*b7c941bbSAndroid Build Coastguard Worker /** 46*b7c941bbSAndroid Build Coastguard Worker * Try to load the class with the given name, and check for the expected error. 47*b7c941bbSAndroid Build Coastguard Worker */ load(String className, Class<?> expectedErrorClass)48*b7c941bbSAndroid Build Coastguard Worker public static Class<?> load(String className, Class<?> expectedErrorClass) { 49*b7c941bbSAndroid Build Coastguard Worker Class<?> c; 50*b7c941bbSAndroid Build Coastguard Worker try { 51*b7c941bbSAndroid Build Coastguard Worker c = Class.forName(className); 52*b7c941bbSAndroid Build Coastguard Worker } catch (Throwable t) { 53*b7c941bbSAndroid Build Coastguard Worker if (expectedErrorClass != null) { 54*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, t, false); 55*b7c941bbSAndroid Build Coastguard Worker } else { 56*b7c941bbSAndroid Build Coastguard Worker fail("Could not load class " + className, t); 57*b7c941bbSAndroid Build Coastguard Worker } 58*b7c941bbSAndroid Build Coastguard Worker return null; 59*b7c941bbSAndroid Build Coastguard Worker } 60*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, null, false); 61*b7c941bbSAndroid Build Coastguard Worker return c; 62*b7c941bbSAndroid Build Coastguard Worker } 63*b7c941bbSAndroid Build Coastguard Worker 64*b7c941bbSAndroid Build Coastguard Worker /** 65*b7c941bbSAndroid Build Coastguard Worker * Try to load the class with the given name, find the "run" method and run it. 66*b7c941bbSAndroid Build Coastguard Worker * If expectedErrorClass is not null, check for an exception of that class. 67*b7c941bbSAndroid Build Coastguard Worker */ loadAndRun(String className, boolean isStatic, boolean wrapped, Class<?> expectedErrorClass, Object... args)68*b7c941bbSAndroid Build Coastguard Worker public static void loadAndRun(String className, boolean isStatic, boolean wrapped, 69*b7c941bbSAndroid Build Coastguard Worker Class<?> expectedErrorClass, Object... args) { 70*b7c941bbSAndroid Build Coastguard Worker Class<?> c = load(className, null); 71*b7c941bbSAndroid Build Coastguard Worker 72*b7c941bbSAndroid Build Coastguard Worker java.lang.reflect.Method method = null; 73*b7c941bbSAndroid Build Coastguard Worker // We expect only ever one declared method named run, but don't know the arguments. So 74*b7c941bbSAndroid Build Coastguard Worker // search for one. 75*b7c941bbSAndroid Build Coastguard Worker for (java.lang.reflect.Method m : c.getDeclaredMethods()) { 76*b7c941bbSAndroid Build Coastguard Worker if (m.getName().equals("run")) { 77*b7c941bbSAndroid Build Coastguard Worker method = m; 78*b7c941bbSAndroid Build Coastguard Worker break; 79*b7c941bbSAndroid Build Coastguard Worker } 80*b7c941bbSAndroid Build Coastguard Worker } 81*b7c941bbSAndroid Build Coastguard Worker if (method == null) { 82*b7c941bbSAndroid Build Coastguard Worker fail("Could not find method 'run'", null); 83*b7c941bbSAndroid Build Coastguard Worker } 84*b7c941bbSAndroid Build Coastguard Worker 85*b7c941bbSAndroid Build Coastguard Worker Object receiver = null; 86*b7c941bbSAndroid Build Coastguard Worker if (!isStatic) { 87*b7c941bbSAndroid Build Coastguard Worker try { 88*b7c941bbSAndroid Build Coastguard Worker receiver = c.newInstance(); 89*b7c941bbSAndroid Build Coastguard Worker } catch (Exception exc) { 90*b7c941bbSAndroid Build Coastguard Worker fail("Could not instantiate " + className, exc); 91*b7c941bbSAndroid Build Coastguard Worker } 92*b7c941bbSAndroid Build Coastguard Worker } 93*b7c941bbSAndroid Build Coastguard Worker 94*b7c941bbSAndroid Build Coastguard Worker try { 95*b7c941bbSAndroid Build Coastguard Worker method.invoke(receiver, args); 96*b7c941bbSAndroid Build Coastguard Worker } catch (Throwable t) { 97*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, t, wrapped); 98*b7c941bbSAndroid Build Coastguard Worker return; 99*b7c941bbSAndroid Build Coastguard Worker } 100*b7c941bbSAndroid Build Coastguard Worker checkError(expectedErrorClass, null, false); 101*b7c941bbSAndroid Build Coastguard Worker } 102*b7c941bbSAndroid Build Coastguard Worker loadAndRun(String className, Class<?> expectedErrorClass)103*b7c941bbSAndroid Build Coastguard Worker public static void loadAndRun(String className, Class<?> expectedErrorClass) { 104*b7c941bbSAndroid Build Coastguard Worker loadAndRun(className, false, true, expectedErrorClass); 105*b7c941bbSAndroid Build Coastguard Worker } 106*b7c941bbSAndroid Build Coastguard Worker loadAndRun(String className, Class<?> expectedErrorClass, Object... args)107*b7c941bbSAndroid Build Coastguard Worker public static void loadAndRun(String className, Class<?> expectedErrorClass, Object... args) { 108*b7c941bbSAndroid Build Coastguard Worker loadAndRun(className, false, true, expectedErrorClass, args); 109*b7c941bbSAndroid Build Coastguard Worker } 110*b7c941bbSAndroid Build Coastguard Worker assertEquals(int expected, int actual)111*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(int expected, int actual) { 112*b7c941bbSAndroid Build Coastguard Worker if (expected != actual) 113*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException( 114*b7c941bbSAndroid Build Coastguard Worker "not equals. Expected " + expected + " actual " + actual); 115*b7c941bbSAndroid Build Coastguard Worker } 116*b7c941bbSAndroid Build Coastguard Worker assertEquals(String message, int expected, int actual)117*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(String message, int expected, int actual) { 118*b7c941bbSAndroid Build Coastguard Worker if (expected != actual) 119*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException( 120*b7c941bbSAndroid Build Coastguard Worker "not equals: " + message + " Expected " + expected + " actual " + actual); 121*b7c941bbSAndroid Build Coastguard Worker } 122*b7c941bbSAndroid Build Coastguard Worker assertEquals(long expected, long actual)123*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(long expected, long actual) { 124*b7c941bbSAndroid Build Coastguard Worker if (expected != actual) 125*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException( 126*b7c941bbSAndroid Build Coastguard Worker "not equals. Expected " + expected + " actual " + actual); 127*b7c941bbSAndroid Build Coastguard Worker } 128*b7c941bbSAndroid Build Coastguard Worker assertEquals(double expected, double actual, double delta)129*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(double expected, double actual, double delta) { 130*b7c941bbSAndroid Build Coastguard Worker if (!(Math.abs(expected - actual) <= delta)) 131*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException("not within delta"); 132*b7c941bbSAndroid Build Coastguard Worker } 133*b7c941bbSAndroid Build Coastguard Worker assertEquals(Object expected, Object actual)134*b7c941bbSAndroid Build Coastguard Worker static public void assertEquals(Object expected, Object actual) { 135*b7c941bbSAndroid Build Coastguard Worker if (expected == null && actual == null) 136*b7c941bbSAndroid Build Coastguard Worker return; 137*b7c941bbSAndroid Build Coastguard Worker if (expected != null && expected.equals(actual)) 138*b7c941bbSAndroid Build Coastguard Worker return; 139*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException("not the same: " + expected + " vs " + actual); 140*b7c941bbSAndroid Build Coastguard Worker } 141*b7c941bbSAndroid Build Coastguard Worker assertTrue(boolean condition)142*b7c941bbSAndroid Build Coastguard Worker static public void assertTrue(boolean condition) { 143*b7c941bbSAndroid Build Coastguard Worker if (!condition) 144*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException("condition was false"); 145*b7c941bbSAndroid Build Coastguard Worker } 146*b7c941bbSAndroid Build Coastguard Worker assertFalse(boolean condition)147*b7c941bbSAndroid Build Coastguard Worker static public void assertFalse(boolean condition) { 148*b7c941bbSAndroid Build Coastguard Worker if (condition) 149*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException("condition was true"); 150*b7c941bbSAndroid Build Coastguard Worker } 151*b7c941bbSAndroid Build Coastguard Worker assertNotNull(Object object)152*b7c941bbSAndroid Build Coastguard Worker static public void assertNotNull(Object object) { 153*b7c941bbSAndroid Build Coastguard Worker if (object == null) 154*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException("object was null"); 155*b7c941bbSAndroid Build Coastguard Worker } 156*b7c941bbSAndroid Build Coastguard Worker assertNull(Object object)157*b7c941bbSAndroid Build Coastguard Worker static public void assertNull(Object object) { 158*b7c941bbSAndroid Build Coastguard Worker if (object != null) 159*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException("object was not null"); 160*b7c941bbSAndroid Build Coastguard Worker } 161*b7c941bbSAndroid Build Coastguard Worker fail(String message)162*b7c941bbSAndroid Build Coastguard Worker static public void fail(String message) { 163*b7c941bbSAndroid Build Coastguard Worker fail(message, null); 164*b7c941bbSAndroid Build Coastguard Worker } 165*b7c941bbSAndroid Build Coastguard Worker fail(String message, Throwable cause)166*b7c941bbSAndroid Build Coastguard Worker static public void fail(String message, Throwable cause) { 167*b7c941bbSAndroid Build Coastguard Worker throw new AssertionFailedException(message, cause); 168*b7c941bbSAndroid Build Coastguard Worker } 169*b7c941bbSAndroid Build Coastguard Worker } 170