summaryrefslogtreecommitdiffstats
path: root/js/src/tests/js1_7/geniter/regress-349331.js
blob: 091fbb1f0e156e460995412eabb719154d242041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// |reftest| skip -- obsolete test
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

//-----------------------------------------------------------------------------
var BUGNUMBER = 349331;
var summary = 'generator.close without GeneratorExit';
var actual = '';
var expect = '';


//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------

function test()
{
  enterFunc ('test');
  printBugNumber(BUGNUMBER);
  printStatus (summary);
 
  var catch1, catch2, catch3, finally1, finally2, finally3;
  var iter;

  function gen()
  {
    yield 1;
    try {
      try {
        try {
          yield 1;
        } catch (e) {
          catch1 = true;
        } finally {
          finally1 = true;
        }
      } catch (e) {
        catch2 = true;
      } finally {
        finally2 = true;
      }
    } catch (e) {
      catch3 = true;
    } finally {
      finally3 = true;
    }
  }

// test explicit close call
  catch1 = catch2 = catch3 = finally1 = finally2 = finally3 = false;
  iter = gen();
  iter.next();
  iter.next();
  iter.close();

  var passed = !catch1 && !catch2 && !catch3 && finally1 && finally2 &&
    finally3;

  if (!passed) {
    print("Failed!");
    print("catch1=" + catch1 + " catch2=" + catch2 + " catch3=" +
	  catch3);
    print("finally1=" + finally1 + " finally2=" + finally2 +
	  " finally3=" + finally3);
  }

  reportCompare(true, passed, 'test explicit close call');

// test GC-invoked close
  catch1 = catch2 = catch3 = finally1 = finally2 = finally3 = false;
  iter = gen();
  iter.next();
  iter.next();
  iter = null;
  gc();
  gc();

  var passed = !catch1 && !catch2 && !catch3 && finally1 && finally2 &&
    finally3;

  if (!passed) {
    print("Failed!");
    print("catch1=" + catch1 + " catch2=" + catch2 + " catch3=" +
	  catch3);
    print("finally1=" + finally1 + " finally2=" + finally2 +
	  " finally3="+finally3);
  }
  reportCompare(true, passed, 'test GC-invoke close');

  reportCompare(expect, actual, summary);

  exitFunc ('test');
}