<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>

description("Promises - Test basic types / exceptions.");

// window.jsTestIsAsync = true;


// Promise
debug("");
debug("Promises");
debug("");

// Promises should be of type Promise.

var aPromise = new Promise(function(resolver) { resolver.resolve(1); });

debug("aPromise = new Promise(...)")
shouldBeType("aPromise", "Promise");
shouldBe("String(aPromise)", "'[object Promise]'");

shouldBeDefined("aPromise.then");
shouldBeType("aPromise.then", "Function");
shouldBe("aPromise.then.length", "0");
shouldBeDefined("aPromise.catch");
shouldBeType("aPromise.catch", "Function");
shouldBe("aPromise.catch.length", "0");


// Promise constructor
debug("");
debug("Promise constructor");
debug("");

// Need at least one parameter.
shouldBe("Promise.length", "1");
shouldThrow("new Promise()");

// Parameter must be a function.
shouldThrow("new Promise(1)", "'TypeError: Expected function as as first argument'");
shouldThrow("new Promise('hello')", "'TypeError: Expected function as as first argument'");
shouldThrow("new Promise([])", "'TypeError: Expected function as as first argument'");
shouldThrow("new Promise({})", "'TypeError: Expected function as as first argument'");
shouldThrow("new Promise(null)", "'TypeError: Expected function as as first argument'");
shouldThrow("new Promise(undefined)", "'TypeError: Expected function as as first argument'");
shouldNotThrow("new Promise(function(resolver) { resolver.resolve(1); })");

// Can't be called as a function
shouldThrow("Promise()");


// Promise statics
debug("");
debug("Promise statics");
debug("");


// Need at least one parameter.
shouldBeType("Promise.fulfill", "Function");
shouldBe("Promise.fulfill.length", "1");
shouldThrow("Promise.fulfill()", "'TypeError: Expected at least one argument'");
shouldNotThrow("Promise.fulfill(1)");

shouldBeType("Promise.resolve", "Function");
shouldBe("Promise.resolve.length", "1");
shouldThrow("Promise.resolve()", "'TypeError: Expected at least one argument'");
shouldNotThrow("Promise.resolve(1)");

shouldBeType("Promise.reject", "Function");
shouldBe("Promise.reject.length", "1");
shouldThrow("Promise.reject()", "'TypeError: Expected at least one argument'");
shouldNotThrow("Promise.reject(1)");

// Should return Promise objects.
shouldBeType("Promise.fulfill(1)", "Promise");
shouldBeType("Promise.resolve(1)", "Promise");
shouldBeType("Promise.reject(1)", "Promise");



// PromiseResolver
debug("");
debug("PromiseResolver");
debug("");

var aResolver;
var resolverFulfill;
var resolverResolve;
var resolverReject;

new Promise(function(r) {
    aResolver = r;

    // The resolver should be of type PromiseResolver.
    debug("aResolver is from new Promise(function(aResolver) { ... })")
    shouldBeType("aResolver", "PromiseResolver");
    shouldBe("String(aResolver)", "'[object PromiseResolver]'");
    shouldBeType("aResolver.fulfill", "Function");
    shouldBe("aResolver.fulfill.length", "1");
    shouldBeType("aResolver.resolve", "Function");
    shouldBe("aResolver.resolve.length", "1");
    shouldBeType("aResolver.reject", "Function");
    shouldBe("aResolver.reject.length", "1");

    // Resolvers functions must be called on the resolver.
    resolverFulfill = aResolver.fulfill;
    shouldThrow("resolverFulfill()", "'TypeError: Receiver of fulfill must be a PromiseResolver'");
    resolverResolve = aResolver.resolve;
    shouldThrow("resolverResolve()", "'TypeError: Receiver of resolve must be a PromiseResolver'");
    resolverReject = aResolver.reject;
    shouldThrow("resolverReject()", "'TypeError: Receiver of reject must be a PromiseResolver'");
});

debug("");
debug("PromiseResolver constructor");
debug("");

shouldThrow("new PromiseResolver()");

debug("");
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
