OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are met: |
7 // 1. Redistributions of source code must retain the above copyright | 7 // 1. Redistributions of source code must retain the above copyright |
8 // notice, this list of conditions and the following disclaimer. | 8 // notice, this list of conditions and the following disclaimer. |
9 // 2. Redistributions in binary form must reproduce the above copyright | 9 // 2. Redistributions in binary form must reproduce the above copyright |
10 // notice, this list of conditions and the following disclaimer in the | 10 // notice, this list of conditions and the following disclaimer in the |
11 // documentation and/or other materials provided with the distribution. | 11 // documentation and/or other materials provided with the distribution. |
12 // | 12 // |
13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y | 13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND AN
Y |
14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 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 AN
Y | 16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR AN
Y |
17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 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 O
N | 19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O
N |
20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 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 | 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. | 22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
23 | 23 |
24 description( | 24 description("KDE JS Test"); |
25 "This test checks that toString() round-trip on a function that has do..while in
JavaScript does not insert extra semicolon." | 25 function testSwitch(v) { |
26 ); | 26 var result = ""; |
27 | 27 switch (v) { |
28 function f1() { | 28 case 0: |
29 do {} while(0); | 29 result += 'a'; |
| 30 case 1: |
| 31 result += 'b'; |
| 32 case 1: |
| 33 result += 'c'; |
| 34 case 2: |
| 35 result += 'd'; |
| 36 break; |
| 37 } |
| 38 return result; |
30 } | 39 } |
31 | 40 |
32 function f2() { | 41 shouldBe("testSwitch(0)", "'abcd'"); |
33 do {} while(0) | 42 shouldBe("testSwitch(1)", "'bcd'"); // IE agrees, NS disagrees |
| 43 shouldBe("testSwitch(2)", "'d'"); |
| 44 shouldBe("testSwitch(false)", "''"); |
| 45 |
| 46 function testSwitch2(v) { |
| 47 var result = ""; |
| 48 switch (v) { |
| 49 case 1: |
| 50 result += 'a'; |
| 51 break; |
| 52 case 2: |
| 53 result += 'b'; |
| 54 break; |
| 55 default: |
| 56 result += 'c'; |
| 57 case 3: |
| 58 result += 'd'; |
| 59 break; |
| 60 } |
| 61 return result; |
34 } | 62 } |
35 | 63 |
36 function f3() { | 64 shouldBe("testSwitch2(1)", "'a'"); |
37 do {} while(0) ; | 65 shouldBe("testSwitch2(2)", "'b'"); |
38 } | 66 shouldBe("testSwitch2(3)", "'d'"); |
| 67 shouldBe("testSwitch2(-1)", "'cd'"); |
| 68 shouldBe("testSwitch2('x')", "'cd'"); |
39 | 69 |
40 function f4() { | 70 function testSwitch3(v) { |
41 do {} while(0) /*empty*/ ; | 71 var result = ""; |
42 } | 72 switch (v) { |
| 73 default: |
| 74 result += 'c'; |
| 75 case 3: |
| 76 result += 'd'; |
| 77 case 4: |
| 78 result += 'e'; |
| 79 break; |
| 80 } |
| 81 return result; |
| 82 }; |
43 | 83 |
| 84 shouldBe("testSwitch3(0)", "'cde'"); |
| 85 shouldBe("testSwitch3(3)", "'de'"); |
| 86 shouldBe("testSwitch3(4)", "'e'"); |
44 | 87 |
| 88 function testSwitch4(v) { |
| 89 var result = ""; |
| 90 switch (v) { |
| 91 case 0: |
| 92 result += 'a'; |
| 93 result += 'b'; |
| 94 break; |
| 95 } |
| 96 return result; |
| 97 }; |
45 | 98 |
46 if (typeof uneval == "undefined") | 99 shouldBe("testSwitch4(0)", "'ab'"); |
47 uneval = function(x) { return '(' + x.toString()+ ')'; } | |
48 | |
49 | |
50 uf1 = uneval(f1); | |
51 ueuf1 = uneval(eval(uneval(f1))); | |
52 | |
53 uf2 = uneval(f2); | |
54 ueuf2 = uneval(eval(uneval(f2))); | |
55 | |
56 uf3 = uneval(f3); | |
57 ueuf3 = uneval(eval(uneval(f3))); | |
58 | |
59 uf4 = uneval(f4); | |
60 ueuf4 = uneval(eval(uneval(f4))); | |
61 | |
62 | |
63 | |
64 shouldBe("ueuf1", "uf1"); | |
65 shouldBe("ueuf2", "uf2"); | |
66 shouldBe("ueuf3", "uf3"); | |
67 shouldBe("ueuf4", "uf4"); | |
OLD | NEW |