text: /* eslint-env mocha */
  const assert = require("assert");
  const {
    makePromiseResolveWith3,
    makePromiseRejectWithBoo,
    makePromiseWithConstructor,
    makeDelayPromise,
  } = require("./answers");
  
  describe("Promise.resolve: (val:T) => Promise<T>", () => {
    describe("#makePromiseResolveWith3:() => Promise<number>", () => {
      it("creates a resolving promise", () => {
        return makePromiseResolveWith3().then((val) => {
          assert.equal(val, 3);
        });
      });
    });
  });
  
  describe("Promise.reject: (err:T) => Promise<,T>", () => {
    describe("#makePromiseRejectWithBoo:() => Promise<,string>", () => {
      it("creates a rejecting promise", () => {
        return makePromiseRejectWithBoo().then(
          () => {
            assert.fail("This promise should have rejected, not resolved");
          },
          (err) => {
            assert.equal(err, "Boo!");
          }
        );
      });
    });
  });
  
  describe('Promise constructor "new Promise((resolve, reject) => void) => Promise', () => {
    describe("#makePromiseWithConstructor: (boolean) => Promise<undefined,undefined>", () => {
      it("creates a promise that will resolve", () => {
        return makePromiseWithConstructor(true);
      });
      it("creates a promise that will reject", () => {
        return makePromiseWithConstructor(false).then(
          () => {
            assert.fail("This should have failed.");
          },
          () => {}
        );
      });
    });
    describe("#makeDelayPromise: (A, number) => Promise<A>", () => {
      it("returns a promise that resolves with the value", () => {
        const start = new Date();
        return makeDelayPromise("Hello", 0).then((val) => {
          assert.equal(val, "Hello");
          assert(new Date() - start < 50, "Took too long");
        });
      });
      it("returns a promise that resolves after a delay", () => {
        const start = new Date();
        return makeDelayPromise("World", 1000).then((val) => {
          assert.equal(val, "World");
          const diff = new Date() - start;
          assert(diff >= 1000, "Happened too early");
          assert(diff < 1050, "Took too long");
        });
      });
    });
  });
  