summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/resources/examples/apisample10.html
blob: 69810fe16cf6bfb5ea169f49986738f08d11dc26 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!DOCTYPE HTML>
<html>
<head>
<title>Async Tests and Promises</title>
</head>
<body>
<h1>Async Tests and Promises</h1>
<p>This test assumes ECMAScript 6 Promise support. Some failures are expected.</p>
<div id="log"></div>
<script src="../testharness.js"></script>
<script src="../testharnessreport.js"></script>
<script>

test(function() {
  var p = new Promise(function(resolve, reject) {});
  assert_true('then' in p);
  assert_equals(typeof Promise.resolve, 'function');
  assert_equals(typeof Promise.reject, 'function');
}, "Promises are supported in your browser");

(function() {
  var t = async_test("Promise resolution");
  t.step(function() {
    Promise.resolve('x').then(
      t.step_func(function(value) {
        assert_equals(value, 'x');
        t.done();
      }),
      t.unreached_func('Promise should not reject')
    );
  });
}());

(function() {
  var t = async_test("Promise rejection");
  t.step(function() {
    Promise.reject(Error('fail')).then(
      t.unreached_func('Promise should reject'),
      t.step_func(function(reason) {
        assert_true(reason instanceof Error);
        assert_equals(reason.message, 'fail');
        t.done();
      })
    );
  });
}());

(function() {
  var t = async_test("Promises resolution chaining");
  t.step(function() {
    var resolutions = [];
    Promise.resolve('a').then(
      t.step_func(function(value) {
        resolutions.push(value);
        return 'b';
      })
    ).then(
      t.step_func(function(value) {
        resolutions.push(value);
        return 'c';
      })
    ).then(
      t.step_func(function(value) {
        resolutions.push(value);

        assert_array_equals(resolutions, ['a', 'b', 'c']);
        t.done();
      })
    ).catch(
      t.unreached_func('promise should not have rejected')
    );
  });
}());

(function() {
  var t = async_test("Use of step_func with Promises");
  t.step(function() {
    var resolutions = [];
    Promise.resolve('x').then(
      t.step_func_done(),
      t.unreached_func('Promise should not have rejected')
    );
  });
}());

(function() {
  var t = async_test("Promises and test assertion failures (should fail)");
  t.step(function() {
    var resolutions = [];
    Promise.resolve('x').then(
      t.step_func(function(value) {
        assert_true(false, 'This failure is expected');
      })
    ).then(
      t.unreached_func('Promise should not have resolved')
    ).catch(
      t.unreached_func('Promise should not have rejected')
    );
  });
}());

(function() {
  var t = async_test("Use of unreached_func with Promises (should fail)");
  t.step(function() {
    var resolutions = [];
    var r;
    var p = new Promise(function(resolve, reject) {
      // Reject instead of resolve, to demonstrate failure.
      reject(123);
    });
    p.then(
      function(value) {
        assert_equals(value, 123, 'This should not actually happen');
      },
      t.unreached_func('This failure is expected')
    );
  });
}());
</script>