sass-references/angular-material/material/schematics/ng-update/test-cases/v19-mat-core-removal.spec.ts

85 lines
3.0 KiB
TypeScript
Raw Normal View History

2024-12-06 10:42:08 +08:00
import {UnitTestTree} from '@angular-devkit/schematics/testing';
import {createTestCaseSetup} from '@angular/cdk/schematics/testing';
import {join} from 'path';
import {MIGRATION_PATH} from '../../paths';
const PROJECT_ROOT_DIR = '/projects/cdk-testing';
const THEME_FILE_PATH = join(PROJECT_ROOT_DIR, 'src/theme.scss');
describe('v19 mat.core migration', () => {
let tree: UnitTestTree;
/** Writes multiple lines to a file. */
let writeLines: (path: string, lines: string[]) => void;
/** Reads multiple lines from a file. */
let readLines: (path: string) => string[];
/** Runs the v15 migration on the test application. */
let runMigration: () => Promise<{logOutput: string}>;
beforeEach(async () => {
const testSetup = await createTestCaseSetup('migration-v19', MIGRATION_PATH, []);
tree = testSetup.appTree;
runMigration = testSetup.runFixers;
readLines = (path: string) => tree.readContent(path).split('\n');
writeLines = (path: string, lines: string[]) => testSetup.writeFile(path, lines.join('\n'));
});
describe('style migrations', () => {
async function runSassMigrationTest(ctx: string, opts: {old: string[]; new: string[]}) {
writeLines(THEME_FILE_PATH, opts.old);
await runMigration();
expect(readLines(THEME_FILE_PATH)).withContext(ctx).toEqual(opts.new);
}
it('should remove uses of the core mixin', async () => {
await runSassMigrationTest('', {
old: [`@use '@angular/material' as mat;`, `@include mat.core();`],
new: [
`@use '@angular/material' as mat;`,
`@include mat.elevation-classes();`,
`@include mat.app-background();`,
],
});
await runSassMigrationTest('w/ unique namespace', {
old: [`@use '@angular/material' as material;`, `@include material.core();`],
new: [
`@use '@angular/material' as material;`,
`@include material.elevation-classes();`,
`@include material.app-background();`,
],
});
await runSassMigrationTest('w/ no namespace', {
old: [`@use '@angular/material';`, `@include material.core();`],
new: [
`@use '@angular/material';`,
`@include material.elevation-classes();`,
`@include material.app-background();`,
],
});
await runSassMigrationTest('w/ unique whitespace', {
old: [
` @use '@angular/material' as material ; `,
` @include material.core( ) ; `,
],
new: [
` @use '@angular/material' as material ; `,
` @include material.elevation-classes();`,
` @include material.app-background(); `,
],
});
});
it('should not break if there is an invalid syntax', async () => {
await runSassMigrationTest('', {
old: [`@use '@angular/material' as mat;`, `.foo { content: '; }`],
new: [`@use '@angular/material' as mat;`, `.foo { content: '; }`],
});
});
});
});