Files
Ursa.Avalonia/tests/Test.Ursa/PathPickerTests/PathPickerTests.cs
Juster Zhu c6ac019a4e 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>
2025-10-21 23:03:11 +08:00

47 lines
1.3 KiB
C#

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