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"));
}
}
}
}