15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/*
25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Copyright (C) 2008 The Android Open Source Project
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Licensed under the Apache License, Version 2.0 (the "License");
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * you may not use this file except in compliance with the License.
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * You may obtain a copy of the License at
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *      http://www.apache.org/licenses/LICENSE-2.0
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao *
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Unless required by applicable law or agreed to in writing, software
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * distributed under the License is distributed on an "AS IS" BASIS,
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * See the License for the specific language governing permissions and
145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * limitations under the License.
155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Test exception throwing.
195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Throw {
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public void throwNullPointerException() {
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        throw new NullPointerException("npe!");
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public void throwArithmeticException() {
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        throw new ArithmeticException();
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public void one() {
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Throw.one");
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            throwNullPointerException();
33795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao            Main.assertTrue(false);
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (Exception ex) {
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            return;
375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
39795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(false);
405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public void twoA() {
435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Throw.twoA");
445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean gotN = false;
455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean gotA = false;
465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean gotWeird = false;
475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            try {
505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                throwArithmeticException();
515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                gotWeird = true;
525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            } catch (ArithmeticException ae) {
535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                gotA = true;
545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            }
555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (NullPointerException npe) {
565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            gotN = true;
575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
59795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(gotA);
60795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(!gotN);
61795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(!gotWeird);
625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public void twoN() {
655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Throw.twoN");
665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean gotN = false;
675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean gotA = false;
685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean gotWeird = false;
695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            try {
725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                throwNullPointerException();
735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                gotWeird = true;
745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            } catch (ArithmeticException ae) {
755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                gotA = true;
765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            }
775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (NullPointerException npe) {
785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            gotN = true;
795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
81795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(!gotA);
82795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(gotN);
83795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(!gotWeird);
845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public void rethrow() {
875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Throw.rethrow");
885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean caught = false;
895d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean lly = false;
905d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean second = false;
915d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            try {
945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                throwNullPointerException();
95795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao                Main.assertTrue(false);
965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            } catch (Exception ex) {
975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                if (ex instanceof ArithmeticException) {
98795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao                    Main.assertTrue(false);
995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                }
1005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                if (ex instanceof NullPointerException) {
1015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                    caught = true;
1025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                    throw (NullPointerException) ex;
1035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                }
1045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            } finally {
1055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao                lly = true;
1065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            }
1075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (Exception ex) {
1085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            second = true;
1095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
111795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(caught);
112795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(lly);
113795d78f4d04c8d007bf2bdf2ed4131379bcf19c7jeffhao        Main.assertTrue(second);
1145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
1155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void run() {
1175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        Throw th = new Throw();
1185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        th.one();
1205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        th.twoA();
1215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        th.twoN();
1225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        th.rethrow();
1235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
1245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
125