using System; using System.Collections.Generic; using System.IO; using UnitTestSharp; namespace Vellum.UnitTests { public class SavedComparerTests : TestFixture { /// /// A comparer no save can name, which calls every pair of values equal. /// public class EveryoneEqual : IEqualityComparer { public bool Equals(ItemType left, ItemType right) { return true; } public int GetHashCode(ItemType value) { return 0; } } public static SaveNode WrittenFor(IEqualityComparer comparer) { SaveNode returnMe = SaveNode.NewTable(); SavedComparer.Write(returnMe, comparer); return returnMe; } public static SaveNode Naming(string name) { SaveNode returnMe = SaveNode.NewTable(); returnMe.Entries[SavedComparer.Key] = SaveNode.OfText(name); return returnMe; } public class WriteTests : TestFixture { public void DefaultComparer_IsLeftOut() { CheckEqual(0, WrittenFor(EqualityComparer.Default).Entries.Count); CheckEqual(0, WrittenFor(EqualityComparer.Default).Entries.Count); } public void NullComparer_IsLeftOut() { CheckEqual(0, WrittenFor(null).Entries.Count); } public void StringComparers_AreSavedByName() { CheckEqual("Ordinal", WrittenFor(StringComparer.Ordinal).Entries[SavedComparer.Key].Text); CheckEqual("OrdinalIgnoreCase", WrittenFor(StringComparer.OrdinalIgnoreCase).Entries[SavedComparer.Key].Text); CheckEqual("InvariantCulture", WrittenFor(StringComparer.InvariantCulture).Entries[SavedComparer.Key].Text); CheckEqual("InvariantCultureIgnoreCase", WrittenFor(StringComparer.InvariantCultureIgnoreCase).Entries[SavedComparer.Key].Text); } public void CurrentCultureComparer_Throws() { CheckThrow(typeof(NotSupportedException)); WrittenFor(StringComparer.CurrentCulture); } public void OtherComparerOfStrings_Throws() { CheckThrow(typeof(NotSupportedException)); WrittenFor(new EveryoneEqual()); } public void OtherComparerOfAnotherType_Throws() { CheckThrow(typeof(NotSupportedException)); WrittenFor(new EveryoneEqual()); } } public class ReadTests : TestFixture { public void NoComparer_IsNull() { CheckNull(SavedComparer.Read(SaveNode.NewTable())); } public void StringComparers_AreReadByName() { CheckTrue(SavedComparer.Read(Naming("Ordinal")) == StringComparer.Ordinal); CheckTrue(SavedComparer.Read(Naming("OrdinalIgnoreCase")) == StringComparer.OrdinalIgnoreCase); CheckTrue(SavedComparer.Read(Naming("InvariantCulture")) == StringComparer.InvariantCulture); CheckTrue(SavedComparer.Read(Naming("InvariantCultureIgnoreCase")) == StringComparer.InvariantCultureIgnoreCase); } public void UnknownName_Throws() { CheckThrow(typeof(InvalidDataException)); SavedComparer.Read(Naming("CurrentCulture")); } public void NameForAnotherType_Throws() { CheckThrow(typeof(InvalidDataException)); SavedComparer.Read(Naming("Ordinal")); } public void NameThatIsNotText_Throws() { SaveNode table = SaveNode.NewTable(); table.Entries[SavedComparer.Key] = SaveNode.NewList(); CheckThrow(typeof(InvalidDataException)); SavedComparer.Read(table); } } public class WriteOrderingTests : TestFixture { public static SaveNode WrittenForOrdering(IComparer ordering) { SaveNode returnMe = SaveNode.NewTable(); SavedComparer.WriteOrdering(returnMe, ordering); return returnMe; } public void DefaultOrderingOrNone_IsLeftOut() { CheckEqual(0, WrittenForOrdering(Comparer.Default).Entries.Count); CheckEqual(0, WrittenForOrdering(null).Entries.Count); } public void StringOrderings_AreSavedByName() { CheckEqual("Ordinal", WrittenForOrdering(StringComparer.Ordinal).Entries["comparer"].Text); CheckEqual("InvariantCultureIgnoreCase", WrittenForOrdering(StringComparer.InvariantCultureIgnoreCase).Entries["comparer"].Text); } public void OtherOrdering_Throws() { CheckThrow(typeof(NotSupportedException)); WrittenForOrdering(Comparer.Create((left, right) => right.CompareTo(left))); } } public class ReadOrderingTests : TestFixture { public void NoOrdering_IsNull() { CheckNull(SavedComparer.ReadOrdering(SaveNode.NewTable())); } public void StringOrdering_IsReadByName() { CheckTrue(SavedComparer.ReadOrdering(Naming("OrdinalIgnoreCase")) == StringComparer.OrdinalIgnoreCase); } public void UnknownName_Throws() { CheckThrow(typeof(InvalidDataException)); SavedComparer.ReadOrdering(Naming("Ordinal")); } } } }