mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-16 18:43:42 +08:00
fix(@schematics/angular): add validation for component and directive class name
This commit is contained in:
parent
3264c1763c
commit
6dbfc770b2
@ -25,7 +25,7 @@ import {
|
||||
import { addDeclarationToNgModule } from '../utility/add-declaration-to-ng-module';
|
||||
import { findModuleFromOptions } from '../utility/find-module';
|
||||
import { parseName } from '../utility/parse-name';
|
||||
import { validateHtmlSelector } from '../utility/validation';
|
||||
import { validateClassName, validateHtmlSelector } from '../utility/validation';
|
||||
import { buildDefaultPath, getWorkspace } from '../utility/workspace';
|
||||
import { Schema as ComponentOptions, Style } from './schema';
|
||||
|
||||
@ -62,6 +62,7 @@ export default function (options: ComponentOptions): Rule {
|
||||
options.selector || buildSelector(options, (project && project.prefix) || '');
|
||||
|
||||
validateHtmlSelector(options.selector);
|
||||
validateClassName(strings.classify(options.name));
|
||||
|
||||
const skipStyleFile = options.inlineStyle || options.style === Style.None;
|
||||
const templateSource = apply(url('./files'), [
|
||||
|
@ -157,6 +157,14 @@ describe('Component Schematic', () => {
|
||||
).toBeRejectedWithError('Selector "app-1-one" is invalid.');
|
||||
});
|
||||
|
||||
it('should error when class name contains invalid characters', async () => {
|
||||
const options = { ...defaultOptions, name: '404' };
|
||||
|
||||
await expectAsync(
|
||||
schematicRunner.runSchematic('component', options, appTree),
|
||||
).toBeRejectedWithError('Class name "404" is invalid.');
|
||||
});
|
||||
|
||||
it('should allow dash in selector before a number', async () => {
|
||||
const options = { ...defaultOptions, name: 'one-1' };
|
||||
|
||||
|
@ -23,7 +23,7 @@ import {
|
||||
import { addDeclarationToNgModule } from '../utility/add-declaration-to-ng-module';
|
||||
import { findModuleFromOptions } from '../utility/find-module';
|
||||
import { parseName } from '../utility/parse-name';
|
||||
import { validateHtmlSelector } from '../utility/validation';
|
||||
import { validateClassName, validateHtmlSelector } from '../utility/validation';
|
||||
import { buildDefaultPath, getWorkspace } from '../utility/workspace';
|
||||
import { Schema as DirectiveOptions } from './schema';
|
||||
|
||||
@ -58,6 +58,7 @@ export default function (options: DirectiveOptions): Rule {
|
||||
options.selector = options.selector || buildSelector(options, project.prefix || '');
|
||||
|
||||
validateHtmlSelector(options.selector);
|
||||
validateClassName(strings.classify(options.name));
|
||||
|
||||
const templateSource = apply(url('./files'), [
|
||||
options.skipTests ? filter((path) => !path.endsWith('.spec.ts.template')) : noop(),
|
||||
|
@ -111,6 +111,14 @@ describe('Directive Schematic', () => {
|
||||
expect(directiveContent).toContain('class FooDirective');
|
||||
});
|
||||
|
||||
it('should error when class name contains invalid characters', async () => {
|
||||
const options = { ...defaultOptions, name: '404' };
|
||||
|
||||
await expectAsync(
|
||||
schematicRunner.runSchematic('component', options, appTree),
|
||||
).toBeRejectedWithError('Class name "404" is invalid.');
|
||||
});
|
||||
|
||||
describe('standalone=false', () => {
|
||||
const defaultNonStandaloneOptions: DirectiveOptions = {
|
||||
...defaultOptions,
|
||||
|
Loading…
x
Reference in New Issue
Block a user