Implement diff-reporter PoC (#5)
This commit is contained in:
98
tests/Recordingtest.DiffReporter.Tests/DifferTests.cs
Normal file
98
tests/Recordingtest.DiffReporter.Tests/DifferTests.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
using System.Text.Json;
|
||||
using Recordingtest.DiffReporter;
|
||||
using Xunit;
|
||||
|
||||
namespace Recordingtest.DiffReporter.Tests;
|
||||
|
||||
public class DifferTests
|
||||
{
|
||||
private static string TempDir()
|
||||
{
|
||||
var d = Path.Combine(Path.GetTempPath(), "diffrep-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(d);
|
||||
return d;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Identical_JsonFiles_ReturnsIdentical()
|
||||
{
|
||||
var dir = TempDir();
|
||||
var a = Path.Combine(dir, "a.json");
|
||||
var b = Path.Combine(dir, "b.json");
|
||||
File.WriteAllText(a, "{\"x\":1,\"y\":\"hi\"}");
|
||||
File.WriteAllText(b, "{\"x\":1,\"y\":\"hi\"}");
|
||||
var r = Differ.Compare(a, b);
|
||||
Assert.True(r.Identical);
|
||||
Assert.Empty(r.Hunks);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OneFieldChanged_JsonFiles_OneHunk()
|
||||
{
|
||||
var dir = TempDir();
|
||||
var a = Path.Combine(dir, "a.json");
|
||||
var b = Path.Combine(dir, "b.json");
|
||||
File.WriteAllText(a, "{\"x\":1,\"y\":\"hi\"}");
|
||||
File.WriteAllText(b, "{\"x\":2,\"y\":\"hi\"}");
|
||||
var r = Differ.Compare(a, b);
|
||||
Assert.False(r.Identical);
|
||||
Assert.Single(r.Hunks);
|
||||
Assert.Equal("changed", r.Hunks[0].Kind);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BinaryDiff_ReturnsHexSummary()
|
||||
{
|
||||
var dir = TempDir();
|
||||
var a = Path.Combine(dir, "a.bin");
|
||||
var b = Path.Combine(dir, "b.bin");
|
||||
File.WriteAllBytes(a, new byte[] { 0x00, 0x01, 0x02, 0xFF, 0x80 });
|
||||
File.WriteAllBytes(b, new byte[] { 0x00, 0x01, 0x03, 0xFE, 0x80 });
|
||||
var r = Differ.Compare(a, b);
|
||||
Assert.False(r.Identical);
|
||||
Assert.NotEmpty(r.Hunks);
|
||||
foreach (var h in r.Hunks)
|
||||
{
|
||||
// hex strings only
|
||||
Assert.Matches("^[0-9A-F]*$", h.Before);
|
||||
Assert.Matches("^[0-9A-F]*$", h.After);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Cli_IdenticalFiles_ExitZero_And_DiffJsonExists()
|
||||
{
|
||||
var dir = TempDir();
|
||||
var a = Path.Combine(dir, "a.json");
|
||||
var b = Path.Combine(dir, "b.json");
|
||||
File.WriteAllText(a, "{\"x\":1}");
|
||||
File.WriteAllText(b, "{\"x\":1}");
|
||||
var outDir = Path.Combine(dir, "out");
|
||||
var code = Cli.Program.Main(new[] { "--approved", a, "--received", b, "--out", outDir });
|
||||
Assert.Equal(0, code);
|
||||
Assert.True(File.Exists(Path.Combine(outDir, "diff.json")));
|
||||
Assert.True(File.Exists(Path.Combine(outDir, "diff.md")));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TriageReadable_DiffJson_CanBeParsed()
|
||||
{
|
||||
var dir = TempDir();
|
||||
var a = Path.Combine(dir, "a.json");
|
||||
var b = Path.Combine(dir, "b.json");
|
||||
File.WriteAllText(a, "{\"x\":1}");
|
||||
File.WriteAllText(b, "{\"x\":2}");
|
||||
var outDir = Path.Combine(dir, "out");
|
||||
var code = Cli.Program.Main(new[] { "--approved", a, "--received", b, "--out", outDir });
|
||||
Assert.Equal(1, code);
|
||||
var json = File.ReadAllText(Path.Combine(outDir, "diff.json"));
|
||||
using var doc = JsonDocument.Parse(json);
|
||||
var root = doc.RootElement;
|
||||
Assert.True(root.TryGetProperty("file", out _));
|
||||
Assert.True(root.TryGetProperty("hunks", out _));
|
||||
Assert.True(root.TryGetProperty("summary", out var summary));
|
||||
Assert.True(summary.TryGetProperty("added", out _));
|
||||
Assert.True(summary.TryGetProperty("removed", out _));
|
||||
Assert.True(summary.TryGetProperty("changed", out _));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user