174 lines
4.7 KiB
C#
174 lines
4.7 KiB
C#
using JdeScoping.ConfigManager.Services;
|
|
|
|
namespace JdeScoping.ConfigManager.Tests.Services;
|
|
|
|
public class DiffServiceTests
|
|
{
|
|
private readonly DiffService _sut;
|
|
|
|
public DiffServiceTests()
|
|
{
|
|
_sut = new DiffService();
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithNoChanges_ReturnsEmptyDiff()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2\nline3";
|
|
var modified = "line1\nline2\nline3";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithChanges_ReturnsDiffLines()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2\nline3";
|
|
var modified = "line1\nmodified\nline3";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeTrue();
|
|
result.Lines.ShouldNotBeEmpty();
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithAddedLine_ReportsInsertion()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2";
|
|
var modified = "line1\nline2\nline3";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeTrue();
|
|
result.Insertions.ShouldBe(1);
|
|
result.Deletions.ShouldBe(0);
|
|
result.Lines.ShouldContain(l => l.Type == DiffLineType.Added && l.Text == "line3");
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithRemovedLine_ReportsDeletion()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2\nline3";
|
|
var modified = "line1\nline3";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeTrue();
|
|
result.Deletions.ShouldBe(1);
|
|
result.Lines.ShouldContain(l => l.Type == DiffLineType.Removed && l.Text == "line2");
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithModifiedLine_ReportsAdditionAndDeletion()
|
|
{
|
|
// Arrange
|
|
var original = "line1\noriginal\nline3";
|
|
var modified = "line1\nchanged\nline3";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeTrue();
|
|
result.Insertions.ShouldBeGreaterThan(0);
|
|
result.Deletions.ShouldBeGreaterThan(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithEmptyOriginal_ReportsAllAsInsertions()
|
|
{
|
|
// Arrange
|
|
var original = "";
|
|
var modified = "line1\nline2";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeTrue();
|
|
result.Insertions.ShouldBeGreaterThan(0);
|
|
result.Deletions.ShouldBe(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_WithEmptyModified_ReportsAllAsDeletions()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2";
|
|
var modified = "";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
result.HasChanges.ShouldBeTrue();
|
|
result.Insertions.ShouldBe(0);
|
|
result.Deletions.ShouldBeGreaterThan(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_LineNumbers_AreCorrectForUnchangedLines()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2\nline3";
|
|
var modified = "line1\nline2\nline3";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
var firstLine = result.Lines.First();
|
|
firstLine.OldLineNumber.ShouldBe(1);
|
|
firstLine.NewLineNumber.ShouldBe(1);
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_AddedLine_HasNullOldLineNumber()
|
|
{
|
|
// Arrange
|
|
var original = "line1";
|
|
var modified = "line1\nline2";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
var addedLine = result.Lines.FirstOrDefault(l => l.Type == DiffLineType.Added);
|
|
addedLine.ShouldNotBeNull();
|
|
addedLine.OldLineNumber.ShouldBeNull();
|
|
addedLine.NewLineNumber.ShouldNotBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void GenerateDiff_RemovedLine_HasNullNewLineNumber()
|
|
{
|
|
// Arrange
|
|
var original = "line1\nline2";
|
|
var modified = "line1";
|
|
|
|
// Act
|
|
var result = _sut.GenerateDiff(original, modified);
|
|
|
|
// Assert
|
|
var removedLine = result.Lines.FirstOrDefault(l => l.Type == DiffLineType.Removed);
|
|
removedLine.ShouldNotBeNull();
|
|
removedLine.OldLineNumber.ShouldNotBeNull();
|
|
removedLine.NewLineNumber.ShouldBeNull();
|
|
}
|
|
}
|