1 /** 2 * File Name: while-004 3 * ECMA Section: 4 * Description: while statement 5 * 6 * Author: christine (at) netscape.com 7 * Date: 11 August 1998 8 */ 9 var SECTION = "while-004"; 10 var VERSION = "ECMA_2"; 11 var TITLE = "while statement"; 12 var BUGNUMBER="316725"; 13 14 startTest(); 15 writeHeaderToLog( SECTION + " "+ TITLE); 16 17 var tc = 0; 18 var testcases = new Array(); 19 20 DoWhile_1(); 21 DoWhile_2(); 22 DoWhile_3(); 23 DoWhile_4(); 24 DoWhile_5(); 25 26 test(); 27 28 /** 29 * Break out of a while by calling return. 30 * 31 * Tests: 12.6.2 step 6. 32 */ 33 function dowhile() { 34 result = "pass"; 35 36 while (true) { 37 return result; 38 result = "fail: hit code after return statement"; 39 break; 40 } 41 } 42 43 function DoWhile_1() { 44 description = "return statement in a while block"; 45 46 result = dowhile(); 47 48 testcases[tc++] = new TestCase( 49 SECTION, 50 "DoWhile_1" + description, 51 "pass", 52 result ); 53 } 54 55 /** 56 * While with a labeled continue statement. Verify that statements 57 * after the continue statement are not evaluated. 58 * 59 * Tests: 12.6.2 step 8. 60 * 61 */ 62 function DoWhile_2() { 63 var description = "while with a labeled continue statement"; 64 var result1 = "pass"; 65 var result2 = "fail: did not execute code after loop, but inside label"; 66 var i = 0; 67 var j = 0; 68 69 theloop: 70 while( i++ < 10 ) { 71 j++; 72 continue theloop; 73 result1 = "failed: hit code after continue statement"; 74 } 75 result2 = "pass"; 76 77 testcases[tc++] = new TestCase( 78 SECTION, 79 "DoWhile_2: " +description + " - code inside the loop, before the continue should be executed ("+j+")", 80 true, 81 j == 10 ); 82 83 testcases[tc++] = new TestCase( 84 SECTION, 85 "DoWhile_2: " +description +" - code after labeled continue should not be executed", 86 "pass", 87 result1 ); 88 89 testcases[tc++] = new TestCase( 90 SECTION, 91 "DoWhile_2: " +description +" - code after loop but inside label should be executed", 92 "pass", 93 result2 ); 94 } 95 96 /** 97 * While with a labeled break. 98 * 99 */ 100 function DoWhile_3() { 101 var description = "while with a labeled break statement"; 102 var result1 = "pass"; 103 var result2 = "pass"; 104 var result3 = "fail: did not get to code after label"; 105 106 woohoo: { 107 while( true ) { 108 break woohoo; 109 result1 = "fail: got to code after a break"; 110 } 111 result2 = "fail: got to code outside of loop but inside label"; 112 } 113 114 result3 = "pass"; 115 116 testcases[tc++] = new TestCase( 117 SECTION, 118 "DoWhile_3: " +description +" - verify break out of loop", 119 "pass", 120 result1 ); 121 122 123 testcases[tc++] = new TestCase( 124 SECTION, 125 "DoWhile_3: " +description +" - verify break out of label", 126 "pass", 127 result2 ); 128 129 testcases[tc++] = new TestCase( 130 SECTION, 131 "DoWhile_3: " +description + " - verify correct exit from label", 132 "pass", 133 result3 ); 134 } 135 136 137 /** 138 * Labled while with an unlabeled break 139 * 140 */ 141 function DoWhile_4() { 142 var description = "labeled while with an unlabeled break"; 143 var result1 = "pass"; 144 var result2 = "pass"; 145 var result3 = "fail: did not evaluate statement after label"; 146 147 woohooboy: { 148 while( true ) { 149 break woohooboy; 150 result1 = "fail: got to code after the break"; 151 } 152 result2 = "fail: broke out of while, but not out of label"; 153 } 154 result3 = "pass"; 155 156 testcases[tc++] = new TestCase( 157 SECTION, 158 "DoWhile_4: " +description +" - verify break out of while loop", 159 "pass", 160 result1 ); 161 162 testcases[tc++] = new TestCase( 163 SECTION, 164 "DoWhile_4: " +description + " - verify break out of label", 165 "pass", 166 result2 ); 167 168 testcases[tc++] = new TestCase( 169 SECTION, 170 "DoWhile_4: " +description +" - verify that statements after label are evaluated", 171 "pass", 172 result3 ); 173 } 174 175 /** 176 * in this case, should behave the same way as 177 * 178 * 179 */ 180 function DoWhile_5() { 181 var description = "while with a labeled continue statement"; 182 var result1 = "pass"; 183 var result2 = "fail: did not execute code after loop, but inside label"; 184 var i = 0; 185 var j = 0; 186 187 theloop: { 188 j++; 189 while( i++ < 10 ) { 190 continue; 191 result1 = "failed: hit code after continue statement"; 192 } 193 result2 = "pass"; 194 } 195 196 testcases[tc++] = new TestCase( 197 SECTION, 198 "DoWhile_5: " +description + " - continue should not execute statements above the loop", 199 true, 200 ( j == 1 ) ); 201 202 testcases[tc++] = new TestCase( 203 SECTION, 204 "DoWhile_5: " +description +" - code after labeled continue should not be executed", 205 "pass", 206 result1 ); 207 208 testcases[tc++] = new TestCase( 209 SECTION, 210 "DoWhile_5: " +description +" - code after loop but inside label should be executed", 211 "pass", 212 result2 ); 213 } 214 215