Skip to content

Commit 1b2dd16

Browse files
authored
refactor: 基于 FluentValidation 重构 ModValidate (#2428)
* refactor: 初步重构 ModVolidate * chore: 全部替换! * chore: 彻底删除 ModValidate.vb * fix: 文件夹重名 * fix: 不应存在于该 pr 中 * Revert "chore: 全部替换!" This reverts commit 1919270 * 1 * Revert "chore: 彻底删除 ModValidate.vb" This reverts commit 6b24b3f * 2 * CRLF * 114514 * fuck * 1
1 parent 8b7d45a commit 1b2dd16

21 files changed

Lines changed: 722 additions & 96 deletions
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class FileNameValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow("foobar.txt", true)]
14+
[DataRow("CON.tar.gz", true)]
15+
[DataRow("LPT²", false)]
16+
[DataRow(" Test", false)]
17+
[DataRow("?foo.", false)]
18+
[DataRow("""\/:*?"<>|""", false)]
19+
[DataRow("PCLCE.exe.", false)]
20+
[DataRow("我落泪情绪零~1.MP3", false)]
21+
[DataRow("关注洛天依LuoTianyi0712谢谢喵!!!", true)]
22+
public void TestFileNameValidate(string fileName, bool expected)
23+
{
24+
var validator = new FileNameValidator();
25+
var result = validator.Validate(fileName);
26+
if (!result.IsValid)
27+
{
28+
foreach (var error in result.Errors)
29+
{
30+
TestContext.WriteLine(error.ErrorMessage);
31+
}
32+
}
33+
Assert.AreEqual(expected, result.IsValid);
34+
}
35+
36+
[TestMethod]
37+
[DataRow("explorer.exe", false)]
38+
[DataRow("notepad.exe", false)]
39+
[DataRow("foobar.txt", true)]
40+
[DataRow("关注初音未来初音ミクHatsuneMiku0831谢谢喵!!!", true)]
41+
public void TestFileNameValidateWithParentFolder(string fileName, bool expected)
42+
{
43+
var validator = new FileNameValidator("C:\\Windows");
44+
var result = validator.Validate(fileName);
45+
if (!result.IsValid)
46+
{
47+
foreach (var error in result.Errors)
48+
{
49+
TestContext.WriteLine(error.ErrorMessage);
50+
}
51+
}
52+
Assert.AreEqual(expected, result.IsValid);
53+
}
54+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class FolderNameValidatorTest
8+
{
9+
public TestContext TestContext { get; set; }
10+
11+
[TestMethod]
12+
[DataRow(" 测试 ", false)]
13+
[DataRow("Folder.", false)]
14+
[DataRow("LPT4", false)]
15+
[DataRow("给我一首歌的~1", false)]
16+
[DataRow("1|1|4|5|1|4", false)]
17+
[DataRow("不懂爱恨情仇煎熬的我们", true)]
18+
[DataRow("关注洛天依LuoTianyi0712谢谢喵!!!", true)]
19+
[DataRow("关注初音未来初音ミクHatsuneMiku0831谢谢喵!!!", true)]
20+
public void TestFolderNameValidate(string folderPath, bool expected)
21+
{
22+
var validator = new FolderNameValidator();
23+
var result = validator.Validate(folderPath);
24+
if (!result.IsValid)
25+
{
26+
foreach (var error in result.Errors)
27+
{
28+
TestContext.WriteLine(error.ErrorMessage);
29+
}
30+
}
31+
Assert.AreEqual(expected, result.IsValid);
32+
}
33+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class FolderPathValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow(@"C:\Program Files", true)]
14+
[DataRow(@"C:\Windows\System32", true)]
15+
[DataRow(@"C:\Invalid|Folder", false)]
16+
[DataRow(@" C:\Test ", false)]
17+
[DataRow(@"C:\不该 (fe~3", false)]
18+
[DataRow(@"C:\CON\AUX", false)]
19+
[DataRow(@"C:\权御天下\关注洛天依LuoTianyi0712谢谢喵!!!", true)]
20+
[DataRow(@"C:\初音ミクの消失\关注初音未来初音ミクHatsuneMiku0831谢谢喵!!!", true)]
21+
public void TestFolderPathValidate(string folderPath, bool expected)
22+
{
23+
var validator = new FolderPathValidator();
24+
var result = validator.Validate(folderPath);
25+
if (!result.IsValid)
26+
{
27+
foreach (var error in result.Errors)
28+
{
29+
TestContext.WriteLine(error.ErrorMessage);
30+
}
31+
}
32+
Assert.AreEqual(expected, result.IsValid);
33+
}
34+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class HttpAndUncValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow("https://suki.ink", true)]
14+
[DataRow("http://ce.pclc.cc", true)]
15+
[DataRow("-10", false)]
16+
[DataRow("ftp://www.example.com", false)]
17+
[DataRow(@"\\server\share", true)]
18+
[DataRow("米库打油", false)]
19+
public void TestHttpAndUncValidate(string input, bool expected)
20+
{
21+
var validator = new HttpAndUncValidator();
22+
var result = validator.Validate(input);
23+
if (!result.IsValid)
24+
{
25+
foreach (var error in result.Errors)
26+
{
27+
TestContext.WriteLine(error.ErrorMessage);
28+
}
29+
}
30+
Assert.AreEqual(expected, result.IsValid);
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class HttpValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow("https://suki.ink", true)]
14+
[DataRow("http://ce.pclc.cc", true)]
15+
[DataRow("-10", false)]
16+
[DataRow("ftp://www.example.com", false)]
17+
[DataRow(@"\\server\share", false)]
18+
[DataRow("米库打油", false)]
19+
public void TestHttpValidate(string input, bool expected)
20+
{
21+
var validator = new HttpValidator();
22+
var result = validator.Validate(input);
23+
if (!result.IsValid)
24+
{
25+
foreach (var error in result.Errors)
26+
{
27+
TestContext.WriteLine(error.ErrorMessage);
28+
}
29+
}
30+
Assert.AreEqual(expected, result.IsValid);
31+
}
32+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class IntValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow("50", true)]
14+
[DataRow("114514", false)]
15+
[DataRow("-10", false)]
16+
[DataRow("1145141919810", false)]
17+
[DataRow("米库打油", false)]
18+
public void TestIntValidate(string input, bool expected)
19+
{
20+
var validator = new IntValidator(100, 0);
21+
var result = validator.Validate(input);
22+
if (!result.IsValid)
23+
{
24+
foreach (var error in result.Errors)
25+
{
26+
TestContext.WriteLine(error.ErrorMessage);
27+
}
28+
}
29+
Assert.AreEqual(expected, result.IsValid);
30+
}
31+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class NullOrEmptyValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow("", false)]
14+
[DataRow(" ", true)]
15+
[DataRow("葱包99", true)]
16+
public void TestNullOrEmptyValidate(string input, bool expected)
17+
{
18+
var validator = new NullOrEmptyValidator();
19+
var result = validator.Validate(input);
20+
if (!result.IsValid)
21+
{
22+
foreach (var error in result.Errors)
23+
{
24+
TestContext.WriteLine(error.ErrorMessage);
25+
}
26+
}
27+
Assert.AreEqual(expected, result.IsValid);
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using PCL.Core.Utils.Validate;
3+
4+
namespace PCL.Core.Test.Validate;
5+
6+
[TestClass]
7+
public class NullOrWhiteSpaceValidatorTest
8+
{
9+
// ReSharper disable once UnusedAutoPropertyAccessor.Global
10+
public TestContext TestContext { get; set; }
11+
12+
[TestMethod]
13+
[DataRow("", false)]
14+
[DataRow(" ", false)]
15+
[DataRow("葱包99", true)]
16+
public void TestNullOrWhiteSpaceValidate(string input, bool expected)
17+
{
18+
var validator = new NullOrWhiteSpaceValidator();
19+
var result = validator.Validate(input);
20+
if (!result.IsValid)
21+
{
22+
foreach (var error in result.Errors)
23+
{
24+
TestContext.WriteLine(error.ErrorMessage);
25+
}
26+
}
27+
Assert.AreEqual(expected, result.IsValid);
28+
}
29+
}

PCL.Core/AssemblyInfo.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@
55
[assembly: XmlnsDefinition("https://ce.pclc.cc/core/ui/animation", "PCL.Core.UI.Animation.Core")]
66
[assembly: XmlnsDefinition("https://ce.pclc.cc/core/ui/animation", "PCL.Core.UI.Animation.Easings")]
77
[assembly: XmlnsPrefix("https://ce.pclc.cc/core/ui/animation", "ani")]
8+
9+
[assembly:XmlnsDefinition("https://ce.pclc.cc/core/utils/validate", "PCL.Core.Utils.Validate")]
10+
[assembly:XmlnsPrefix("https://ce.pclc.cc/core/utils/validate", "val")]
11+
812
[assembly: DisableRuntimeMarshalling]

0 commit comments

Comments
 (0)