Skip to content

Commit 4fa71fd

Browse files
authored
Merge pull request #8199 from AnalyticalGraphicsInc/es6-tests
Get ES6 unit tests and coverage running
2 parents b7cc90f + c2f20b3 commit 4fa71fd

10 files changed

+82
-163
lines changed

Source/Core/TaskProcessor.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ import RuntimeError from './RuntimeError.js';
130130
if (defined(TaskProcessor._loaderConfig)) {
131131
bootstrapMessage.loaderConfig = TaskProcessor._loaderConfig;
132132
} else {
133+
bootstrapMessage.loaderConfig.paths = {
134+
'Workers': buildModuleUrl('Workers/Build')
135+
};
133136
bootstrapMessage.loaderConfig.baseUrl = buildModuleUrl.getCesiumBaseUrl().url;
134137
}
135138

@@ -334,7 +337,7 @@ import RuntimeError from './RuntimeError.js';
334337
TaskProcessor.taskCompletedEvent = taskCompletedEvent;
335338

336339
// exposed for testing purposes
337-
TaskProcessor._defaultWorkerModulePrefix = 'Workers/Build/';
340+
TaskProcessor._defaultWorkerModulePrefix = 'Workers/';
338341
TaskProcessor._workerModulePrefix = TaskProcessor._defaultWorkerModulePrefix;
339342
TaskProcessor._loaderConfig = undefined;
340343
TaskProcessor._canTransferArrayBuffer = undefined;

Source/Workers/createGeometry.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import createTaskProcessorWorker from './createTaskProcessorWorker.js';
1414
} else {
1515
// Use AMD-style require.
1616
// in web workers, require is synchronous
17-
require(['./' + moduleName], function(f) {
17+
require(['Workers/' + moduleName], function(f) {
1818
module = f;
1919
moduleCache[module] = f;
2020
});

Specs/Core/sampleTerrainMostDetailedSpec.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import { sampleTerrainMostDetailed } from '../../Source/Cesium.js';
55

66
describe('Core/sampleTerrainMostDetailed', function() {
77

8-
var worldTerrain = createWorldTerrain();
8+
var worldTerrain;
9+
beforeAll(function() {
10+
worldTerrain = createWorldTerrain();
11+
return worldTerrain.readyPromise;
12+
});
913

1014
it('queries heights', function() {
1115
var positions = [

Specs/Core/sampleTerrainSpec.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import { sampleTerrain } from '../../Source/Cesium.js';
55

66
describe('Core/sampleTerrain', function() {
77

8-
var worldTerrain = createWorldTerrain();
8+
var worldTerrain;
9+
beforeAll(function() {
10+
worldTerrain = createWorldTerrain();
11+
return worldTerrain.readyPromise;
12+
});
913

1014
it('queries heights', function() {
1115
var positions = [

Specs/SpecRunner.html

+1-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@
1414

1515
<script src="../ThirdParty/jasmine-2.2.0/jasmine.js"></script>
1616
<script src="../ThirdParty/jasmine-2.2.0/jasmine-html.js"></script>
17-
18-
<script type="text/javascript" src="SpecList.js"></script>
19-
<script type="text/javascript" data-main="spec-main" src="../ThirdParty/requirejs-2.1.20/require.js"></script>
17+
<script type="module" src="spec-main.js"></script>
2018
</head>
2119

2220
<body>

Specs/karma-main.js

+19-73
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,19 @@
1-
(function() {
2-
/*global __karma__,require*/
3-
'use strict';
4-
5-
var included = '';
6-
var excluded = '';
7-
var webglValidation = false;
8-
var webglStub = false;
9-
var release = false;
10-
11-
if(__karma__.config.args){
12-
included = __karma__.config.args[0];
13-
excluded = __karma__.config.args[1];
14-
webglValidation = __karma__.config.args[2];
15-
webglStub = __karma__.config.args[3];
16-
release = __karma__.config.args[4];
17-
}
18-
19-
var toRequire = ['Cesium'];
20-
21-
if (release) {
22-
require.config({
23-
baseUrl : '/base/Build/Cesium',
24-
waitSeconds : 0
25-
});
26-
toRequire.push('../Stubs/paths');
27-
} else {
28-
require.config({
29-
baseUrl : '/base/Source',
30-
waitSeconds : 0
31-
});
32-
}
33-
34-
require(toRequire, function (Cesium, paths) {
35-
if (release) {
36-
paths.Specs = '../../Specs';
37-
paths.Source = '../../Source';
38-
paths.Stubs = '../Stubs';
39-
40-
require.config({
41-
paths: paths,
42-
shim: {
43-
'Cesium': {
44-
exports: 'Cesium'
45-
}
46-
}
47-
});
48-
} else {
49-
require.config({
50-
paths: {
51-
'Specs': '../Specs',
52-
'Source' : '.'
53-
}
54-
});
55-
}
56-
57-
require([
58-
'Specs/customizeJasmine'
59-
], function(
60-
customizeJasmine) {
61-
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
62-
customizeJasmine(jasmine.getEnv(), included, excluded, webglValidation, webglStub, release);
63-
64-
var specFiles = Object.keys(__karma__.files).filter(function(file) {
65-
return /Spec\.js$/.test(file);
66-
});
67-
68-
require(specFiles, function() {
69-
__karma__.start();
70-
});
71-
});
72-
});
73-
})();
1+
/*global __karma__*/
2+
import customizeJasmine from './customizeJasmine.js';
3+
4+
var included = '';
5+
var excluded = '';
6+
var webglValidation = false;
7+
var webglStub = false;
8+
var release = false;
9+
10+
if (__karma__.config.args) {
11+
included = __karma__.config.args[0];
12+
excluded = __karma__.config.args[1];
13+
webglValidation = __karma__.config.args[2];
14+
webglStub = __karma__.config.args[3];
15+
release = __karma__.config.args[4];
16+
}
17+
18+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
19+
customizeJasmine(jasmine.getEnv(), included, excluded, webglValidation, webglStub, release);

Specs/karma.conf.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module.exports = function(config) {
1111

1212
// frameworks to use
1313
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
14-
frameworks : ['jasmine', 'requirejs', 'detectBrowsers'],
14+
frameworks : ['jasmine', 'detectBrowsers'],
1515

1616
client: {
1717
captureConsole: false,
@@ -27,17 +27,22 @@ module.exports = function(config) {
2727

2828
// list of files / patterns to load in the browser
2929
files : [
30-
'Specs/karma-main.js',
31-
{pattern : 'Source/**', included : false},
32-
{pattern : 'Specs/**', included : false}
30+
{ pattern: 'Specs/karma-main.js', included: true, type: 'module' },
31+
{ pattern: 'Source/**', included: false, type: 'module' },
32+
{ pattern: 'Specs/**', included: true, type: 'module' }
3333
],
3434

3535
proxies : {
3636
'/Data' : '/base/Specs/Data'
3737
},
3838

3939
// list of files to exclude
40-
exclude : [],
40+
exclude: [
41+
'Specs/TestWorkers/**',
42+
'Specs/SpecList.js',
43+
'Specs/SpecRunner.js',
44+
'Specs/spec-main.js'
45+
],
4146

4247
// preprocess matching files before serving them to the browser
4348
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor

Specs/spec-main.js

+20-63
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
This is a version of Jasmine's boot.js modified to work with specs defined with AMD. The original comments from boot.js follow.
2+
This is a version of Jasmine's boot.js modified to work with specs defined with ES6. The original comments from boot.js follow.
33
44
Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js` and `jasmine_html.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project.
55
@@ -10,66 +10,25 @@
1010
[jasmine-gem]: http://github.com/pivotal/jasmine-gem
1111
*/
1212

13-
/*global require*/
13+
import * as Cesium from '../Source/Cesium.js';
14+
import addDefaultMatchers from './addDefaultMatchers.js';
15+
import equalsMethodEqualityTester from './equalsMethodEqualityTester.js';
1416

15-
(function() {
16-
'use strict';
17+
// set this for uniform test resolution across devices
18+
window.devicePixelRatio = 1;
1719

18-
// set this for uniform test resolution across devices
19-
window.devicePixelRatio = 1;
20-
21-
function getQueryParameter(name) {
22-
var match = new RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
23-
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
24-
}
25-
26-
var built = getQueryParameter('built');
27-
var release = getQueryParameter('release');
28-
29-
var toRequire = ['Cesium'];
30-
31-
if (built) {
32-
require.config({
33-
waitSeconds: 30,
34-
baseUrl: getQueryParameter('baseUrl') || '../Build/Cesium',
35-
paths: {
36-
'Stubs': '../Stubs',
37-
'Specs': '../../Specs',
38-
'Source' : '../../Source'
39-
},
40-
shim: {
41-
'Cesium': {
42-
exports: 'Cesium'
43-
}
44-
}
45-
});
46-
47-
toRequire.push('./Stubs/paths');
48-
} else {
49-
require.config({
50-
waitSeconds: 30,
51-
baseUrl: getQueryParameter('baseUrl') || '../Source',
52-
paths: {
53-
'Specs': '../Specs',
54-
'Source' : '.'
55-
}
56-
});
57-
}
20+
function getQueryParameter(name) {
21+
var match = new RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
22+
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
23+
}
5824

59-
require(toRequire, function(
60-
Cesium,
61-
paths) {
25+
var built = getQueryParameter('built');
26+
var release = getQueryParameter('release');
6227

6328
/*global jasmineRequire,jasmine,exports,specs*/
6429

6530
var when = Cesium.when;
6631

67-
if (typeof paths !== 'undefined') {
68-
require.config({
69-
paths : paths
70-
});
71-
}
72-
7332
/**
7433
* ## Require &amp; Instantiate
7534
*
@@ -346,17 +305,15 @@
346305
*
347306
* Load the modules via AMD, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment.
348307
*/
349-
var modules = ['Specs/addDefaultMatchers', 'Specs/equalsMethodEqualityTester'].concat(specs);
350-
require(modules, function(addDefaultMatchers, equalsMethodEqualityTester) {
351-
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
352308

353-
htmlReporter.initialize();
309+
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
354310

355-
var release = getQueryParameter('release');
356-
env.beforeEach(function() { addDefaultMatchers(!release).call(env); });
357-
env.beforeEach(function() { env.addCustomEqualityTester(equalsMethodEqualityTester); });
311+
htmlReporter.initialize();
358312

313+
var release = getQueryParameter('release');
314+
env.beforeEach(function() { addDefaultMatchers(!release).call(env); });
315+
env.beforeEach(function() { env.addCustomEqualityTester(equalsMethodEqualityTester); });
316+
317+
import('./SpecList.js').then(function() {
359318
env.execute();
360-
});
361-
});
362-
})();
319+
})

gulpfile.js

+16-14
Original file line numberDiff line numberDiff line change
@@ -739,13 +739,16 @@ gulp.task('coverage', function(done) {
739739
suppressSkipped: true
740740
},
741741
preprocessors: {
742-
'Source/Core/**/*.js': ['coverage'],
743-
'Source/DataSources/**/*.js': ['coverage'],
744-
'Source/Renderer/**/*.js': ['coverage'],
745-
'Source/Scene/**/*.js': ['coverage'],
746-
'Source/Shaders/**/*.js': ['coverage'],
747-
'Source/Widgets/**/*.js': ['coverage'],
748-
'Source/Workers/**/*.js': ['coverage']
742+
'Source/Core/**/*.js': ['karma-coverage-istanbul-instrumenter'],
743+
'Source/DataSources/**/*.js': ['karma-coverage-istanbul-instrumenter'],
744+
'Source/Renderer/**/*.js': ['karma-coverage-istanbul-instrumenter'],
745+
'Source/Scene/**/*.js': ['karma-coverage-istanbul-instrumenter'],
746+
'Source/Shaders/**/*.js': ['karma-coverage-istanbul-instrumenter'],
747+
'Source/Widgets/**/*.js': ['karma-coverage-istanbul-instrumenter'],
748+
'Source/Workers/**/*.js': ['karma-coverage-istanbul-instrumenter']
749+
},
750+
coverageIstanbulInstrumenter: {
751+
esModules: true
749752
},
750753
reporters: ['spec', 'coverage'],
751754
coverageReporter: {
@@ -796,9 +799,9 @@ gulp.task('test', function(done) {
796799
}
797800

798801
var files = [
799-
'Specs/karma-main.js',
800-
{pattern : 'Source/**', included : false},
801-
{pattern : 'Specs/**', included : false}
802+
{ pattern: 'Specs/karma-main.js', included: true, type: 'module' },
803+
{ pattern: 'Source/**', included: false, type: 'module' },
804+
{ pattern: 'Specs/**', included: true, type: 'module' }
802805
];
803806

804807
if (release) {
@@ -1324,14 +1327,13 @@ function createCesiumJs() {
13241327
}
13251328

13261329
function createSpecList() {
1327-
var specFiles = globby.sync(['Specs/**/*.js', '!Specs/*.js']);
1328-
var specs = [];
1330+
var specFiles = globby.sync(['Specs/**/*Spec.js']);
13291331

1332+
var contents = '';
13301333
specFiles.forEach(function(file) {
1331-
specs.push("'" + filePathToModuleId(file) + "'");
1334+
contents += "import './" + filePathToModuleId(file).replace('Specs/', '') + ".js';\n";
13321335
});
13331336

1334-
var contents = '/*eslint-disable no-unused-vars*/\n/*eslint-disable no-implicit-globals*/\nvar specs = [' + specs.join(',') + '];\n';
13351337
fs.writeFileSync(path.join('Specs', 'SpecList.js'), contents);
13361338
}
13371339

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@
5656
"karma": "^4.0.0",
5757
"karma-chrome-launcher": "^3.1.0",
5858
"karma-coverage": "^2.0.1",
59+
"karma-coverage-istanbul-instrumenter": "^1.0.1",
5960
"karma-detect-browsers": "^2.2.3",
6061
"karma-edge-launcher": "^0.4.2",
6162
"karma-firefox-launcher": "^1.0.0",
6263
"karma-ie-launcher": "^1.0.0",
6364
"karma-jasmine": "^2.0.0",
6465
"karma-longest-reporter": "^1.1.0",
65-
"karma-requirejs": "^1.1.0",
6666
"karma-safari-launcher": "^1.0.0",
6767
"karma-spec-reporter": "^0.0.32",
6868
"magic-string": "^0.25.3",

0 commit comments

Comments
 (0)