diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index c8757e1252..2a7800fdf5 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -61,10 +61,7 @@ namespace Volo.Abp.Cli.Commands ); } - if (!ProjectNameValidator.IsValid(projectName)) - { - throw new CliUsageException("The project name is invalid! Please specify a different name."); - } + ProjectNameValidator.Validate(projectName); Logger.LogInformation("Creating your project..."); Logger.LogInformation("Project name: " + projectName); @@ -559,4 +556,4 @@ namespace Volo.Abp.Cli.Commands } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs index 4606aa59c4..98de427ee2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs @@ -22,70 +22,50 @@ namespace Volo.Abp.Cli.Utils "Blazor" }; - private static bool HasParentDirectoryString(string projectName) + private static void ValidateParentDirectoryString(string projectName) { - return projectName.Contains(".."); + if (projectName.Contains("..")) + { + throw new CliUsageException("Project name cannot contain \"..\"! Specify a different name."); + } } - private static bool HasSurrogateOrControlChar(string projectName) + private static void ValidateSurrogateOrControlChar(string projectName) { - return projectName.Any(chr => char.IsControl(chr) || char.IsSurrogate(chr)); + if (projectName.Any(chr => char.IsControl(chr) || char.IsSurrogate(chr))) + { + throw new CliUsageException("Project name cannot contain surrogate or control characters! Specify a different name."); + } } - private static bool IsIllegalProjectName(string projectName) + private static void ValidateIllegalProjectName(string projectName) { foreach (var illegalProjectName in IllegalProjectNames) { if (projectName.Equals(illegalProjectName, StringComparison.OrdinalIgnoreCase)) { - return true; + throw new CliUsageException("Project name cannot be \"" + illegalProjectName + "\"! Specify a different name."); } } - - return false; } - private static bool HasIllegalKeywords(string projectName) + private static void ValidateIllegalKeywords(string projectName) { foreach (var illegalKeyword in IllegalKeywords) { - if (projectName.Contains(illegalKeyword)) + if (projectName.Split(".").Contains(illegalKeyword)) { - return true; + throw new CliUsageException("Project name cannot contain the word \"" + illegalKeyword + "\". Specify a different name."); } } - - return false; } - public static bool IsValid(string projectName) + public static void Validate(string projectName) { - if (projectName == null) - { - throw new CliUsageException("Project name cannot be empty!"); - } - - if (HasSurrogateOrControlChar(projectName)) - { - return false; - } - - if (HasParentDirectoryString(projectName)) - { - return false; - } - - if (IsIllegalProjectName(projectName)) - { - return false; - } - - if (HasIllegalKeywords(projectName)) - { - return false; - } - - return true; + ValidateSurrogateOrControlChar(projectName); + ValidateParentDirectoryString(projectName); + ValidateIllegalProjectName(projectName); + ValidateIllegalKeywords(projectName); } } } diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectNameValidation_Tests.cs b/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectNameValidation_Tests.cs index 5d08f90fc4..a1557e68ce 100644 --- a/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectNameValidation_Tests.cs +++ b/framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectNameValidation_Tests.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Cli } [Fact] - public async Task IllegalProjectName_Test() + public async Task Illegal_ProjectName_Test() { var illegalProjectNames = new[] { @@ -39,27 +39,28 @@ namespace Volo.Abp.Cli } [Fact] - public async Task ParentDirectoryContain_Test() + public async Task Parent_Directory_Char_Contains_Test() { var args = new CommandLineArgs("new", "Test..Test"); await _newCommand.ExecuteAsync(args).ShouldThrowAsync(); } - [Fact] - public async Task Has_Illegel_Keyword_Test() + public async Task Contains_Illegal_Keyword_Test() { var illegalKeywords = new[] { - "Acme.Blazor", - "MyBlazor", + "Blazor" }; foreach (var illegalKeyword in illegalKeywords) { var args = new CommandLineArgs("new", illegalKeyword); await _newCommand.ExecuteAsync(args).ShouldThrowAsync(); + + args = new CommandLineArgs("new", "Acme." + illegalKeyword); + await _newCommand.ExecuteAsync(args).ShouldThrowAsync(); } }