1/**
2 *  File Name:          dowhile-006
3 *  ECMA Section:
4 *  Description:        do...while statements
5 *
6 *  A general do...while test.
7 *
8 *  Author:             christine@netscape.com
9 *  Date:               26 August 1998
10 */
11    var SECTION = "dowhile-006";
12    var VERSION = "ECMA_2";
13    var TITLE   = "do...while";
14
15    startTest();
16    writeHeaderToLog( SECTION + " "+ TITLE);
17
18    var tc = 0;
19    var testcases = new Array();
20
21    DoWhile( new DoWhileObject( false, false, 10 ) );
22    DoWhile( new DoWhileObject( true, false, 2 ) );
23    DoWhile( new DoWhileObject( false, true, 3 ) );
24    DoWhile( new DoWhileObject( true, true, 4 ) );
25
26    test();
27
28function looping( object ) {
29    object.iterations--;
30
31    if ( object.iterations <= 0 ) {
32        return false;
33    } else {
34        return true;
35    }
36}
37function DoWhileObject( breakOut, breakIn, iterations, loops ) {
38    this.iterations = iterations;
39    this.loops = loops;
40    this.breakOut = breakOut;
41    this.breakIn  = breakIn;
42    this.looping  = looping;
43}
44function DoWhile( object ) {
45    var result1 = false;
46    var result2 = false;
47
48    outie: {
49        innie: {
50            do {
51                if ( object.breakOut )
52                    break outie;
53
54                if ( object.breakIn )
55                    break innie;
56
57            } while ( looping(object) );
58
59            //  statements should be executed if:
60            //  do...while exits normally
61            //  do...while exits abruptly with no label
62
63            result1 = true;
64
65        }
66
67        //  statements should be executed if:
68        //  do...while breaks out with label "innie"
69        //  do...while exits normally
70        //  do...while does not break out with "outie"
71
72        result2 = true;
73    }
74
75    testcases[tc++] = new TestCase(
76        SECTION,
77        "hit code after loop in inner loop",
78        ( object.breakIn || object.breakOut ) ? false : true ,
79        result1 );
80
81    testcases[tc++] = new TestCase(
82        SECTION,
83        "hit code after loop in outer loop",
84        ( object.breakOut ) ? false : true,
85        result2 );
86}
87