test(zone.js): add zone.js externs test (#39108)
Add back the zone.js externs file test for google closure compiler. The test compiles a test program with and without `zone_externs`. 1. With `zone_externs`, the code should keep the APIs defined in the `zone_externs`. 2. Without `zone_externs`, the code will not keep these APIs. PR Close #39108
This commit is contained in:
parent
e44e10bb81
commit
6085d2acc9
|
@ -728,6 +728,7 @@ jobs:
|
|||
steps:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
- install_java
|
||||
# Install
|
||||
- run: yarn --cwd packages/zone.js install --frozen-lockfile --non-interactive
|
||||
# Run zone.js tools tests
|
||||
|
@ -736,9 +737,11 @@ jobs:
|
|||
- run: yarn bazel build //packages/zone.js:npm_package &&
|
||||
cp dist/bin/packages/zone.js/npm_package/bundles/zone-mix.umd.js ./packages/zone.js/test/extra/ &&
|
||||
cp dist/bin/packages/zone.js/npm_package/bundles/zone-patch-electron.umd.js ./packages/zone.js/test/extra/ &&
|
||||
yarn --cwd packages/zone.js electrontest
|
||||
cp dist/bin/packages/zone.js/npm_package/bundles/zone.umd.js ./packages/zone.js/build/test/closure/zone.js
|
||||
- run: yarn --cwd packages/zone.js jest:test
|
||||
- run: yarn --cwd packages/zone.js jest:nodetest
|
||||
- run: yarn --cwd packages/zone.js electrontest
|
||||
- run: yarn --cwd packages/zone.js closuretest
|
||||
- run: yarn --cwd packages/zone.js/test/typings install --frozen-lockfile --non-interactive
|
||||
- run: yarn --cwd packages/zone.js/test/typings test
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
build
|
|
@ -11,15 +11,18 @@
|
|||
"tslib": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@externs/nodejs": "^1.5.0",
|
||||
"@types/node": "^10.9.4",
|
||||
"domino": "2.1.2",
|
||||
"jest": "^26.4",
|
||||
"google-closure-compiler": "^20200927.0.0",
|
||||
"mocha": "^3.1.2",
|
||||
"mock-require": "3.0.3",
|
||||
"promises-aplus-tests": "^2.1.2",
|
||||
"typescript": "4.0.2"
|
||||
},
|
||||
"scripts": {
|
||||
"closuretest": "./scripts/closure/closure_compiler.sh",
|
||||
"electrontest": "cd test/extra && node electron.js",
|
||||
"jest:test": "jest --config ./test/jest/jest.config.js ./test/jest/jest.spec.js",
|
||||
"jest:nodetest": "jest --config ./test/jest/jest.node.config.js ./test/jest/jest.spec.js",
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# compile closure test source file
|
||||
$(npm bin)/tsc -p .
|
||||
# Run the Google Closure compiler java runnable with zone externs
|
||||
java -jar node_modules/google-closure-compiler/compiler.jar --flagfile 'scripts/closure/closure_flagfile' --externs 'lib/closure/zone_externs.js'
|
||||
java -jar ./node_modules/google-closure-compiler-java/compiler.jar --flagfile './scripts/closure/closure_flagfile' --externs './lib/closure/zone_externs.js' --externs './node_modules/@externs/nodejs/v8/global.js' --process_common_js_modules
|
||||
|
||||
# the names of Zone exposed API should be kept correctly with zone externs, test program should exit with 0.
|
||||
node build/closure/closure-bundle.js
|
||||
node build/closure/zone-closure-bundle.js
|
||||
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
|
@ -15,10 +15,9 @@ else
|
|||
fi
|
||||
|
||||
# Run the Google Closure compiler java runnable without zone externs.
|
||||
java -jar node_modules/google-closure-compiler/compiler.jar --flagfile 'scripts/closure/closure_flagfile'
|
||||
java -jar node_modules/google-closure-compiler-java/compiler.jar --flagfile 'scripts/closure/closure_flagfile' --externs './node_modules/@externs/nodejs/v8/global.js' --process_common_js_modules
|
||||
|
||||
# the names of Zone exposed API should be renamed and fail to be executed, test program should exit with 1.
|
||||
node build/closure/closure-bundle.js
|
||||
node build/closure/zone-closure-bundle.js
|
||||
|
||||
if [ $? -eq 1 ]
|
||||
then
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
--compilation_level ADVANCED_OPTIMIZATIONS
|
||||
--js_output_file "build/closure/closure-bundle.js"
|
||||
--js_output_file "build/closure/zone-closure-bundle.js"
|
||||
--rewrite_polyfills false
|
||||
--js "build/test/closure/zone.js"
|
||||
--js "build/test/closure/zone.closure.js"
|
||||
--formatting PRETTY_PRINT
|
|
@ -5,7 +5,7 @@
|
|||
* 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 '../../dist/zone-node';
|
||||
import './zone.js';
|
||||
const testClosureFunction = () => {
|
||||
const logs: string[] = [];
|
||||
// call all Zone exposed functions
|
||||
|
@ -72,28 +72,64 @@ const testClosureFunction = () => {
|
|||
logs.push('getZoneWith' + keyZone!.name);
|
||||
logs.push('get' + keyZone!.get('key'));
|
||||
logs.push('root' + Zone.root.name);
|
||||
Object.keys((Zone as any).prototype).forEach(key => {
|
||||
logs.push(key);
|
||||
});
|
||||
Object.keys(testZoneSpec).forEach(key => {
|
||||
logs.push(key);
|
||||
});
|
||||
|
||||
const task = Zone.current.scheduleMicroTask('testTask', () => {}, undefined, () => {});
|
||||
Object.keys(task).forEach(key => {
|
||||
logs.push(key);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const expectedResult = [
|
||||
'currentclosure',
|
||||
'parent<root>',
|
||||
'getZoneWithclosure',
|
||||
'getvalue',
|
||||
'root<root>',
|
||||
'parent',
|
||||
'name',
|
||||
const zonePrototypeKeys = [
|
||||
'get',
|
||||
'getZoneWith',
|
||||
'fork',
|
||||
'wrap',
|
||||
'run',
|
||||
'runGuarded',
|
||||
'runTask',
|
||||
'scheduleTask',
|
||||
'scheduleMicroTask',
|
||||
'scheduleMacroTask',
|
||||
'scheduleEventTask',
|
||||
'cancelTask',
|
||||
];
|
||||
zonePrototypeKeys.forEach(key => {
|
||||
if ((Zone as any).prototype.hasOwnProperty(key)) {
|
||||
logs.push(key);
|
||||
}
|
||||
});
|
||||
|
||||
const zoneSpecKeys = [
|
||||
'name',
|
||||
'properties',
|
||||
'onFork',
|
||||
'onIntercept',
|
||||
'onInvoke',
|
||||
'onHandleError',
|
||||
'onScheduleTask',
|
||||
'onInvokeTask',
|
||||
'onCancelTask',
|
||||
'onHasTask',
|
||||
];
|
||||
zoneSpecKeys.forEach(key => {
|
||||
if (testZoneSpec.hasOwnProperty(key)) {
|
||||
logs.push(key);
|
||||
}
|
||||
});
|
||||
|
||||
const zoneTaskKeys = [
|
||||
'onHasTask', 'runCount', 'type', 'source', 'data', 'scheduleFn', 'cancelFn', 'callback',
|
||||
'invoke'
|
||||
];
|
||||
|
||||
const task = Zone.current.scheduleMicroTask('testTask', () => {}, undefined, () => {});
|
||||
zoneTaskKeys.forEach(key => {
|
||||
if (task.hasOwnProperty(key)) {
|
||||
logs.push(key);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const expectedResult = [
|
||||
'currentclosure',
|
||||
'parent<root>',
|
||||
'getZoneWithclosure',
|
||||
'getvalue',
|
||||
'root<root>',
|
||||
'get',
|
||||
'getZoneWith',
|
||||
'fork',
|
||||
|
@ -106,7 +142,6 @@ const testClosureFunction = () => {
|
|||
'scheduleMacroTask',
|
||||
'scheduleEventTask',
|
||||
'cancelTask',
|
||||
'_updateTaskCount',
|
||||
'name',
|
||||
'properties',
|
||||
'onFork',
|
||||
|
@ -117,10 +152,7 @@ const testClosureFunction = () => {
|
|||
'onInvokeTask',
|
||||
'onCancelTask',
|
||||
'onHasTask',
|
||||
'_zone',
|
||||
'runCount',
|
||||
'_zoneDelegates',
|
||||
'_state',
|
||||
'type',
|
||||
'source',
|
||||
'data',
|
||||
|
@ -137,6 +169,11 @@ const testClosureFunction = () => {
|
|||
result = false;
|
||||
}
|
||||
}
|
||||
if (result) {
|
||||
console.log('All tests passed.');
|
||||
} else {
|
||||
console.error('Test failed, some public APIs cannot be found after closure compiler.');
|
||||
}
|
||||
process['exit'](result ? 0 : 1);
|
||||
};
|
||||
process['on']('uncaughtException', (err: any) => {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue