Skip to content

Commit 0c00e70

Browse files
crisbetojosephperrott
authored andcommitted
refactor(overlay): convert fullscreen overlay container e2e tests into unit tests (#13657)
1 parent e48a6a9 commit 0c00e70

File tree

8 files changed

+128
-121
lines changed

8 files changed

+128
-121
lines changed

.github/CODEOWNERS

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@
156156
/e2e/components/checkbox-e2e.spec.ts @jelbourn @devversion
157157
/e2e/components/dialog-e2e.spec.ts @jelbourn @crisbeto
158158
/e2e/components/expansion-e2e.spec.ts @josephperrott @jelbourn
159-
/e2e/components/fullscreen-e2e.spec.ts @jelbourn
160159
/e2e/components/grid-list-e2e.spec.ts @jelbourn
161160
/e2e/components/icon-e2e.spec.ts @jelbourn
162161
/e2e/components/input-e2e.spec.ts @mmalerba
@@ -178,7 +177,6 @@
178177
/src/e2e-app/checkbox/** @jelbourn @devversion
179178
/src/e2e-app/dialog/** @jelbourn @crisbeto
180179
/src/e2e-app/e2e-app/** @jelbourn
181-
/src/e2e-app/fullscreen/** @jelbourn
182180
/src/e2e-app/grid-list/** @jelbourn
183181
/src/e2e-app/icon/** @jelbourn
184182
/src/e2e-app/input/** @mmalerba

e2e/components/fullscreen-e2e.spec.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import {async, inject, TestBed} from '@angular/core/testing';
2+
import {Component, NgModule, ViewChild, ViewContainerRef} from '@angular/core';
3+
import {PortalModule, CdkPortal} from '@angular/cdk/portal';
4+
import {DOCUMENT} from '@angular/platform-browser';
5+
import {Overlay, OverlayContainer, OverlayModule, FullscreenOverlayContainer} from './index';
6+
7+
describe('FullscreenOverlayContainer', () => {
8+
let overlay: Overlay;
9+
let overlayContainer: FullscreenOverlayContainer;
10+
let fullscreenListeners: Set<Function>;
11+
let fakeDocument: any;
12+
13+
beforeEach(async(() => {
14+
fullscreenListeners = new Set();
15+
16+
TestBed.configureTestingModule({
17+
imports: [OverlayTestModule],
18+
providers: [{
19+
provide: DOCUMENT,
20+
useFactory: () => {
21+
// Provide a (very limited) stub for the document. This is the most practical solution for
22+
// now since we only hit a handful of Document APIs. If we end up having to add more
23+
// stubs here, we should reconsider whether to use a Proxy instead. Avoiding a proxy for
24+
// now since it isn't supported on IE. See:
25+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
26+
fakeDocument = {
27+
body: document.body,
28+
fullscreenElement: document.createElement('div'),
29+
fullscreenEnabled: true,
30+
addEventListener: function(eventName: string, listener: Function) {
31+
if (eventName === 'fullscreenchange') {
32+
fullscreenListeners.add(listener);
33+
} else {
34+
document.addEventListener.apply(document, arguments);
35+
}
36+
},
37+
removeEventListener: function(eventName: string, listener: Function) {
38+
if (eventName === 'fullscreenchange') {
39+
fullscreenListeners.delete(listener);
40+
} else {
41+
document.addEventListener.apply(document, arguments);
42+
}
43+
},
44+
querySelectorAll: function() {
45+
return document.querySelectorAll.apply(document, arguments);
46+
},
47+
createElement: function() {
48+
return document.createElement.apply(document, arguments);
49+
},
50+
};
51+
52+
return fakeDocument;
53+
}
54+
}]
55+
}).compileComponents();
56+
}));
57+
58+
beforeEach(inject([Overlay, OverlayContainer], (o: Overlay, oc: OverlayContainer) => {
59+
overlay = o;
60+
overlayContainer = oc as FullscreenOverlayContainer;
61+
}));
62+
63+
afterEach(() => {
64+
overlayContainer.ngOnDestroy();
65+
fakeDocument = null;
66+
});
67+
68+
it('should open an overlay inside a fullscreen element and move it to the body', () => {
69+
const fixture = TestBed.createComponent(TestComponentWithTemplatePortals);
70+
const overlayRef = overlay.create();
71+
const fullscreenElement = fakeDocument.fullscreenElement;
72+
73+
overlayRef.attach(fixture.componentInstance.templatePortal);
74+
fixture.detectChanges();
75+
76+
expect(fullscreenElement.contains(overlayRef.overlayElement)).toBe(true);
77+
78+
fakeDocument.fullscreenElement = null;
79+
fullscreenListeners.forEach(listener => listener());
80+
fixture.detectChanges();
81+
82+
expect(fullscreenElement.contains(overlayRef.overlayElement)).toBe(false);
83+
expect(document.body.contains(overlayRef.overlayElement)).toBe(true);
84+
});
85+
86+
it('should open an overlay inside the body and move it to a fullscreen element', () => {
87+
const fullscreenElement = fakeDocument.fullscreenElement;
88+
fakeDocument.fullscreenElement = null;
89+
90+
const fixture = TestBed.createComponent(TestComponentWithTemplatePortals);
91+
const overlayRef = overlay.create();
92+
93+
overlayRef.attach(fixture.componentInstance.templatePortal);
94+
fixture.detectChanges();
95+
96+
expect(fullscreenElement.contains(overlayRef.overlayElement)).toBe(false);
97+
expect(document.body.contains(overlayRef.overlayElement)).toBe(true);
98+
99+
fakeDocument.fullscreenElement = fullscreenElement;
100+
fullscreenListeners.forEach(listener => listener());
101+
fixture.detectChanges();
102+
103+
expect(fullscreenElement.contains(overlayRef.overlayElement)).toBe(true);
104+
});
105+
106+
});
107+
108+
/** Test-bed component that contains a TempatePortal and an ElementRef. */
109+
@Component({
110+
template: `<ng-template cdk-portal>Cake</ng-template>`,
111+
providers: [Overlay],
112+
})
113+
class TestComponentWithTemplatePortals {
114+
@ViewChild(CdkPortal) templatePortal: CdkPortal;
115+
116+
constructor(public viewContainerRef: ViewContainerRef) { }
117+
}
118+
119+
@NgModule({
120+
imports: [OverlayModule, PortalModule],
121+
declarations: [TestComponentWithTemplatePortals],
122+
providers: [{
123+
provide: OverlayContainer,
124+
useClass: FullscreenOverlayContainer
125+
}]
126+
})
127+
class OverlayTestModule { }

src/e2e-app/e2e-app-module.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {DialogModule} from '@angular/cdk-experimental/dialog';
22
import {DragDropModule} from '@angular/cdk/drag-drop';
33
import {ScrollingModule as ExperimentalScrollingModule} from '@angular/cdk-experimental/scrolling';
4-
import {FullscreenOverlayContainer, OverlayContainer} from '@angular/cdk/overlay';
54
import {ScrollingModule} from '@angular/cdk/scrolling';
65
import {NgModule} from '@angular/core';
76
import {ReactiveFormsModule} from '@angular/forms';
@@ -35,7 +34,6 @@ import {SimpleCheckboxes} from './checkbox/checkbox-e2e';
3534
import {DialogE2E, TestDialog} from './dialog/dialog-e2e';
3635
import {E2EApp, Home} from './e2e-app/e2e-app';
3736
import {E2E_APP_ROUTES} from './e2e-app/routes';
38-
import {FullscreenE2E, TestDialogFullScreen} from './fullscreen/fullscreen-e2e';
3937
import {GridListE2E} from './grid-list/grid-list-e2e';
4038
import {IconE2E} from './icon/icon-e2e';
4139
import {InputE2E} from './input/input-e2e';
@@ -93,7 +91,6 @@ export class E2eMaterialModule {}
9391
ButtonE2E,
9492
DialogE2E,
9593
E2EApp,
96-
FullscreenE2E,
9794
GridListE2E,
9895
Home,
9996
IconE2E,
@@ -106,14 +103,10 @@ export class E2eMaterialModule {}
106103
SimpleRadioButtons,
107104
SlideToggleE2E,
108105
TestDialog,
109-
TestDialogFullScreen,
110106
BlockScrollStrategyE2E,
111107
VirtualScrollE2E,
112108
],
113109
bootstrap: [E2EApp],
114-
providers: [
115-
{provide: OverlayContainer, useClass: FullscreenOverlayContainer}
116-
],
117-
entryComponents: [TestDialog, TestDialogFullScreen]
110+
entryComponents: [TestDialog]
118111
})
119112
export class E2eAppModule { }

src/e2e-app/e2e-app/e2e-app.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<a mat-list-item [routerLink]="['checkbox']">Checkbox</a>
88
<a mat-list-item [routerLink]="['dialog']">Dialog</a>
99
<a mat-list-item [routerLink]="['expansion']">Expansion</a>
10-
<a mat-list-item [routerLink]="['fullscreen']">Fullscreen</a>
1110
<a mat-list-item [routerLink]="['grid-list']">Grid list</a>
1211
<a mat-list-item [routerLink]="['icon']">Icon</a>
1312
<a mat-list-item [routerLink]="['input']">Input</a>

src/e2e-app/e2e-app/routes.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {GridListE2E} from '../grid-list/grid-list-e2e';
1212
import {ProgressBarE2E} from '../progress-bar/progress-bar-e2e';
1313
import {ProgressSpinnerE2E} from '../progress-spinner/progress-spinner-e2e';
1414
import {SlideToggleE2E} from '../slide-toggle/slide-toggle-e2e';
15-
import {FullscreenE2E} from '../fullscreen/fullscreen-e2e';
1615
import {InputE2E} from '../input/input-e2e';
1716
import {SidenavE2E} from '../sidenav/sidenav-e2e';
1817
import {BlockScrollStrategyE2E} from '../block-scroll-strategy/block-scroll-strategy-e2e';
@@ -33,7 +32,6 @@ export const E2E_APP_ROUTES: Routes = [
3332
{path: 'checkbox', component: SimpleCheckboxes},
3433
{path: 'dialog', component: DialogE2E},
3534
{path: 'expansion', component: ExpansionOverviewExample},
36-
{path: 'fullscreen', component: FullscreenE2E},
3735
{path: 'grid-list', component: GridListE2E},
3836
{path: 'icon', component: IconE2E},
3937
{path: 'input', component: InputE2E},

src/e2e-app/fullscreen/fullscreen-e2e.html

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/e2e-app/fullscreen/fullscreen-e2e.ts

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)