1 /* 2 * Copyright (C) 2009 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 17 import other.Mutant; 18 import other.InaccessibleClass; 19 import other.InaccessibleMethod; 20 21 /** 22 * Test some problematic situations that the verifier detects. 23 */ 24 public class Main { 25 public static final boolean VERBOSE = false; 26 main(String[] args)27 public static void main(String[] args) { 28 testClassNewInstance(); 29 testMissingStuff(); 30 testBadAccess(); 31 } 32 33 /** 34 * Try to create a new instance of an abstract class. 35 */ testClassNewInstance()36 static void testClassNewInstance() { 37 try { 38 MaybeAbstract ma = new MaybeAbstract(); 39 System.err.println("ERROR: MaybeAbstract succeeded unexpectedly"); 40 } catch (InstantiationError ie) { 41 System.out.println("Got expected InstantationError"); 42 if (VERBOSE) System.out.println("--- " + ie); 43 } catch (Exception ex) { 44 System.err.println("Got unexpected MaybeAbstract failure"); 45 } 46 } 47 48 /** 49 * Test stuff that disappears. 50 */ testMissingStuff()51 static void testMissingStuff() { 52 Mutant mutant = new Mutant(); 53 54 try { 55 int x = mutant.disappearingField; 56 } catch (NoSuchFieldError nsfe) { 57 System.out.println("Got expected NoSuchFieldError"); 58 if (VERBOSE) System.out.println("--- " + nsfe); 59 } 60 61 try { 62 int y = Mutant.disappearingStaticField; 63 } catch (NoSuchFieldError nsfe) { 64 System.out.println("Got expected NoSuchFieldError"); 65 if (VERBOSE) System.out.println("--- " + nsfe); 66 } 67 68 try { 69 mutant.disappearingMethod(); 70 } catch (NoSuchMethodError nsme) { 71 System.out.println("Got expected NoSuchMethodError"); 72 if (VERBOSE) System.out.println("--- " + nsme); 73 } 74 75 try { 76 Mutant.disappearingStaticMethod(); 77 } catch (NoSuchMethodError nsme) { 78 System.out.println("Got expected NoSuchMethodError"); 79 if (VERBOSE) System.out.println("--- " + nsme); 80 } 81 } 82 83 /** 84 * Test stuff that becomes inaccessible. 85 */ testBadAccess()86 static void testBadAccess() { 87 Mutant mutant = new Mutant(); 88 89 try { 90 int x = mutant.inaccessibleField; 91 System.err.println("ERROR: bad access succeeded (ifield)"); 92 } catch (IllegalAccessError iae) { 93 System.out.println("Got expected IllegalAccessError (ifield)"); 94 if (VERBOSE) System.out.println("--- " + iae); 95 } 96 97 try { 98 int y = Mutant.inaccessibleStaticField; 99 System.err.println("ERROR: bad access succeeded (sfield)"); 100 } catch (IllegalAccessError iae) { 101 System.out.println("Got expected IllegalAccessError (sfield)"); 102 if (VERBOSE) System.out.println("--- " + iae); 103 } 104 105 try { 106 mutant.inaccessibleMethod(); 107 System.err.println("ERROR: bad access succeeded (method)"); 108 } catch (IllegalAccessError iae) { 109 System.out.println("Got expected IllegalAccessError (method)"); 110 if (VERBOSE) System.out.println("--- " + iae); 111 } 112 113 try { 114 Mutant.inaccessibleStaticMethod(); 115 System.err.println("ERROR: bad access succeeded (smethod)"); 116 } catch (IllegalAccessError iae) { 117 System.out.println("Got expected IllegalAccessError (smethod)"); 118 if (VERBOSE) System.out.println("--- " + iae); 119 } 120 121 try { 122 /* accessible static method in an inaccessible class */ 123 InaccessibleClass.test(); 124 System.err.println("ERROR: bad meth-class access succeeded (meth-class)"); 125 } catch (IllegalAccessError iae) { 126 System.out.println("Got expected IllegalAccessError (meth-class)"); 127 if (VERBOSE) System.out.println("--- " + iae); 128 } 129 130 try { 131 /* accessible static field in an inaccessible class */ 132 int blah = InaccessibleClass.blah; 133 System.err.println("ERROR: bad field-class access succeeded (field-class)"); 134 } catch (IllegalAccessError iae) { 135 System.out.println("Got expected IllegalAccessError (field-class)"); 136 if (VERBOSE) System.out.println("--- " + iae); 137 } 138 139 try { 140 /* inaccessible static method in an accessible class */ 141 InaccessibleMethod.test(); 142 System.err.println("ERROR: bad access succeeded (meth-meth)"); 143 } catch (IllegalAccessError iae) { 144 System.out.println("Got expected IllegalAccessError (meth-meth)"); 145 if (VERBOSE) System.out.println("--- " + iae); 146 } 147 } 148 } 149