using Amphora; using UnitTestSharp; namespace Glass.UnitTests { public class InvalidFileNameKindTests : TestFixture { public static readonly InvalidFileNameKind Kind = FileSystemFailures.InvalidName; public class ReadTests : TestFixture { public void ReturnsEveryPartItFailedWith() { Status status = Kind.Fail(new InvalidFileName(FileNameProblem.ForbiddenCharacter, "a:b", ':')); InvalidFileName problem = Kind.Read(status); CheckEqual(FileNameProblem.ForbiddenCharacter, problem.Problem); CheckEqual("a:b", problem.Name); CheckEqual(':', problem.Character); } public void HighCharacter_SurvivesThePacking() { var wide = (char)0xFFFF; Status status = Kind.Fail(new InvalidFileName(FileNameProblem.ControlCharacter, "x", wide)); InvalidFileName problem = Kind.Read(status); CheckEqual(FileNameProblem.ControlCharacter, problem.Problem); CheckEqual(wide, problem.Character); } } public class DescribeTests : TestFixture { [IgnoreTest] private string Describe(FileNameProblem problem, string name, char character = '\0') { return Kind.Fail(new InvalidFileName(problem, name, character)).Describe(); } public void Blank_SaysANameCantBeEmpty() { CheckEqual("A name can't be empty.", Describe(FileNameProblem.Blank, " ")); } public void DotName_QuotesTheName() { CheckEqual("'..' isn't a name.", Describe(FileNameProblem.DotName, "..")); } public void ForbiddenCharacter_QuotesTheCharacter() { CheckEqual("A name can't contain '/'.", Describe(FileNameProblem.ForbiddenCharacter, "a/b", '/')); } public void ControlCharacter_SaysSoWithoutShowingIt() { CheckEqual("A name can't contain control characters.", Describe(FileNameProblem.ControlCharacter, "a\tb", '\t')); } public void ProblemThisVersionDoesntKnow_QuotesTheName() { CheckEqual("'odd' isn't a valid name.", Describe((FileNameProblem)99, "odd")); } } } }