From e1c6fd5453bfb3f55863be07ded82376f86b7e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=A1ko=20Hevery?= Date: Wed, 25 Jul 2018 10:19:44 -0700 Subject: [PATCH] Revert "feat(core): add support for using async/await with Jasmine" (#25096) This reverts commit f6829aba55e07609e312b4f67dbc9dbbf36e4e46. PR Close #25096 --- .../test/metadata/resource_loading_spec.ts | 120 +++++++++--------- .../test/testability/jasmine_await_spec.ts | 31 ----- packages/core/testing/src/jasmine_await.ts | 34 ----- packages/core/testing/src/testing.ts | 1 - tools/public_api_guard/core/testing.d.ts | 5 - 5 files changed, 59 insertions(+), 132 deletions(-) delete mode 100644 packages/core/test/testability/jasmine_await_spec.ts delete mode 100644 packages/core/testing/src/jasmine_await.ts diff --git a/packages/core/test/metadata/resource_loading_spec.ts b/packages/core/test/metadata/resource_loading_spec.ts index 5ee74007ce..2c15e02a90 100644 --- a/packages/core/test/metadata/resource_loading_spec.ts +++ b/packages/core/test/metadata/resource_loading_spec.ts @@ -6,8 +6,6 @@ * found in the LICENSE file at https://angular.io/license */ -import {jasmineAwait} from '@angular/core/testing'; - import {Component} from '../../src/core'; import {clearResolutionOfComponentResourcesQueue, resolveComponentResources} from '../../src/metadata/resource_loading'; import {ComponentType} from '../../src/render3/interfaces/definition'; @@ -60,59 +58,59 @@ Did you run and wait for 'resolveComponentResources()'?`.trim()); } beforeEach(() => resourceFetchCount = 0); - it('should resolve template', jasmineAwait(async() => { - const MyComponent: ComponentType = (class MyComponent{}) as any; - const metadata: Component = {templateUrl: 'test://content'}; - compileComponent(MyComponent, metadata); - await resolveComponentResources(testResolver); - expect(MyComponent.ngComponentDef).toBeDefined(); - expect(metadata.templateUrl).toBe(undefined); - expect(metadata.template).toBe('content'); - expect(resourceFetchCount).toBe(1); - })); + it('should resolve template', async() => { + const MyComponent: ComponentType = (class MyComponent{}) as any; + const metadata: Component = {templateUrl: 'test://content'}; + compileComponent(MyComponent, metadata); + await resolveComponentResources(testResolver); + expect(MyComponent.ngComponentDef).toBeDefined(); + expect(metadata.templateUrl).toBe(undefined); + expect(metadata.template).toBe('content'); + expect(resourceFetchCount).toBe(1); + }); - it('should resolve styleUrls', jasmineAwait(async() => { - const MyComponent: ComponentType = (class MyComponent{}) as any; - const metadata: Component = {template: '', styleUrls: ['test://style1', 'test://style2']}; - compileComponent(MyComponent, metadata); - await resolveComponentResources(testResolver); - expect(MyComponent.ngComponentDef).toBeDefined(); - expect(metadata.styleUrls).toBe(undefined); - expect(metadata.styles).toEqual(['style1', 'style2']); - expect(resourceFetchCount).toBe(2); - })); + it('should resolve styleUrls', async() => { + const MyComponent: ComponentType = (class MyComponent{}) as any; + const metadata: Component = {template: '', styleUrls: ['test://style1', 'test://style2']}; + compileComponent(MyComponent, metadata); + await resolveComponentResources(testResolver); + expect(MyComponent.ngComponentDef).toBeDefined(); + expect(metadata.styleUrls).toBe(undefined); + expect(metadata.styles).toEqual(['style1', 'style2']); + expect(resourceFetchCount).toBe(2); + }); - it('should cache multiple resolution to same URL', jasmineAwait(async() => { - const MyComponent: ComponentType = (class MyComponent{}) as any; - const metadata: Component = {template: '', styleUrls: ['test://style1', 'test://style1']}; - compileComponent(MyComponent, metadata); - await resolveComponentResources(testResolver); - expect(MyComponent.ngComponentDef).toBeDefined(); - expect(metadata.styleUrls).toBe(undefined); - expect(metadata.styles).toEqual(['style1', 'style1']); - expect(resourceFetchCount).toBe(1); - })); + it('should cache multiple resolution to same URL', async() => { + const MyComponent: ComponentType = (class MyComponent{}) as any; + const metadata: Component = {template: '', styleUrls: ['test://style1', 'test://style1']}; + compileComponent(MyComponent, metadata); + await resolveComponentResources(testResolver); + expect(MyComponent.ngComponentDef).toBeDefined(); + expect(metadata.styleUrls).toBe(undefined); + expect(metadata.styles).toEqual(['style1', 'style1']); + expect(resourceFetchCount).toBe(1); + }); - it('should keep order even if the resolution is out of order', jasmineAwait(async() => { - const MyComponent: ComponentType = (class MyComponent{}) as any; - const metadata: Component = { - template: '', - styles: ['existing'], - styleUrls: ['test://style1', 'test://style2'] - }; - compileComponent(MyComponent, metadata); - const resolvers: any[] = []; - const resolved = resolveComponentResources( - (url) => new Promise((resolve, response) => resolvers.push(url, resolve))); - // Out of order resolution - expect(resolvers[0]).toEqual('test://style1'); - expect(resolvers[2]).toEqual('test://style2'); - resolvers[3]('second'); - resolvers[1]('first'); - await resolved; - expect(metadata.styleUrls).toBe(undefined); - expect(metadata.styles).toEqual(['existing', 'first', 'second']); - })); + it('should keep order even if the resolution is out of order', async() => { + const MyComponent: ComponentType = (class MyComponent{}) as any; + const metadata: Component = { + template: '', + styles: ['existing'], + styleUrls: ['test://style1', 'test://style2'] + }; + compileComponent(MyComponent, metadata); + const resolvers: any[] = []; + const resolved = resolveComponentResources( + (url) => new Promise((resolve, response) => resolvers.push(url, resolve))); + // Out of order resolution + expect(resolvers[0]).toEqual('test://style1'); + expect(resolvers[2]).toEqual('test://style2'); + resolvers[3]('second'); + resolvers[1]('first'); + await resolved; + expect(metadata.styleUrls).toBe(undefined); + expect(metadata.styles).toEqual(['existing', 'first', 'second']); + }); }); @@ -123,14 +121,14 @@ Did you run and wait for 'resolveComponentResources()'?`.trim()); } as any as Response); } - it('should work with fetch', jasmineAwait(async() => { - const MyComponent: ComponentType = (class MyComponent{}) as any; - const metadata: Component = {templateUrl: 'test://content'}; - compileComponent(MyComponent, metadata); - await resolveComponentResources(fetch); - expect(MyComponent.ngComponentDef).toBeDefined(); - expect(metadata.templateUrl).toBe(undefined); - expect(metadata.template).toBe('response for test://content'); - })); + it('should work with fetch', async() => { + const MyComponent: ComponentType = (class MyComponent{}) as any; + const metadata: Component = {templateUrl: 'test://content'}; + compileComponent(MyComponent, metadata); + await resolveComponentResources(fetch); + expect(MyComponent.ngComponentDef).toBeDefined(); + expect(metadata.templateUrl).toBe(undefined); + expect(metadata.template).toBe('response for test://content'); + }); }); }); diff --git a/packages/core/test/testability/jasmine_await_spec.ts b/packages/core/test/testability/jasmine_await_spec.ts deleted file mode 100644 index e4da8fb785..0000000000 --- a/packages/core/test/testability/jasmine_await_spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -import {jasmineAwait} from '../../testing'; - - -describe('await', () => { - let pass: boolean; - beforeEach(() => pass = false); - afterEach(() => expect(pass).toBe(true)); - - it('should convert passes', jasmineAwait(async() => { pass = await Promise.resolve(true); })); - - it('should convert failures', (done) => { - const error = new Error(); - const fakeDone: DoneFn = function() { fail('passed, but should have failed'); } as any; - fakeDone.fail = function(value: any) { - expect(value).toBe(error); - done(); - }; - jasmineAwait(async() => { - pass = await Promise.resolve(true); - throw error; - })(fakeDone); - }); -}); \ No newline at end of file diff --git a/packages/core/testing/src/jasmine_await.ts b/packages/core/testing/src/jasmine_await.ts deleted file mode 100644 index a863e62149..0000000000 --- a/packages/core/testing/src/jasmine_await.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - -/** - * Converts an `async` function, with `await`, into a function which is compatible with Jasmine test - * framework. - * - * For asynchronous function blocks, Jasmine expects `it` (and friends) to take a function which - * takes a `done` callback. (Jasmine does not understand functions which return `Promise`.) The - * `jasmineAwait()` wrapper converts the test function returning `Promise` into a function which - * Jasmine understands. - * - * - * Example: - * ``` - * it('...', jasmineAwait(async() => { - * doSomething(); - * await asyncFn(); - * doSomethingAfter(); - * })); - * ``` - * - */ -export function jasmineAwait(fn: () => Promise): - (done: {(): void; fail: (message?: Error | string) => void;}) => void { - return function(done: {(): void; fail: (message?: Error | string) => void;}) { - fn().then(done, done.fail); - }; -} diff --git a/packages/core/testing/src/testing.ts b/packages/core/testing/src/testing.ts index c1ea067aa3..d2d9476c80 100644 --- a/packages/core/testing/src/testing.ts +++ b/packages/core/testing/src/testing.ts @@ -13,7 +13,6 @@ */ export * from './async'; -export * from './jasmine_await'; export * from './component_fixture'; export * from './fake_async'; export * from './test_bed'; diff --git a/tools/public_api_guard/core/testing.d.ts b/tools/public_api_guard/core/testing.d.ts index ce962ef4bb..f7676a5f27 100644 --- a/tools/public_api_guard/core/testing.d.ts +++ b/tools/public_api_guard/core/testing.d.ts @@ -53,11 +53,6 @@ export declare class InjectSetupWrapper { inject(tokens: any[], fn: Function): () => any; } -export declare function jasmineAwait(fn: () => Promise): (done: { - (): void; - fail: (message?: Error | string) => void; -}) => void; - /** @experimental */ export declare type MetadataOverride = { add?: Partial;