using System; using UnitTestSharp; namespace Glass.UnitTests { public class FileNamePatternTests : TestFixture { public class CtorTests : TestFixture { public void Always_KeepsTheTextWithoutItsEdgeSpaces() { CheckEqual("*.sav", new FileNamePattern(" *.sav ").Text); } public void SeveralNames_AreKeptWhole() { CheckEqual("*.sav; *.txt", new FileNamePattern("*.sav; *.txt").Text); } public void NullText_Throws() { CheckThrow(typeof(ArgumentNullException)); new FileNamePattern(null); } public void EmptyText_Throws() { CheckThrow(typeof(ArgumentException)); new FileNamePattern(string.Empty); } public void OnlySemicolonsAndSpaces_Throws() { CheckThrow(typeof(ArgumentException)); new FileNamePattern(" ; ;"); } } public class HasWildcardTests : TestFixture { public void AStar_IsOne() { CheckTrue(FileNamePattern.HasWildcard("a*")); } public void AQuestionMark_IsOne() { CheckTrue(FileNamePattern.HasWildcard("a?b")); } public void PlainText_IsNot() { CheckFalse(FileNamePattern.HasWildcard("notes.txt")); } public void EmptyText_IsNot() { CheckFalse(FileNamePattern.HasWildcard(string.Empty)); } } public class FitsTests : TestFixture { public void AStarLeadingAnExtension_FitsEveryNameWithIt() { CheckTrue(FileNamePattern.Fits("*.sav", "game.sav")); CheckTrue(FileNamePattern.Fits("*.sav", ".sav")); CheckFalse(FileNamePattern.Fits("*.sav", "game.txt")); CheckFalse(FileNamePattern.Fits("*.sav", "sav")); } public void AQuestionMark_FitsExactlyOneCharacter() { CheckTrue(FileNamePattern.Fits("slot?.sav", "slot1.sav")); CheckFalse(FileNamePattern.Fits("slot?.sav", "slot.sav")); CheckFalse(FileNamePattern.Fits("slot?.sav", "slot12.sav")); } public void Case_IsIgnored() { CheckTrue(FileNamePattern.Fits("*.SAV", "game.sav")); CheckTrue(FileNamePattern.Fits("game.*", "GAME.txt")); } public void ANameWithNoWildcard_FitsOnlyItself() { CheckTrue(FileNamePattern.Fits("notes.txt", "Notes.TXT")); CheckFalse(FileNamePattern.Fits("notes.txt", "notes.txt2")); CheckFalse(FileNamePattern.Fits("notes.txt", "my notes.txt")); } public void StarDotStar_FitsANameWithNoDot() { CheckTrue(FileNamePattern.Fits("*.*", "README")); } public void AStarInTheMiddle_FitsNothingToAnyRun() { CheckTrue(FileNamePattern.Fits("a*c", "ac")); CheckTrue(FileNamePattern.Fits("a*c", "abbbc")); CheckFalse(FileNamePattern.Fits("a*c", "abbb")); } public void AStarThatMustGiveBackCharacters_StillFits() { CheckTrue(FileNamePattern.Fits("a*ab", "aaab")); } public void StarsInARow_ActAsOne() { CheckTrue(FileNamePattern.Fits("a**b", "axxb")); CheckTrue(FileNamePattern.Fits("ab**", "ab")); } public void ALoneStar_FitsTheEmptyName() { CheckTrue(FileNamePattern.Fits("*", string.Empty)); } public void ALoneQuestionMark_DoesNotFitTheEmptyName() { CheckFalse(FileNamePattern.Fits("?", string.Empty)); } public void ANameShorterThanThePattern_DoesNotFit() { CheckFalse(FileNamePattern.Fits("abc", "ab")); } public void ANameLongerThanThePattern_DoesNotFit() { CheckFalse(FileNamePattern.Fits("ab", "abc")); } } public class MatchesTests : TestFixture { public void AnyOfSeveralNames_Fits() { var pattern = new FileNamePattern("*.sav; notes.txt"); CheckTrue(pattern.Matches("slot.sav")); CheckTrue(pattern.Matches("notes.txt")); CheckFalse(pattern.Matches("other.txt")); } public void BlankNamesBetweenSemicolons_AreLeftOut() { var pattern = new FileNamePattern(";*.sav;;"); CheckTrue(pattern.Matches("slot.sav")); CheckFalse(pattern.Matches(string.Empty)); } } } }