50 lines
2.1 KiB
C#
50 lines
2.1 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.IO;
|
|
using NUnit.Framework;
|
|
|
|
namespace GameCult.Caching.Tests
|
|
{
|
|
// The one place a C#-written vector directory is found, written and compared. The C# reference is the only writer
|
|
// (CULTCACHE_WRITE_VECTORS=1, never set in CI); every other run reads the committed bytes and compares them byte for byte.
|
|
internal static class VectorFiles
|
|
{
|
|
private const string WriteVariable = "CULTCACHE_WRITE_VECTORS";
|
|
|
|
internal static readonly DateTimeOffset StoredAt = new(2026, 1, 1, 0, 0, 0, TimeSpan.Zero);
|
|
|
|
internal static bool Writing => Environment.GetEnvironmentVariable(WriteVariable) == "1";
|
|
|
|
internal static string Directory(string vector)
|
|
{
|
|
for (var dir = new DirectoryInfo(TestContext.CurrentContext.TestDirectory); dir != null; dir = dir.Parent)
|
|
{
|
|
var vectors = System.IO.Path.Combine(dir.FullName, "tests", "vectors");
|
|
if (System.IO.Directory.Exists(vectors)) return System.IO.Path.Combine(vectors, vector);
|
|
}
|
|
|
|
throw new DirectoryNotFoundException($"tests/vectors not found above {TestContext.CurrentContext.TestDirectory}.");
|
|
}
|
|
|
|
internal static void Check(string vector, string name, byte[] reference)
|
|
{
|
|
var path = System.IO.Path.Combine(Directory(vector), name);
|
|
if (Writing)
|
|
{
|
|
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path)!);
|
|
File.WriteAllBytes(path, reference);
|
|
return;
|
|
}
|
|
|
|
Assert.That(File.Exists(path), Is.True, $"vector {name} is committed");
|
|
Assert.That(Convert.ToHexString(reference), Is.EqualTo(Convert.ToHexString(File.ReadAllBytes(path))), $"vector {name}");
|
|
}
|
|
|
|
internal static byte[] Committed(string vector, string name)
|
|
{
|
|
var path = System.IO.Path.Combine(Directory(vector), name);
|
|
Assert.That(File.Exists(path), Is.True, $"vector {name} is committed");
|
|
return File.ReadAllBytes(path);
|
|
}
|
|
}
|
|
}
|