Browse Source

Move ProjectNameValidator enhancements to 4.4

pull/10093/head
Yunus Emre Kalkan 4 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))
{
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
}
}
}
}
}

60
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);
}
}
}

13
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<CliUsageException>();
}
[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<CliUsageException>();
args = new CommandLineArgs("new", "Acme." + illegalKeyword);
await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>();
}
}

Loading…
Cancel
Save