mirror of
https://github.com/aphrody-labs/NuGet.Client.git
synced 2026-10-15 05:49:05 +00:00
475 lines
13 KiB
C#
475 lines
13 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.Collections.Immutable;
|
|
using FluentAssertions;
|
|
using Newtonsoft.Json;
|
|
using NuGet.LibraryModel;
|
|
using NuGet.Versioning;
|
|
using Xunit;
|
|
|
|
namespace NuGet.ProjectModel.Test
|
|
{
|
|
public class LockFileLibraryTests
|
|
{
|
|
[Fact]
|
|
public void LockFileLibrary_ComparesEqualPaths()
|
|
{
|
|
// Arrange
|
|
var libraryA = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0"
|
|
};
|
|
|
|
// same thing
|
|
var libraryB = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0"
|
|
};
|
|
|
|
// Act & Assert
|
|
Assert.True(libraryA.Equals(libraryB), "The two libraries should be equal.");
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_ComparesDifferentCasePaths()
|
|
{
|
|
// Arrange
|
|
var libraryA = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0"
|
|
};
|
|
|
|
// different case
|
|
var libraryB = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "somelibrary/1.0.0"
|
|
};
|
|
|
|
// Act & Assert
|
|
Assert.False(libraryA.Equals(libraryB), "The two libraries should not be equal.");
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_ComparesDifferentPaths()
|
|
{
|
|
// Arrange
|
|
var libraryA = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0"
|
|
};
|
|
|
|
// different thing
|
|
var libraryB = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = null
|
|
};
|
|
|
|
// Act & Assert
|
|
Assert.False(libraryA.Equals(libraryB), "The two libraries should not be equal.");
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_ComparesDifferentCaseFiles()
|
|
{
|
|
// Arrange
|
|
var libraryA = new LockFileLibrary
|
|
{
|
|
Files = ImmutableArray.Create<string>("path/a.txt", "path/b.txt")
|
|
};
|
|
|
|
// different case
|
|
var libraryB = new LockFileLibrary
|
|
{
|
|
Files = ImmutableArray.Create<string>("path/a.txt", "PATH/b.txt")
|
|
};
|
|
|
|
// Act & Assert
|
|
Assert.False(libraryA.Equals(libraryB), "The two libraries should not be equal.");
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_CloneIncludesAllProperties()
|
|
{
|
|
// Arrange
|
|
var original = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0",
|
|
IsServiceable = true,
|
|
MSBuildProject = "MSBuildProject",
|
|
Sha512 = "FAKE-HASH",
|
|
Type = LibraryType.Package,
|
|
Files = ImmutableArray.Create<string>("file/a.txt", "file/b.txt")
|
|
};
|
|
|
|
// Use Newtonsoft.Json to enumerate all properties.
|
|
var originalSerialized = JsonConvert.SerializeObject(original, Formatting.Indented);
|
|
|
|
// Act
|
|
var clone = original with { Name = original.Name };
|
|
|
|
// Assert
|
|
var cloneSerialized = JsonConvert.SerializeObject(original, Formatting.Indented);
|
|
Assert.Equal(originalSerialized, cloneSerialized);
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_CloneIsEqual()
|
|
{
|
|
// Arrange
|
|
var original = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0",
|
|
IsServiceable = true,
|
|
MSBuildProject = "MSBuildProject",
|
|
Sha512 = "FAKE-HASH",
|
|
Type = LibraryType.Package,
|
|
Files = ImmutableArray.Create<string>("file/a.txt", "file/b.txt")
|
|
};
|
|
|
|
// Act
|
|
var clone = original with { Name = original.Name };
|
|
|
|
// Assert
|
|
Assert.Equal(original, clone);
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_CloneReturnsDifferentInstance()
|
|
{
|
|
// Arrange
|
|
var original = new LockFileLibrary
|
|
{
|
|
Name = "SomeLibrary",
|
|
Version = new NuGetVersion("1.0.0"),
|
|
Path = "SomeLibrary/1.0.0",
|
|
IsServiceable = true,
|
|
MSBuildProject = "MSBuildProject",
|
|
Sha512 = "FAKE-HASH",
|
|
Type = LibraryType.Package,
|
|
Files = ImmutableArray.Create<string>("file/a.txt", "file/b.txt")
|
|
};
|
|
|
|
// Use Newtonsoft.Json to take a snapshot of all properties.
|
|
var originalSerializedBefore = JsonConvert.SerializeObject(original, Formatting.Indented);
|
|
|
|
// Act
|
|
var clone = original with { Name = original.Name };
|
|
|
|
// Assert
|
|
Assert.NotSame(original, clone);
|
|
|
|
var originalSerializedAfter = JsonConvert.SerializeObject(original, Formatting.Indented);
|
|
Assert.Equal(originalSerializedBefore, originalSerializedAfter);
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_EqualityEmpty()
|
|
{
|
|
// Arrange
|
|
var library1 = new LockFileLibrary();
|
|
var library2 = new LockFileLibrary();
|
|
|
|
// Act & Assert
|
|
Assert.True(library1.Equals(library2));
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_EqualityDiffersOnMSBuildPath()
|
|
{
|
|
// Arrange
|
|
var library1 = new LockFileLibrary()
|
|
{
|
|
MSBuildProject = "a"
|
|
};
|
|
|
|
var library2 = new LockFileLibrary()
|
|
{
|
|
MSBuildProject = "b"
|
|
};
|
|
|
|
// Act & Assert
|
|
Assert.False(library1.Equals(library2));
|
|
}
|
|
|
|
[Fact]
|
|
public void LockFileLibrary_EqualitySameMSBuildPath()
|
|
{
|
|
// Arrange
|
|
var library1 = new LockFileLibrary()
|
|
{
|
|
MSBuildProject = "b"
|
|
};
|
|
|
|
var library2 = new LockFileLibrary()
|
|
{
|
|
MSBuildProject = "b"
|
|
};
|
|
|
|
// Act & Assert
|
|
Assert.True(library1.Equals(library2));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("name", "name", true)]
|
|
[InlineData("NAME", "name", true)]
|
|
[InlineData("name", "name2", false)]
|
|
public void Equals_WithName(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
Name = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
Name = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("project", "project", true)]
|
|
[InlineData("PROJECT", "project", true)]
|
|
[InlineData("project", "package", false)]
|
|
public void Equals_WithType(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
Type = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
Type = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("1.0.0", "1.0.0", true)]
|
|
[InlineData("1.0.0-preview.1", "1.0.0-preview.1", true)]
|
|
[InlineData("1.0.0", "2.1.0", false)]
|
|
public void Equals_WithVersion(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
Version = NuGetVersion.Parse(left)
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
Version = NuGetVersion.Parse(right)
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(true, true, true)]
|
|
[InlineData(false, false, true)]
|
|
[InlineData(true, false, false)]
|
|
public void Equals_WithIsServiceable(bool left, bool right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
IsServiceable = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
IsServiceable = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(true, true, true)]
|
|
[InlineData(false, false, true)]
|
|
[InlineData(true, false, false)]
|
|
public void Equals_WithHasTools(bool left, bool right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
HasTools = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
HasTools = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("project", "project", true)]
|
|
[InlineData("project", "PROJECT", false)]
|
|
[InlineData("project", "package", false)]
|
|
public void Equals_WithPath(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
Path = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
Path = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("project", "project", true)]
|
|
[InlineData("project", "PROJECT", false)]
|
|
[InlineData("project", "package", false)]
|
|
public void Equals_WithMSBuildProject(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
MSBuildProject = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
MSBuildProject = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("project", "project", true)]
|
|
[InlineData("project", "PROJECT", false)]
|
|
[InlineData("project", "package", false)]
|
|
public void Equals_WithSha512(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
Sha512 = left
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
Sha512 = right
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("project", "project", true)]
|
|
[InlineData("PROJECT", "project", false)]
|
|
[InlineData("project", "package", false)]
|
|
[InlineData("project;project2", "project2;project", true)]
|
|
[InlineData("project;project2", "project;project2;project3", false)]
|
|
public void Equals_WithFiles(string left, string right, bool expected)
|
|
{
|
|
var leftSide = new LockFileLibrary()
|
|
{
|
|
Files = left.Split(';').ToImmutableArray()
|
|
};
|
|
|
|
var rightSide = new LockFileLibrary()
|
|
{
|
|
Files = right.Split(';').ToImmutableArray()
|
|
};
|
|
|
|
// Act & Assert
|
|
if (expected)
|
|
{
|
|
leftSide.Should().Be(rightSide);
|
|
}
|
|
else
|
|
{
|
|
leftSide.Should().NotBe(rightSide);
|
|
}
|
|
}
|
|
}
|
|
}
|