mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-18 14:37:19 +08:00
58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using AtomUI.Generator.Localization.Xliff;
|
|
using Microsoft.CodeAnalysis.Diagnostics;
|
|
using Shouldly;
|
|
using Xunit;
|
|
using static AtomUI.Generator.Tests.Localization.LocalizationGeneratorTestHost;
|
|
|
|
namespace AtomUI.Generator.Tests.Localization;
|
|
|
|
public class LanguageFileMetadataValidatorTests
|
|
{
|
|
[Fact]
|
|
public void Validator_Keeps_Contract_Mode_Separate_From_Activation_State()
|
|
{
|
|
var parsed = AdditionalLanguageFileParser.Parse(
|
|
new TestAdditionalText("packages/Test.Package.I18n.JaJP/ja-JP.xlf", ValidXliff),
|
|
TestContext.Current.CancellationToken);
|
|
var metadata = new Dictionary<string, string>(StringComparer.Ordinal)
|
|
{
|
|
[LanguageGeneratorOptions.SourceKindMetadata] = "StaticLanguagePack",
|
|
[LanguageGeneratorOptions.SourceIdentityMetadata] = "Test.Package.I18n.JaJP",
|
|
[LanguageGeneratorOptions.ModuleIdMetadata] = "Test.Package",
|
|
[LanguageGeneratorOptions.ContractValidationMetadata] = "Deferred",
|
|
[LanguageGeneratorOptions.SourceFingerprintMetadata] = SourceFingerprint
|
|
};
|
|
|
|
var result = LanguageFileMetadataValidator.Validate(
|
|
parsed.File.ShouldNotBeNull(),
|
|
new TestOptions(metadata),
|
|
defaultModuleId: "Test.Package");
|
|
|
|
result.Diagnostics.ShouldBeEmpty();
|
|
result.Input.ShouldNotBeNull().ContractValidation.ShouldBe(LanguageFileContractValidation.Deferred);
|
|
result.Input.ShouldNotBeOfType<LanguageInputResolution>();
|
|
}
|
|
|
|
private sealed class TestOptions(
|
|
IReadOnlyDictionary<string, string> values) : AnalyzerConfigOptions
|
|
{
|
|
public override bool TryGetValue(string key, out string value)
|
|
{
|
|
return values.TryGetValue(key, out value!);
|
|
}
|
|
}
|
|
|
|
private const string SourceFingerprint =
|
|
"ba7998290ad9e6a1345542058a39d88bd6023f5b1371fa184a89c6457e539041";
|
|
|
|
private const string ValidXliff = """
|
|
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.1" srcLang="en-US" trgLang="ja-JP">
|
|
<file id="TestApp.Localization.LoginLangResourceKind">
|
|
<unit id="Title">
|
|
<segment><source>Sign in</source><target state="final">サインイン</target></segment>
|
|
</unit>
|
|
</file>
|
|
</xliff>
|
|
""";
|
|
}
|