1fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe/*
2fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Copyright (C) 2015 The Android Open Source Project
3fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe *
4fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Licensed under the Apache License, Version 2.0 (the "License");
5fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * you may not use this file except in compliance with the License.
6fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * You may obtain a copy of the License at
7fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe *
8fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe *      http://www.apache.org/licenses/LICENSE-2.0
9fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe *
10fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Unless required by applicable law or agreed to in writing, software
11fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * distributed under the License is distributed on an "AS IS" BASIS,
12fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * See the License for the specific language governing permissions and
14fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * limitations under the License.
15fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe */
16fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe
17fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampeimport java.io.File;
18fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampeimport java.lang.reflect.Constructor;
19fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampeimport java.lang.reflect.Method;
20fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe
21fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe/**
22fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe * Structural hazard test.
23fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe */
24fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampepublic class Main {
25fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe    public static void main(String[] args) {
26031768a340634e2dbdec1aebb2bb3fe509b2f1f6Mathieu Chartier        System.loadLibrary(args[0]);
27fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        new Main().run();
28fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe    }
29fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe
30fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe    private void run() {
31fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        try {
32fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe            Class<?> bClass = getClass().getClassLoader().loadClass("A");
33fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe            System.out.println("Should really reach here.");
34fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        } catch (Exception e) {
35fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe            e.printStackTrace(System.out);
36fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        }
37fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe
3880b37b7e679a530738c9bcbd39873b6dacf177e5Mathieu Chartier        boolean haveOatFile = hasOatFile();
39fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        boolean gotError = false;
40fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        try {
41fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe            Class<?> bClass = getClass().getClassLoader().loadClass("B");
42fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        } catch (IncompatibleClassChangeError icce) {
43fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe            gotError = true;
44fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        } catch (Exception e) {
45fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe            e.printStackTrace(System.out);
46fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        }
47fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        if (haveOatFile ^ gotError) {
4880b37b7e679a530738c9bcbd39873b6dacf177e5Mathieu Chartier            System.out.println("Did not get expected error. " + haveOatFile + " " + gotError);
49fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        }
50fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe        System.out.println("Done.");
51fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe    }
52fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe
5380b37b7e679a530738c9bcbd39873b6dacf177e5Mathieu Chartier    private native static boolean hasOatFile();
54fd9eb3923dcf417afcf5ed4ebb13867fd10f2de3Andreas Gampe}
55