<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;

description('Test Promise.');

var thisInOnFulfilledSloppy;
var thisInOnRejectedSloppy;

var thisInOnFulfilledStrict;
var thisInOnRejectedStrict;

Promise.resolve().then(function () {
  return Promise.resolve(42).then(function () {
    testPassed('fulfilled');
    window.thisInOnFulfilledSloppy = this;
    shouldBe('thisInOnFulfilledSloppy', 'window');
  }, function () {
    testFailed('rejected');
  });
}).then(function () {
  return Promise.reject(42).then(function () {
    testFailed('fulfilled');
  }, function () {
    testPassed('rejected');
    window.thisInOnRejectedSloppy = this;
    shouldBe('thisInOnRejectedSloppy', 'window');
  });
}).then(function () {
  return Promise.resolve(42).then(function () {
    'use strict';
    testPassed('fulfilled');
    window.thisInOnFulfilledStrict = this;
    shouldBe('thisInOnFulfilledStrict', 'undefined');
  }, function () {
    'use strict';
    testFailed('rejected');
  });
}).then(function () {
  return Promise.reject(42).then(function () {
    'use strict';
    testFailed('fulfilled');
  }, function () {
    'use strict';
    testPassed('rejected');
    window.thisInOnRejectedStrict = this;
    shouldBe('thisInOnRejectedStrict', 'undefined');
  });
}).then(finishJSTest, finishJSTest);

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
