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