89 lines
3.1 KiB
TypeScript
89 lines
3.1 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
|
|
*/
|
|
import {setAngularJSGlobal} from '@angular/upgrade/src/common/angular1';
|
|
|
|
|
|
const ng1Versions = [
|
|
{
|
|
label: '1.5',
|
|
files: ['angular-1.5/angular.js', 'angular-mocks-1.5/angular-mocks.js'],
|
|
},
|
|
{
|
|
label: '1.6',
|
|
files: ['angular/angular.js', 'angular-mocks/angular-mocks.js'],
|
|
},
|
|
];
|
|
|
|
export function createWithEachNg1VersionFn(setNg1: typeof setAngularJSGlobal) {
|
|
return (specSuite: () => void) => ng1Versions.forEach(({label, files}) => {
|
|
describe(`[AngularJS v${label}]`, () => {
|
|
beforeAll(done => {
|
|
// Load AngularJS before running tests.
|
|
files
|
|
.reduce(
|
|
(prev, file) => prev.then(() => new Promise<void>((resolve, reject) => {
|
|
const script = document.createElement('script');
|
|
script.src = `base/node_modules/${file}`;
|
|
script.onerror = reject;
|
|
script.onload = () => {
|
|
document.body.removeChild(script);
|
|
resolve();
|
|
};
|
|
document.body.appendChild(script);
|
|
})),
|
|
Promise.resolve())
|
|
.then(() => setNg1((window as any).angular))
|
|
.then(done, done.fail);
|
|
});
|
|
|
|
afterAll(() => {
|
|
// In these tests we are loading different versions of AngularJS on the same window.
|
|
// AngularJS leaves an "expandoId" property on `document`, which can trick subsequent
|
|
// `window.angular` instances into believing an app is already bootstrapped.
|
|
(window as any).angular.element(document).removeData();
|
|
|
|
// Remove AngularJS to leave a clean state for subsequent tests.
|
|
setNg1(undefined);
|
|
delete (window as any).angular;
|
|
});
|
|
|
|
specSuite();
|
|
});
|
|
});
|
|
}
|
|
|
|
export function html(html: string): Element {
|
|
// Don't return `body` itself, because using it as a `$rootElement` for ng1
|
|
// will attach `$injector` to it and that will affect subsequent tests.
|
|
const body = document.body;
|
|
body.innerHTML = `<div>${html.trim()}</div>`;
|
|
const div = document.body.firstChild as Element;
|
|
|
|
if (div.childNodes.length === 1 && div.firstChild instanceof HTMLElement) {
|
|
return div.firstChild;
|
|
}
|
|
|
|
return div;
|
|
}
|
|
|
|
export function multiTrim(text: string | null | undefined, allSpace = false): string {
|
|
if (typeof text == 'string') {
|
|
const repl = allSpace ? '' : ' ';
|
|
return text.replace(/\n/g, '').replace(/\s+/g, repl).trim();
|
|
}
|
|
throw new Error('Argument can not be undefined.');
|
|
}
|
|
|
|
export function nodes(html: string) {
|
|
const div = document.createElement('div');
|
|
div.innerHTML = html.trim();
|
|
return Array.prototype.slice.call(div.childNodes);
|
|
}
|
|
|
|
export const withEachNg1Version = createWithEachNg1VersionFn(setAngularJSGlobal);
|