76 lines
2.9 KiB
C#
76 lines
2.9 KiB
C#
using Paca.Core.Config;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class WorkspaceEncodingSanitizerTests
|
|
{
|
|
[Fact]
|
|
public void IsCorrupted_ReturnsTrue_ForUnicodeReplacementAndMojibake()
|
|
{
|
|
// Corrupted characters found in real user config.json
|
|
string corrupted1 = "\uFFFD\u06FE\uFFFD";
|
|
string corrupted2 = "\uFFFD\uFFFD\uFFFD\uFFFD";
|
|
string corrupted3 = "\uFFFD\u043D\uFFFD";
|
|
string corrupted4 = "??";
|
|
string empty = " ";
|
|
|
|
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted1));
|
|
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted2));
|
|
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted3));
|
|
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted4));
|
|
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(empty));
|
|
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(null));
|
|
}
|
|
|
|
[Fact]
|
|
public void IsCorrupted_ReturnsFalse_ForValidKoreanAndEnglishNames()
|
|
{
|
|
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("작업"));
|
|
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("개인"));
|
|
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("학습"));
|
|
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("기본"));
|
|
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("Work"));
|
|
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("Research 2026"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Sanitize_ReplacesAllCorruptedNamesWithCleanDefaults()
|
|
{
|
|
var corruptedList = new List<string> { "\uFFFD\u06FE\uFFFD", "\uFFFD\uFFFD\uFFFD\uFFFD", "\uFFFD\u043D\uFFFD" };
|
|
var sanitized = WorkspaceConfigSanitizer.Sanitize(corruptedList);
|
|
|
|
Assert.NotNull(sanitized);
|
|
Assert.NotEmpty(sanitized);
|
|
Assert.All(sanitized, name => Assert.False(WorkspaceConfigSanitizer.IsCorrupted(name)));
|
|
Assert.Contains("작업", sanitized);
|
|
Assert.Contains("개인", sanitized);
|
|
Assert.Contains("학습", sanitized);
|
|
}
|
|
|
|
[Fact]
|
|
public void Sanitize_PreservesValidNamesAndFiltersCorrupted()
|
|
{
|
|
var mixedList = new List<string> { "프로젝트A", "\uFFFD\u06FE\uFFFD", "디자인" };
|
|
var sanitized = WorkspaceConfigSanitizer.Sanitize(mixedList);
|
|
|
|
Assert.Equal(2, sanitized.Count);
|
|
Assert.Equal("프로젝트A", sanitized[0]);
|
|
Assert.Equal("디자인", sanitized[1]);
|
|
}
|
|
|
|
[Fact]
|
|
public void AppConfig_Sanitize_CleansCorruptedWorkspaceNames()
|
|
{
|
|
var config = new AppConfig
|
|
{
|
|
WorkspaceNames = new List<string> { "\uFFFD\u06FE\uFFFD", "\uFFFD\uFFFD\uFFFD\uFFFD" }
|
|
};
|
|
|
|
config.Sanitize();
|
|
|
|
Assert.NotNull(config.WorkspaceNames);
|
|
Assert.All(config.WorkspaceNames, name => Assert.False(WorkspaceConfigSanitizer.IsCorrupted(name)));
|
|
Assert.Equal("작업", config.WorkspaceNames[0]);
|
|
}
|
|
}
|