Home | History | Annotate | Download | only in Statements
      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