using System.Collections.Generic; using UnitTestSharp; using Vellum; namespace Amphora.Vellum.UnitTests { public class SaveConverterTests : TestFixture { /// /// Writes as Lua text, inside the table a save has to be, and reads it back. /// public static SaveNode ThroughLuaText(SaveNode node) { SaveNode save = SaveNode.NewTable(); save.Entries["value"] = node; return LuaSaveFormat.Parse(LuaSaveFormat.Format(save)).RequireEntry("value"); } public class ForTests : TestFixture { public void ThisAssembly_SavesTheContainersThroughItsReferences() { SaveSession session = SaveConverters.For(typeof(SaveConverterTests).Assembly).CreateSession(); var value = new Inventory(); value.Route.Add(new Vector { X = 1.5 }); value.Stops["home"] = new Vector { Y = 4 }; value.Stops["mine"] = new Vector { X = -1 }; SaveNode node = ThroughLuaText(session.ToNode(value, typeof(Inventory))); var loaded = (Inventory)session.FromNode(node, typeof(Inventory)); CheckEqual(1.5, loaded.Route[0].X); CheckEqual(new[] { "home", "mine" }, new List(loaded.Stops.Keys)); CheckEqual(4.0, loaded.Stops["home"].Y); } public void TheLibrary_NamesBothConverters() { SaveSession session = SaveConverters.For(typeof(DynamicArrayConverter<>).Assembly).CreateSession(); CheckEqual(SaveNode.Kinds.List, session.ToNode(new DynamicArray(), typeof(DynamicArray)).Kind); CheckEqual(SaveNode.Kinds.Table, session.ToNode(new OrderedDictionary(), typeof(OrderedDictionary)).Kind); } } } }