mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-22 23:15:56 +08:00
118 lines
4.2 KiB
TypeScript
118 lines
4.2 KiB
TypeScript
/**
|
|
* @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
|
|
*/
|
|
// tslint:disable:no-big-function
|
|
import { EmptyTree } from '@angular-devkit/schematics';
|
|
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
|
|
|
|
describe('Migration to version 8', () => {
|
|
const schematicRunner = new SchematicTestRunner(
|
|
'migrations',
|
|
require.resolve('../migration-collection.json'),
|
|
);
|
|
|
|
let tree: UnitTestTree;
|
|
const polyfillsPath = '/src/polyfills.ts';
|
|
const defaultOptions = {};
|
|
const polyfills = `/**
|
|
*/
|
|
|
|
/***************************************************************************************************
|
|
* BROWSER POLYFILLS
|
|
*/
|
|
|
|
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
|
|
import 'core-js/es6/symbol';
|
|
import 'core-js/es6/object';
|
|
import 'core-js/es6/function';
|
|
import 'core-js/es6/parse-int';
|
|
import 'core-js/es6/parse-float';
|
|
import 'core-js/es6/number';
|
|
import 'core-js/es6/math';
|
|
import 'core-js/es6/string';
|
|
import 'core-js/es6/date';
|
|
import 'core-js/es6/array';
|
|
import 'core-js/es6/regexp';
|
|
import 'core-js/es6/map';
|
|
// import 'core-js/es6/weak-map';
|
|
import 'core-js/es6/set';
|
|
|
|
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
|
|
// import 'classlist.js'; // Run "npm install --save classlist.js".
|
|
|
|
/** IE10 and IE11 requires the following for the Reflect API. */
|
|
// import 'core-js/es6/reflect';
|
|
|
|
/** Evergreen browsers require these. **/
|
|
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
|
|
import 'core-js/es7/reflect';
|
|
|
|
/***************************************************************************************************
|
|
* Zone JS is required by default for Angular itself.
|
|
*/
|
|
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
|
|
|
/***************************************************************************************************
|
|
* APPLICATION IMPORTS
|
|
*/
|
|
`;
|
|
|
|
describe('Migration to differential polyfill loading', () => {
|
|
beforeEach(async () => {
|
|
tree = new UnitTestTree(new EmptyTree());
|
|
tree = await schematicRunner.runExternalSchematicAsync(
|
|
require.resolve('../../collection.json'), 'ng-new',
|
|
{
|
|
name: 'migration-test',
|
|
version: '1.2.3',
|
|
directory: '.',
|
|
},
|
|
tree,
|
|
).toPromise();
|
|
tree.overwrite(polyfillsPath, polyfills);
|
|
});
|
|
|
|
it('should drop the es6 polyfills', async () => {
|
|
tree = await schematicRunner.runSchematicAsync('migration-07', defaultOptions, tree).toPromise();
|
|
const polyfills = tree.readContent(polyfillsPath);
|
|
expect(polyfills).not.toContain('core-js/es6/symbol');
|
|
expect(polyfills).not.toContain('core-js/es6/set');
|
|
expect(polyfills).toContain('zone.js');
|
|
expect(polyfills).toContain('Zone');
|
|
|
|
// We don't want to drop this commented import comments
|
|
expect(polyfills).toContain('core-js/es6/reflect');
|
|
expect(polyfills).toContain('core-js/es7/reflect');
|
|
expect(polyfills).toContain('BROWSER POLYFILLS');
|
|
});
|
|
|
|
it('should work as expected for a project with a root', async () => {
|
|
const originalContent = JSON.parse(tree.readContent('angular.json'));
|
|
originalContent
|
|
.projects['migration-test']
|
|
.architect
|
|
.build
|
|
.options
|
|
.polyfills = 'foo/src/polyfills.ts';
|
|
tree.overwrite('angular.json', JSON.stringify(originalContent));
|
|
const polyfillPath = '/foo/src/polyfills.ts';
|
|
tree.create(polyfillPath, polyfills);
|
|
tree = await schematicRunner.runSchematicAsync('migration-07', defaultOptions, tree).toPromise();
|
|
const newPolyfills = tree.readContent(polyfillPath);
|
|
expect(newPolyfills).not.toContain('core-js/es6/symbol');
|
|
expect(newPolyfills).not.toContain('core-js/es6/set');
|
|
expect(newPolyfills).toContain('zone.js');
|
|
expect(newPolyfills).toContain('Zone');
|
|
|
|
// We don't want to drop this commented import comments
|
|
expect(newPolyfills).toContain('core-js/es6/reflect');
|
|
expect(newPolyfills).toContain('core-js/es7/reflect');
|
|
expect(newPolyfills).toContain('BROWSER POLYFILLS');
|
|
});
|
|
});
|
|
});
|