mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-26 11:10:34 +08:00
76 lines
3.0 KiB
C#
76 lines
3.0 KiB
C#
using AtomUI.Docs.LLMsGenerator.Catalog;
|
|
using AtomUI.Docs.LLMsGenerator.Config;
|
|
using AtomUI.Docs.LLMsGenerator.Reader;
|
|
using AtomUI.Docs.LLMsGenerator.Verification;
|
|
using AtomUI.Docs.LLMsGenerator.Writers;
|
|
using Shouldly;
|
|
using Xunit;
|
|
|
|
namespace AtomUI.Docs.LLMsGenerator.Tests;
|
|
|
|
public class LLMsVerifierTests
|
|
{
|
|
[Fact]
|
|
public void SourceVerifierAcceptsNormalizedButtonDocs()
|
|
{
|
|
var model = ReadButtonModel();
|
|
|
|
var diagnostics = LLMsVerifier.ValidateSource(model);
|
|
|
|
diagnostics.ShouldBeEmpty();
|
|
}
|
|
|
|
[Fact]
|
|
public void GeneratedContentVerifierRejectsStalePathsPlaceholdersAndForbiddenNames()
|
|
{
|
|
var content = $"""
|
|
# Broken
|
|
|
|
Generated output contains components/button/index-cn.md.
|
|
TODO: fill this in.
|
|
{ForbiddenExternalName()}
|
|
""";
|
|
|
|
var diagnostics = LLMsVerifier.ValidateGeneratedContent("docs/AI/generated/llms/controls/button/index-cn.md", content);
|
|
|
|
diagnostics.ShouldContain(diagnostic => diagnostic.Contains("generated marker", StringComparison.OrdinalIgnoreCase));
|
|
diagnostics.ShouldContain(diagnostic => diagnostic.Contains("stale component path", StringComparison.OrdinalIgnoreCase));
|
|
diagnostics.ShouldContain(diagnostic => diagnostic.Contains("placeholder", StringComparison.OrdinalIgnoreCase));
|
|
diagnostics.ShouldContain(diagnostic => diagnostic.Contains("forbidden external project name", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
[Fact]
|
|
public void GeneratedOutputVerifierRejectsStaleFilesOnDisk()
|
|
{
|
|
var directory = Directory.CreateTempSubdirectory("atomui-llms-verify-");
|
|
var expected = new GeneratedLLMsFile("docs/AI/generated/llms/llms.txt", "# Index\n\n" + LLMsWriterConstants.GeneratedMarker + "\n");
|
|
var stalePath = Path.Combine(directory.FullName, "docs/AI/generated/llms/controls/stale/index-cn.md");
|
|
Directory.CreateDirectory(Path.GetDirectoryName(stalePath)!);
|
|
File.WriteAllText(stalePath, "stale");
|
|
|
|
var diagnostics = LLMsVerifier.VerifyGeneratedFiles(directory.FullName, [expected]);
|
|
|
|
diagnostics.ShouldContain(diagnostic => diagnostic.Contains("stale generated file", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
private static ControlDocModel ReadButtonModel()
|
|
{
|
|
var config = LLMsGeneratorConfigReader.Read(Path.Combine(TestRepository.RootPath, "docs/AI/generated/llms.config.json"));
|
|
var controls = config.ControlSets
|
|
.SelectMany(controlSet => ControlInventory.Discover(
|
|
TestRepository.RootPath,
|
|
controlSet,
|
|
config.OutputRoot,
|
|
config.DefaultLanguage))
|
|
.ToArray();
|
|
|
|
var button = controls.Single(control => control.Name == "button");
|
|
return ControlDocReader.Read(TestRepository.RootPath, button);
|
|
}
|
|
|
|
private static string ForbiddenExternalName()
|
|
{
|
|
return "Ant" + " " + "Design";
|
|
}
|
|
}
|