1 // Copyright 2013 the V8 project authors. All rights reserved. 2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3 // 4 // Redistribution and use in source and binary forms, with or without 5 // modification, are permitted provided that the following conditions 6 // are met: 7 // 1. Redistributions of source code must retain the above copyright 8 // notice, this list of conditions and the following disclaimer. 9 // 2. Redistributions in binary form must reproduce the above copyright 10 // notice, this list of conditions and the following disclaimer in the 11 // documentation and/or other materials provided with the distribution. 12 // 13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 24 description("KDE JS Test"); 25 function kdeShouldBe(a, b, c) 26 { 27 if ( a == b ) 28 debug(c+" .......... Passed"); 29 else 30 debug(c+" .......... Failed"); 31 } 32 33 function testThrow() 34 { 35 var caught = false; 36 try { 37 throw 99; 38 } catch (e) { 39 caught = true; 40 } 41 kdeShouldBe(caught, true, "testing throw()"); 42 } 43 44 // same as above but lacking a semicolon after throw 45 function testThrow2() 46 { 47 var caught = false; 48 try { 49 throw 99 50 } catch (e) { 51 caught = true; 52 } 53 kdeShouldBe(caught, true, "testing throw()"); 54 } 55 56 function testReferenceError() 57 { 58 var err = "noerror"; 59 var caught = false; 60 try { 61 var dummy = nonexistant; // throws reference error 62 } catch (e) { 63 caught = true; 64 err = e.name; 65 } 66 // test err 67 kdeShouldBe(caught, true, "ReferenceError"); 68 } 69 70 function testFunctionErrorHelper() 71 { 72 var a = b; // throws reference error 73 } 74 75 function testFunctionError() 76 { 77 var caught = false; 78 try { 79 testFunctionErrorHelper(); 80 } catch (e) { 81 caught = true; 82 } 83 kdeShouldBe(caught, true, "error propagation in functions"); 84 } 85 86 function testMathFunctionError() 87 { 88 var caught = false; 89 try { 90 Math(); 91 } catch (e) { 92 debug("catch"); 93 caught = true; 94 } finally { 95 debug("finally"); 96 } 97 kdeShouldBe(caught, true, "Math() error"); 98 } 99 100 function testWhileAbortion() 101 { 102 var caught = 0; 103 try { 104 while (a=b, 1) { // "endless error" in condition 105 ; 106 } 107 } catch (e) { 108 caught++; 109 } 110 111 try { 112 while (1) { 113 var a = b; // error in body 114 } 115 } catch (e) { 116 caught++; 117 } 118 kdeShouldBe(caught, 2, "Abort while() on error"); 119 } 120 121 debug("Except a lot of errors. They should all be caught and lead to PASS"); 122 testThrow(); 123 testThrow2(); 124 testReferenceError(); 125 testFunctionError(); 126 testMathFunctionError(); 127 testWhileAbortion(); 128