using System.Collections.Immutable; using System.Linq; using UnitTestSharp; namespace Vellum.Generator.UnitTests { public class TypePartTests : TestFixture { public static TypePart Part(string name = "Foo", string openName = null, PartKind kind = PartKind.Plain, int firstChild = 1, int childCount = 0, string[] familyNames = null) { return new TypePart(name, openName, kind, firstChild, childCount, new EquatableArray((familyNames ?? new string[0]).ToImmutableArray())); } public class CtorTests : TestFixture { public void KeepsEveryArgument() { TypePart part = Part("Box", "Box", PartKind.Generic, 3, 1, new[] { "Box" }); CheckEqual(new[] { "Box" }, part.FamilyNames.Items.ToArray()); CheckEqual("Box", part.Name); CheckEqual("Box", part.OpenName); CheckEqual(PartKind.Generic, part.Kind); CheckEqual(3, part.FirstChild); CheckEqual(1, part.ChildCount); } } public class EqualsTests : TestFixture { public void SameValues_AreEqual() { CheckTrue(Part().Equals(Part())); CheckTrue(Part().Equals((object)Part())); } public void Null_IsNotEqual() { CheckFalse(Part().Equals((TypePart)null)); CheckFalse(Part().Equals((object)null)); } public void OtherType_IsNotEqual() { CheckFalse(Part().Equals("Foo")); } public void DifferentName_IsNotEqual() { CheckFalse(Part().Equals(Part(name: "Bar"))); } public void DifferentOpenName_IsNotEqual() { CheckFalse(Part().Equals(Part(openName: "Box"))); } public void DifferentKind_IsNotEqual() { CheckFalse(Part().Equals(Part(kind: PartKind.Whole))); } public void DifferentFirstChild_IsNotEqual() { CheckFalse(Part().Equals(Part(firstChild: 2))); } public void DifferentChildCount_IsNotEqual() { CheckFalse(Part().Equals(Part(childCount: 1))); } public void DifferentBaseArguments_AreNotEqual() { var other = new TypePart("Foo", null, PartKind.Plain, 1, 0, default, new EquatableArray(ImmutableArray.Create(BaseArgumentsTests.Variant()))); CheckFalse(Part().Equals(other)); } public void DifferentFamilyNames_AreNotEqual() { CheckFalse(Part().Equals(Part(familyNames: new[] { "Foo" }))); } } public class GetHashCodeTests : TestFixture { public void EqualParts_HaveEqualHashCodes() { CheckEqual(Part().GetHashCode(), Part().GetHashCode()); } } } }