using System.IO; using System.Linq; using UnitTestSharp; namespace Vellum.UnitTests { public class SavedItemsTests : TestFixture { public static SaveSession Session() { return SaveConvertersTests.TestConverters().CreateSession(); } public class ToNodeTests : TestFixture { public void Items_AreSavedInOrderAsTheirType() { SaveNode node = SavedItems.ToNode(new[] { 3, 1, 2 }, Session()); CheckEqual(SaveNode.Kinds.List, node.Kind); CheckEqual(new[] { "3", "1", "2" }, node.Items.Select(item => item.Text).ToArray()); } public void NoItems_IsAnEmptyList() { SaveNode node = SavedItems.ToNode(new int[0], Session()); CheckEqual(SaveNode.Kinds.List, node.Kind); CheckEqual(0, node.Items.Count); } public void NullItem_IsANullNode() { SaveNode node = SavedItems.ToNode(new[] { "a", null }, Session()); CheckEqual(SaveNode.Kinds.Null, node.Items[1].Kind); } public void ConvertedItem_IsSavedByItsConverter() { SaveNode node = SavedItems.ToNode(new[] { new Point(1.5, 0) }, Session()); CheckEqual("0x3FF8000000000000", node.Items[0].RequireEntry("x").Text); } } public class FromNodeTests : TestFixture { public void List_IsReadItemByItem() { SaveNode node = SaveNode.NewList(); node.Items.Add(SaveNode.OfText("3")); node.Items.Add(SaveNode.OfText("1")); CheckEqual(new[] { 3, 1 }, SavedItems.FromNode(node, Session())); } public void EmptyTable_IsNoItems() { CheckEqual(0, SavedItems.FromNode(SaveNode.NewTable(), Session()).Length); } public void NullItem_IsNullForAReferenceType() { SaveNode node = SaveNode.NewList(); node.Items.Add(SaveNode.Null); CheckNull(SavedItems.FromNode(node, Session())[0]); } public void NullItem_ForAValueType_IsLeftTheDefaultAndRecorded() { SaveNode node = SaveNode.NewList(); node.Items.Add(SaveNode.OfText("4")); node.Items.Add(SaveNode.Null); SaveSession session = Session(); CheckEqual(new[] { 4, 0 }, SavedItems.FromNode(node, session)); CheckEqual(new[] { "[1]" }, SaveConvertersTests.IssuePaths(session)); } public void ItemOfTheWrongKind_IsLeftTheDefaultAndRecorded() { SaveNode node = SaveNode.NewList(); node.Items.Add(SaveNode.NewList()); SaveSession session = Session(); CheckEqual(new[] { 0 }, SavedItems.FromNode(node, session)); CheckEqual(new[] { "[0]" }, SaveConvertersTests.IssuePaths(session)); } public void NodeThatIsNotAList_Throws() { CheckThrow(typeof(InvalidDataException)); SavedItems.FromNode(SaveNode.OfText("3"), Session()); } } } }