using System; using UnitTestSharp; namespace Amphora.UnitTests { public class FailureKindTests : TestFixture { public class CtorTests : TestFixture { public void KeepsTheName() { var kind = new MessageFailureKind("Amphora.UnitTests.Named", "message"); CheckEqual("Amphora.UnitTests.Named", kind.Name); } public void IdIsTheNamesId() { var kind = new MessageFailureKind("Amphora.UnitTests.Named", "message"); CheckEqual(FailureKind.IdOf("Amphora.UnitTests.Named"), kind.Id); } public void NullName_Throws() { CheckThrow(typeof(ArgumentNullException)); new MessageFailureKind(name: null, message: "message"); } } public class IdOfTests : TestFixture { public void Empty_IsTheOffsetBasis() { CheckEqual(0xcbf29ce484222325UL, FailureKind.IdOf("")); } public void Ascii_HashesBothBytesOfEachCharacter() { CheckEqual(0x089be207b544f1e4UL, FailureKind.IdOf("a")); } public void NamespacedName_MatchesItsGoldenValue() { CheckEqual(0x9727bcbc5d7e3cb7UL, FailureKind.IdOf("Glass.FileSystem.NotFound")); } public void NonAscii_HashesTheLowByteFirst() { CheckEqual(0x07d03807b4981da2UL, FailureKind.IdOf(((char)0x4E2D).ToString())); } public void View_HashesOnlyItsOwnCharacters() { CheckEqual(FailureKind.IdOf("a"), FailureKind.IdOf(new StringView("bac", 1, 2))); } public void AllocatesNothing() { CheckEqual(0L, Allocations.During( () => Allocations.IdSink = FailureKind.IdOf("Glass.FileSystem.NotFound"))); } } public class CanSerializeReferenceTests : TestFixture { public void Null_IsTrue() { CheckTrue(FailureTestKinds.Unreachable.CanSerializeReference(null)); } public void String_IsTrue() { CheckTrue(FailureTestKinds.Unreachable.CanSerializeReference("ref")); } public void OtherObject_IsFalse() { CheckFalse(FailureTestKinds.Unreachable.CanSerializeReference(new object())); } } } }