From 7bcd42e7be02acec39a2af95c1048f52c1226bf9 Mon Sep 17 00:00:00 2001 From: Kara Erickson Date: Thu, 22 Aug 2019 16:14:18 -0700 Subject: [PATCH] refactor(core): remove cookie and comment testing utilities from DomAdapters (#32278) PR Close #32278 --- packages/core/test/linker/integration_spec.ts | 4 ++-- .../linker/ng_container_integration_spec.ts | 15 +++++++------ .../http/test/backends/xhr_backend_spec.ts | 7 +++--- .../src/browser/browser_adapter.ts | 7 ------ .../platform-browser/src/dom/dom_adapter.ts | 3 +-- .../test/browser/browser_adapter_spec.ts | 22 ------------------- .../testing/src/browser_util.ts | 14 ++++++++++-- .../platform-browser/testing/src/matchers.ts | 3 ++- .../platform-server/src/domino_adapter.ts | 4 ---- .../src/web_workers/worker/worker_adapter.ts | 2 -- 10 files changed, 29 insertions(+), 52 deletions(-) delete mode 100644 packages/platform-browser/test/browser/browser_adapter_spec.ts diff --git a/packages/core/test/linker/integration_spec.ts b/packages/core/test/linker/integration_spec.ts index 67f30b574d..ed47037bad 100644 --- a/packages/core/test/linker/integration_spec.ts +++ b/packages/core/test/linker/integration_spec.ts @@ -19,7 +19,7 @@ import {EmbeddedViewRef} from '@angular/core/src/linker/view_ref'; import {Attribute, Component, ContentChildren, Directive, HostBinding, HostListener, Input, Output, Pipe} from '@angular/core/src/metadata'; import {TestBed, async, fakeAsync, getTestBed, tick} from '@angular/core/testing'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; -import {dispatchEvent, el} from '@angular/platform-browser/testing/src/browser_util'; +import {dispatchEvent, el, isCommentNode} from '@angular/platform-browser/testing/src/browser_util'; import {expect} from '@angular/platform-browser/testing/src/matchers'; import {modifiedInIvy, obsoleteInIvy, onlyInIvy} from '@angular/private/testing'; @@ -430,7 +430,7 @@ function declareTests(config?: {useJit: boolean}) { const childNodesOfWrapper = getDOM().childNodes(fixture.nativeElement); expect(childNodesOfWrapper.length).toBe(1); - expect(getDOM().isCommentNode(childNodesOfWrapper[0])).toBe(true); + expect(isCommentNode(childNodesOfWrapper[0])).toBe(true); }); it('should allow to transplant TemplateRefs into other ViewContainers', () => { diff --git a/packages/core/test/linker/ng_container_integration_spec.ts b/packages/core/test/linker/ng_container_integration_spec.ts index a42797003c..2491c1b779 100644 --- a/packages/core/test/linker/ng_container_integration_spec.ts +++ b/packages/core/test/linker/ng_container_integration_spec.ts @@ -10,6 +10,7 @@ import {AfterContentInit, AfterViewInit, Component, ContentChildren, Directive, Input, QueryList, ViewChildren, ɵivyEnabled as ivyEnabled} from '@angular/core'; import {TestBed} from '@angular/core/testing'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; +import {isCommentNode} from '@angular/platform-browser/testing/src/browser_util'; import {expect} from '@angular/platform-browser/testing/src/matchers'; import {modifiedInIvy} from '@angular/private/testing'; @@ -58,7 +59,7 @@ function declareTests(config?: {useJit: boolean}) { const el = fixture.nativeElement; const children = getDOM().childNodes(el); expect(children.length).toBe(2); - expect(getDOM().isCommentNode(children[0])).toBe(true); + expect(isCommentNode(children[0])).toBe(true); expect(getDOM().tagName(children[1]).toUpperCase()).toEqual('P'); }); @@ -74,10 +75,10 @@ function declareTests(config?: {useJit: boolean}) { const el = fixture.nativeElement; const children = getDOM().childNodes(el); expect(children.length).toBe(5); - expect(getDOM().isCommentNode(children[0])).toBe(true); + expect(isCommentNode(children[0])).toBe(true); expect(children[1]).toHaveText('1'); - expect(getDOM().isCommentNode(children[2])).toBe(true); - expect(getDOM().isCommentNode(children[3])).toBe(true); + expect(isCommentNode(children[2])).toBe(true); + expect(isCommentNode(children[3])).toBe(true); expect(children[4]).toHaveText('2'); }); @@ -95,9 +96,9 @@ function declareTests(config?: {useJit: boolean}) { expect(children.length).toBe(4); // ngIf anchor - expect(getDOM().isCommentNode(children[0])).toBe(true); + expect(isCommentNode(children[0])).toBe(true); // ng-container anchor - expect(getDOM().isCommentNode(children[1])).toBe(true); + expect(isCommentNode(children[1])).toBe(true); expect(getDOM().tagName(children[2]).toUpperCase()).toEqual('P'); expect(getDOM().tagName(children[3]).toUpperCase()).toEqual('B'); @@ -105,7 +106,7 @@ function declareTests(config?: {useJit: boolean}) { fixture.detectChanges(); expect(children.length).toBe(1); - expect(getDOM().isCommentNode(children[0])).toBe(true); + expect(isCommentNode(children[0])).toBe(true); }); it('should work with static content projection', () => { diff --git a/packages/http/test/backends/xhr_backend_spec.ts b/packages/http/test/backends/xhr_backend_spec.ts index 83872ff412..2e7d60ba76 100644 --- a/packages/http/test/backends/xhr_backend_spec.ts +++ b/packages/http/test/backends/xhr_backend_spec.ts @@ -19,6 +19,7 @@ import {Request} from '@angular/http/src/static_request'; import {Response} from '@angular/http/src/static_response'; import {URLSearchParams} from '@angular/http/src/url_search_params'; import {ɵgetDOM as getDOM} from '@angular/platform-browser'; +import {setCookie} from '@angular/platform-browser/testing/src/browser_util'; let abortSpy: any; let sendSpy: any; @@ -125,12 +126,12 @@ class MockBrowserXHR extends BrowserXhr { if (getDOM().supportsCookies()) { describe('XSRF support', () => { it('sets an XSRF header by default', () => { - getDOM().setCookie('XSRF-TOKEN', 'magic XSRF value'); + setCookie('XSRF-TOKEN', 'magic XSRF value'); backend.createConnection(sampleRequest); expect(sampleRequest.headers.get('X-XSRF-TOKEN')).toBe('magic XSRF value'); }); it('should allow overwriting of existing headers', () => { - getDOM().setCookie('XSRF-TOKEN', 'magic XSRF value'); + setCookie('XSRF-TOKEN', 'magic XSRF value'); sampleRequest.headers.set('X-XSRF-TOKEN', 'already set'); backend.createConnection(sampleRequest); expect(sampleRequest.headers.get('X-XSRF-TOKEN')).toBe('magic XSRF value'); @@ -143,7 +144,7 @@ class MockBrowserXHR extends BrowserXhr { }]); it('uses the configured names', () => { - getDOM().setCookie('my cookie', 'XSRF value'); + setCookie('my cookie', 'XSRF value'); backend.createConnection(sampleRequest); expect(sampleRequest.headers.get('X-MY-HEADER')).toBe('XSRF value'); }); diff --git a/packages/platform-browser/src/browser/browser_adapter.ts b/packages/platform-browser/src/browser/browser_adapter.ts index b2ec2c9f9f..9fdbdc90b6 100644 --- a/packages/platform-browser/src/browser/browser_adapter.ts +++ b/packages/platform-browser/src/browser/browser_adapter.ts @@ -300,7 +300,6 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter { return this.isElementNode(el) && el.nodeName === 'TEMPLATE'; } isTextNode(node: Node): boolean { return node.nodeType === Node.TEXT_NODE; } - isCommentNode(node: Node): boolean { return node.nodeType === Node.COMMENT_NODE; } isElementNode(node: Node): boolean { return node.nodeType === Node.ELEMENT_NODE; } hasShadowRoot(node: any): boolean { return node.shadowRoot != null && node instanceof HTMLElement; @@ -371,12 +370,6 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter { supportsCookies(): boolean { return true; } getCookie(name: string): string|null { return parseCookieValue(document.cookie, name); } - - setCookie(name: string, value: string) { - // document.cookie is magical, assigning into it assigns/overrides one cookie value, but does - // not clear other cookies. - document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value); - } } let baseElement: HTMLElement|null = null; diff --git a/packages/platform-browser/src/dom/dom_adapter.ts b/packages/platform-browser/src/dom/dom_adapter.ts index e917c5ef56..32025139e9 100644 --- a/packages/platform-browser/src/dom/dom_adapter.ts +++ b/packages/platform-browser/src/dom/dom_adapter.ts @@ -128,7 +128,6 @@ export abstract class DomAdapter { abstract elementMatches(n: any, selector: string): boolean; abstract isTemplateElement(el: any): boolean; abstract isTextNode(node: any): boolean; - abstract isCommentNode(node: any): boolean; abstract isElementNode(node: any): boolean; abstract hasShadowRoot(node: any): boolean; abstract isShadowRoot(node: any): boolean; @@ -153,7 +152,7 @@ export abstract class DomAdapter { abstract getTransitionEnd(): string; abstract supportsAnimation(): boolean; + // Used by CookieXSRFStrategy abstract supportsCookies(): boolean; abstract getCookie(name: string): string|null; - abstract setCookie(name: string, value: string): any; } diff --git a/packages/platform-browser/test/browser/browser_adapter_spec.ts b/packages/platform-browser/test/browser/browser_adapter_spec.ts deleted file mode 100644 index 77538fd766..0000000000 --- a/packages/platform-browser/test/browser/browser_adapter_spec.ts +++ /dev/null @@ -1,22 +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 {describe, expect, it} from '@angular/core/testing/src/testing_internal'; -import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; - - -{ - describe('cookies', () => { - if (isNode) return; - it('sets cookie values', () => { - getDOM().setCookie('my test cookie', 'my test value'); - getDOM().setCookie('my other cookie', 'my test value 2'); - expect(getDOM().getCookie('my test cookie')).toBe('my test value'); - }); - }); -} diff --git a/packages/platform-browser/testing/src/browser_util.ts b/packages/platform-browser/testing/src/browser_util.ts index cb4b61bcd8..caafaab84b 100644 --- a/packages/platform-browser/testing/src/browser_util.ts +++ b/packages/platform-browser/testing/src/browser_util.ts @@ -157,8 +157,8 @@ export function stringifyElement(el: any /** TODO #9100 */): string { if (_selfClosingTags.indexOf(tagName) == -1) { result += ``; } - } else if (getDOM().isCommentNode(el)) { - result += ``; + } else if (isCommentNode(el)) { + result += ``; } else { result += getDOM().getText(el); } @@ -169,3 +169,13 @@ export function stringifyElement(el: any /** TODO #9100 */): string { export function createNgZone(): NgZone { return new NgZone({enableLongStackTrace: true}); } + +export function isCommentNode(node: Node): boolean { + return node.nodeType === Node.COMMENT_NODE; +} + +export function setCookie(name: string, value: string) { + // document.cookie is magical, assigning into it assigns/overrides one cookie value, but does + // not clear other cookies. + document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value); +} diff --git a/packages/platform-browser/testing/src/matchers.ts b/packages/platform-browser/testing/src/matchers.ts index 65158ffa22..538a3147ac 100644 --- a/packages/platform-browser/testing/src/matchers.ts +++ b/packages/platform-browser/testing/src/matchers.ts @@ -10,6 +10,7 @@ import {Type, ɵglobal as global} from '@angular/core'; import {ComponentFixture} from '@angular/core/testing'; import {By, ɵgetDOM as getDOM} from '@angular/platform-browser'; +import {isCommentNode} from '@angular/platform-browser/testing/src/browser_util'; @@ -285,7 +286,7 @@ function elementText(n: any): string { return n.map(elementText).join(''); } - if (getDOM().isCommentNode(n)) { + if (isCommentNode(n)) { return ''; } diff --git a/packages/platform-server/src/domino_adapter.ts b/packages/platform-server/src/domino_adapter.ts index 5144532d83..cd4738bc56 100644 --- a/packages/platform-server/src/domino_adapter.ts +++ b/packages/platform-server/src/domino_adapter.ts @@ -88,9 +88,6 @@ export class DominoAdapter extends BrowserDomAdapter { getShadowRoot(el: any): DocumentFragment { return el.shadowRoot; } isTextNode(node: any): boolean { return node.nodeType === DominoAdapter.defaultDoc.TEXT_NODE; } - isCommentNode(node: any): boolean { - return node.nodeType === DominoAdapter.defaultDoc.COMMENT_NODE; - } isElementNode(node: any): boolean { return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false; } @@ -220,5 +217,4 @@ export class DominoAdapter extends BrowserDomAdapter { supportsCookies(): boolean { return false; } getCookie(name: string): string { throw _notImplemented('getCookie'); } - setCookie(name: string, value: string) { throw _notImplemented('setCookie'); } } diff --git a/packages/platform-webworker/src/web_workers/worker/worker_adapter.ts b/packages/platform-webworker/src/web_workers/worker/worker_adapter.ts index 58ecba433f..166d4dfa38 100644 --- a/packages/platform-webworker/src/web_workers/worker/worker_adapter.ts +++ b/packages/platform-webworker/src/web_workers/worker/worker_adapter.ts @@ -132,7 +132,6 @@ export class WorkerDomAdapter extends DomAdapter { elementMatches(n: any, selector: string): boolean { throw 'not implemented'; } isTemplateElement(el: any): boolean { throw 'not implemented'; } isTextNode(node: any): boolean { throw 'not implemented'; } - isCommentNode(node: any): boolean { throw 'not implemented'; } isElementNode(node: any): boolean { throw 'not implemented'; } hasShadowRoot(node: any): boolean { throw 'not implemented'; } isShadowRoot(node: any): boolean { throw 'not implemented'; } @@ -159,5 +158,4 @@ export class WorkerDomAdapter extends DomAdapter { supportsCookies(): boolean { return false; } getCookie(name: string): string { throw 'not implemented'; } - setCookie(name: string, value: string) { throw 'not implemented'; } }