Browse Source

Move ProjectNameValidator enhancements to 4.4

pull/10093/head
Yunus Emre Kalkan 5 years ago
parent
commit
4f428a30a7
  1. 7
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
  2. 60
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs
  3. 13
      framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectNameValidation_Tests.cs

7
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)) ProjectNameValidator.Validate(projectName);
{
throw new CliUsageException("The project name is invalid! Please specify a different name.");
}
Logger.LogInformation("Creating your project..."); Logger.LogInformation("Creating your project...");
Logger.LogInformation("Project name: " + projectName); Logger.LogInformation("Project name: " + projectName);
@ -559,4 +556,4 @@ namespace Volo.Abp.Cli.Commands
} }
} }
} }
} }

60
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs

@ -22,70 +22,50 @@ namespace Volo.Abp.Cli.Utils
"Blazor" "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) foreach (var illegalProjectName in IllegalProjectNames)
{ {
if (projectName.Equals(illegalProjectName, StringComparison.OrdinalIgnoreCase)) 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) 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) ValidateSurrogateOrControlChar(projectName);
{ ValidateParentDirectoryString(projectName);
throw new CliUsageException("Project name cannot be empty!"); ValidateIllegalProjectName(projectName);
} ValidateIllegalKeywords(projectName);
if (HasSurrogateOrControlChar(projectName))
{
return false;
}
if (HasParentDirectoryString(projectName))
{
return false;
}
if (IsIllegalProjectName(projectName))
{
return false;
}
if (HasIllegalKeywords(projectName))
{
return false;
}
return true;
} }
} }
} }

13
framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectNameValidation_Tests.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Cli
} }
[Fact] [Fact]
public async Task IllegalProjectName_Test() public async Task Illegal_ProjectName_Test()
{ {
var illegalProjectNames = new[] var illegalProjectNames = new[]
{ {
@ -39,27 +39,28 @@ namespace Volo.Abp.Cli
} }
[Fact] [Fact]
public async Task ParentDirectoryContain_Test() public async Task Parent_Directory_Char_Contains_Test()
{ {
var args = new CommandLineArgs("new", "Test..Test"); var args = new CommandLineArgs("new", "Test..Test");
await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>(); await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>();
} }
[Fact] [Fact]
public async Task Has_Illegel_Keyword_Test() public async Task Contains_Illegal_Keyword_Test()
{ {
var illegalKeywords = new[] var illegalKeywords = new[]
{ {
"Acme.Blazor", "Blazor"
"MyBlazor",
}; };
foreach (var illegalKeyword in illegalKeywords) foreach (var illegalKeyword in illegalKeywords)
{ {
var args = new CommandLineArgs("new", illegalKeyword); var args = new CommandLineArgs("new", illegalKeyword);
await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>(); await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>();
args = new CommandLineArgs("new", "Acme." + illegalKeyword);
await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>();
} }
} }

Loading…
Cancel
Save