Skip to content

Commit 55fdd5e

Browse files
Chris Joelcdata
authored andcommitted
Templatize basic test suite
1 parent 084425c commit 55fdd5e

File tree

9 files changed

+78
-76
lines changed

9 files changed

+78
-76
lines changed

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,11 @@
7272
"@polymer/paper-button": "^3.0.1",
7373
"@polymer/paper-radio-group": "^3.0.1",
7474
"@polymer/paper-slider": "^3.0.1",
75+
"@types/chai": "^4.1.7",
76+
"@types/mocha": "^5.2.5",
7577
"@types/pngjs": "^3.3.2",
76-
"@types/puppeteer": "^1.11.1",
7778
"@types/prismjs": "^1.9.0",
79+
"@types/puppeteer": "^1.11.1",
7880
"@types/three": "^0.93.12",
7981
"@webcomponents/webcomponentsjs": "~2.1.3",
8082
"chai": "^4.1.2",
@@ -89,8 +91,8 @@
8991
"mocha": "^5.2.0",
9092
"pngjs": "^3.3.3",
9193
"polymer-build": "^3.1.1",
92-
"puppeteer": "^1.11.0",
9394
"prismjs": "^1.15.0",
95+
"puppeteer": "^1.11.0",
9496
"resize-observer-polyfill": "^1.5.0",
9597
"rimraf": "^2.6.2",
9698
"rollup": "^0.66.0",

src/test/features/ar-spec.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {IS_IOS} from '../../constants.js';
1717
import {$enterARElement, ARMixin} from '../../features/ar.js';
1818
import ModelViewerElementBase, {$canvas} from '../../model-viewer-base.js';
1919
import {assetPath, pickShadowDescendant, timePasses, waitForEvent} from '../helpers.js';
20+
import {BasicSpecTemplate} from '../templates.js';
2021

2122
const expect = chai.expect;
2223

@@ -37,15 +38,7 @@ suite('ModelViewerElementBase with ARMixin', () => {
3738
customElements.define(tagName, ModelViewerElement);
3839
});
3940

40-
test('can be directly instantiated', () => {
41-
const element = new ModelViewerElement();
42-
expect(element).to.be.ok;
43-
});
44-
45-
test('can be instantiated with document.createElement', () => {
46-
const element = document.createElement(tagName);
47-
expect(element).to.be.ok;
48-
});
41+
BasicSpecTemplate(() => ModelViewerElement, () => tagName);
4942

5043
suite('with unstable-webxr', () => {
5144
let element;

src/test/features/controls-spec.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import {$controls, $promptElement, ControlsMixin, IDLE_PROMPT, IDLE_PROMPT_THRESHOLD_MS} from '../../features/controls.js';
1717
import ModelViewerElementBase, {$scene} from '../../model-viewer-base.js';
1818
import {assetPath, dispatchSyntheticEvent, rafPasses, timePasses, until, waitForEvent} from '../helpers.js';
19-
19+
import {BasicSpecTemplate} from '../templates.js';
2020
import {settleControls} from '../three-components/SmoothControls-spec.js';
2121

2222
const expect = chai.expect;
@@ -43,15 +43,7 @@ suite('ModelViewerElementBase with ControlsMixin', () => {
4343
customElements.define(tagName, ModelViewerElement);
4444
});
4545

46-
test('can be directly instantiated', () => {
47-
const element = new ModelViewerElement();
48-
expect(element).to.be.ok;
49-
});
50-
51-
test('can be instantiated with document.createElement', () => {
52-
const element = document.createElement(tagName);
53-
expect(element).to.be.ok;
54-
});
46+
BasicSpecTemplate(() => ModelViewerElement, () => tagName);
5547

5648
suite('controls', () => {
5749
let element;

src/test/features/environment-spec.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import {EnvironmentMixin} from '../../features/environment.js';
1717
import ModelViewerElementBase, {$scene} from '../../model-viewer-base.js';
1818
import {assetPath, textureMatchesMeta, timePasses, waitForEvent} from '../helpers.js';
19+
import {BasicSpecTemplate} from '../templates.js';
1920

2021
const expect = chai.expect;
2122
const BG_IMAGE_URL = assetPath('equirectangular.png');
@@ -105,6 +106,8 @@ suite('ModelViewerElementBase with EnvironmentMixin', () => {
105106

106107
teardown(() => element.parentNode && element.parentNode.removeChild(element));
107108

109+
BasicSpecTemplate(() => ModelViewerElement, () => tagName);
110+
108111
test(
109112
'has default skysphere if no background-image or background-color',
110113
() => {

src/test/features/loading-spec.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import {$posterElement, LoadingMixin, POSTER_TRANSITION_TIME} from '../../features/loading.js';
1717
import ModelViewerElementBase, {$canvas} from '../../model-viewer-base.js';
1818
import {assetPath, dispatchSyntheticEvent, pickShadowDescendant, rafPasses, timePasses, until, waitForEvent} from '../helpers.js';
19+
import {BasicSpecTemplate} from '../templates.js';
1920

2021
const expect = chai.expect;
2122
const ASTRONAUT_GLB_PATH = assetPath('Astronaut.glb');
@@ -37,15 +38,8 @@ suite('ModelViewerElementBase with LoadingMixin', () => {
3738
customElements.define(tagName, ModelViewerElement);
3839
});
3940

40-
test('can be directly instantiated', () => {
41-
const element = new ModelViewerElement();
42-
expect(element).to.be.ok;
43-
});
41+
BasicSpecTemplate(() => ModelViewerElement, () => tagName);
4442

45-
test('can be instantiated with document.createElement', () => {
46-
const element = document.createElement(tagName);
47-
expect(element).to.be.ok;
48-
});
4943
// TODO: Elements must have loaded to hide poster...
5044

5145
suite('loading', () => {

src/test/features/magic-leap-spec.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import {MagicLeapMixin} from '../../features/magic-leap.js';
1717
import ModelViewerElementBase from '../../model-viewer-base.js';
1818
import {assetPath, pickShadowDescendant, timePasses} from '../helpers.js';
19+
import {BasicSpecTemplate} from '../templates.js';
1920

2021
const expect = chai.expect;
2122

@@ -36,15 +37,7 @@ suite('ModelViewerElementBase with MagicLeapMixin', () => {
3637
customElements.define(tagName, ModelViewerElement);
3738
});
3839

39-
test('can be directly instantiated', () => {
40-
const element = new ModelViewerElement();
41-
expect(element).to.be.ok;
42-
});
43-
44-
test('can be instantiated with document.createElement', () => {
45-
const element = document.createElement(tagName);
46-
expect(element).to.be.ok;
47-
});
40+
BasicSpecTemplate(() => ModelViewerElement, () => tagName);
4841

4942
suite('magic-leap', () => {
5043
suite('in standard browser environments', () => {

src/test/model-viewer-base-spec.js

Lines changed: 2 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import ModelViewerElementBase, {$canvas, $renderer, $scene} from '../model-viewer-base.js';
1717

1818
import {assetPath, timePasses, until, waitForEvent} from './helpers.js';
19+
import {BasicSpecTemplate} from './templates.js';
1920

2021
const expect = chai.expect;
2122

@@ -39,44 +40,7 @@ suite('ModelViewerElementBase', () => {
3940
customElements.define(tagName, ModelViewerElement);
4041
});
4142

42-
test('can be directly instantiated', () => {
43-
const element = new ModelViewerElement();
44-
expect(element).to.be.ok;
45-
});
46-
47-
test('can be instantiated with document.createElement', () => {
48-
const element = document.createElement(tagName);
49-
expect(element).to.be.ok;
50-
});
51-
52-
suite('compatibility', () => {
53-
suite('when WebGL is not supported', () => {
54-
let nativeGetContext;
55-
56-
setup(() => {
57-
nativeGetContext = HTMLCanvasElement.prototype.getContext;
58-
HTMLCanvasElement.prototype.getContext = function(type, ...args) {
59-
if (/webgl/.test(type)) {
60-
return null;
61-
}
62-
return nativeGetContext.call(this, type, ...args);
63-
};
64-
});
65-
66-
teardown(() => {
67-
HTMLCanvasElement.prototype.getContext = nativeGetContext;
68-
});
69-
70-
test(
71-
'does not explode when created and appended to the document',
72-
async () => {
73-
const element = new ModelViewerElement();
74-
document.body.appendChild(element);
75-
await timePasses();
76-
document.body.removeChild(element);
77-
});
78-
});
79-
});
43+
BasicSpecTemplate(() => ModelViewerElement, () => tagName);
8044

8145
suite('with alt text', () => {
8246
let element;

src/test/templates.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import ModelViewerElementBase from '../model-viewer-base.js';
2+
import {timePasses} from './helpers.js';
3+
4+
export type Constructor<T = object> = {
5+
new (...args: any[]): T
6+
};
7+
8+
const expect = chai.expect;
9+
10+
export const BasicSpecTemplate =
11+
(ModelViewerElementAccessor: () => Constructor<ModelViewerElementBase>,
12+
tagNameAccessor: () => string) => {
13+
test('can be directly instantiated', () => {
14+
const ModelViewerElement = ModelViewerElementAccessor();
15+
const element = new ModelViewerElement();
16+
expect(element).to.be.ok;
17+
});
18+
19+
test('can be instantiated with document.createElement', () => {
20+
const tagName = tagNameAccessor();
21+
const element = document.createElement(tagName);
22+
expect(element).to.be.ok;
23+
});
24+
25+
suite('compatibility', () => {
26+
suite('when WebGL is not supported', () => {
27+
let nativeGetContext: any;
28+
29+
setup(() => {
30+
nativeGetContext = HTMLCanvasElement.prototype.getContext;
31+
HTMLCanvasElement.prototype.getContext = function(
32+
type: string, ...args: Array<any>) {
33+
if (/webgl/.test(type)) {
34+
return null;
35+
}
36+
return nativeGetContext.call(this, type, ...args);
37+
};
38+
});
39+
40+
teardown(() => {
41+
HTMLCanvasElement.prototype.getContext = nativeGetContext;
42+
});
43+
44+
test(
45+
'does not explode when created and appended to the document',
46+
async () => {
47+
const ModelViewerElement = ModelViewerElementAccessor();
48+
const element = new ModelViewerElement();
49+
document.body.appendChild(element);
50+
await timePasses();
51+
document.body.removeChild(element);
52+
});
53+
});
54+
});
55+
};

0 commit comments

Comments
 (0)