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