fix: PathPicker's File Filtering Function malfunctions (#786)
* fix: PathPicker's File Filtering Function malfunctions Regular expression validation for adding parameters; the sample reference content is as follows: [Name,Pattern] → True [123,.exe,.pdb] → True [All] → True [ImageAll] → True [11,*.txt] → True *.123 → False *.txt → False .png → False [*.txt] → False [.txt] → False [a] → True [a,b] → True [a,b,c] → True [a,*] → True [a,.] → True [*] → False [.] → False [a,] → False [,a] → False [] → False [a,b,] → False [a,,b] → False [a*b] → False [a.b] → False * Add PathPicker regex validation and headless tests Introduces regex-based validation for the PathPicker FileFilter property, supporting both NETSTANDARD2_0 and NET8_0 with conditional compilation. Adds headless UI tests and supporting test views to verify correct and incorrect filter patterns. * Refactor PathPicker tests and update accessibility Moved PathPicker unit tests from HeadlessTest.Ursa to Test.Ursa, removing UI-dependent test files and replacing them with direct unit tests for ParseFileTypes. Updated PathPicker.cs to make ParseFileTypes internal for improved testability and adjusted regex method accessibility. Updated project file to remove references to deleted test files. * Update HeadlessTest.Ursa.csproj * Update src/Ursa/Controls/PathPicker/PathPicker.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -28,5 +28,4 @@
|
||||
<ProjectReference Include="..\..\src\Ursa\Ursa.csproj" />
|
||||
<ProjectReference Include="..\..\src\Ursa.Themes.Semi\Ursa.Themes.Semi.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
47
tests/Test.Ursa/PathPickerTests/PathPickerTests.cs
Normal file
47
tests/Test.Ursa/PathPickerTests/PathPickerTests.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace Test.Ursa.PathPickerTests;
|
||||
|
||||
public class PathPickerTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData(".123")]
|
||||
[InlineData(".txt")]
|
||||
[InlineData(".png")]
|
||||
[InlineData("[.txt]")]
|
||||
[InlineData("[]")]
|
||||
[InlineData("[.]")]
|
||||
[InlineData("[a,]")]
|
||||
[InlineData("[,a]")]
|
||||
[InlineData("[a,b,]")]
|
||||
[InlineData("[a,,b]")]
|
||||
[InlineData("[a*b]")]
|
||||
[InlineData("[a.b]")]
|
||||
public void ParseFileTypes_InvalidInputs_ThrowsArgumentException(string input)
|
||||
{
|
||||
var exception = Assert.Throws<ArgumentException>(() => PathPicker.ParseFileTypes(input));
|
||||
Assert.Contains("Invalid parameter, please refer to the following content", exception.Message);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("[Name,Pattern]")]
|
||||
[InlineData("[123,.exe,.pdb]")]
|
||||
[InlineData("[All]")]
|
||||
[InlineData("[ImageAll]")]
|
||||
[InlineData("[11,.txt]")]
|
||||
[InlineData("[a]")]
|
||||
[InlineData("[a,b]")]
|
||||
[InlineData("[a,b,c]")]
|
||||
[InlineData("[a,.]")]
|
||||
public void ParseFileTypes_ValidInputs_DoesNotThrow(string input)
|
||||
{
|
||||
try
|
||||
{
|
||||
PathPicker.ParseFileTypes(input);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Assert.Fail($"It is expected not to throw an exception, but actually throws one :{ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user