function returnsPromise() {
  return Promise.resolve(true);
}

type Future = Promise<number>;
function aliasedPromise(): Future {
  return Promise.resolve(1);
}

class Extended extends Promise<number> {}
function extendedPromise(): Extended {
  return Promise.resolve(1);
}

class DoubleExtended extends Extended {}
function doubleExtendedPromise(): Extended {
  return Promise.resolve(1);
}

function maybePromise(): Promise<number>|number {
  return 3;
}

describe('example test', () => {
  it('should error when expecting promises toBeTruthy', async () => {
    const promise = returnsPromise();

    // Every expect here should fail the check.
    expect(promise).toBeTruthy();
    expect(maybePromise()).not.toBeTruthy();
    expect(maybePromise()).toBeTruthy();
    expect(returnsPromise()).toBeTruthy();
    expect(aliasedPromise()).toBeTruthy();
    expect(extendedPromise()).toBeTruthy();
    expect(doubleExtendedPromise()).toBeTruthy();
  });

  it('should allow awaited promises', async () => {
    const promise = returnsPromise();
    expect(await promise).toBeTruthy();
    expect(await maybePromise()).toBeTruthy();
    expect(await returnsPromise()).toBeTruthy();
    expect(await aliasedPromise()).toBeTruthy();
    expect(await extendedPromise()).toBeTruthy();
  });

  it('should only error for promises', async () => {
    expect('truthy').toBeTruthy();
    expect(1).toBeTruthy();
    expect(true).toBeTruthy();
    expect(null).not.toBeTruthy();
  });
});
