private void CheckPostModelsSerialization <T>(T original, IPostNode deserialized, Action <T, T> asserts) where T : IPostNode { Assert.IsNotNull(deserialized, "Десериализованный объект == null"); Assert.AreNotSame(original, deserialized, "Десериализация вернула тот же объект"); Assert.IsInstanceOfType(deserialized, typeof(T), $"Тип объекта не {typeof(T).FullName}"); asserts?.Invoke(original, (T)deserialized); }
private static bool IsAttribute(IPostNode node, string attribute) { var n = node as ICompositePostNode; var a = n?.Attribute as IPostBasicAttribute; if (a == null) { return(false); } return(a.Attribute == attribute); }
public static void AssertNodes(IModuleProvider modules, IPostNode original, IPostNode deserialized, int[] path = null, Action <IPostNode, IPostNode> assertCallback = null) { var p = path != null?path.Aggregate(new StringBuilder(), (sb, n) => (sb.Length > 0 ? sb.Append("/") : sb).Append(n)).ToString() : ""; if (original == null) { Assert.IsNull(deserialized, $"{p} Объект должен быть null"); } else { Assert.IsNotNull(deserialized, $"{p} Объект не должен быть null"); Assert.AreEqual(original.GetType(), deserialized.GetType(), $"{p} Тип объекта не совпадает"); Assert.AreNotSame(original, deserialized, "Должны быть разные объекты"); switch (original) { case TextPostNode ot: var dt = (TextPostNode)deserialized; Assert.AreEqual(ot.Text, dt.Text, $"{p} Текст не совпадает"); break; case BoardLinkPostNode obl: var dbl = (BoardLinkPostNode)deserialized; Assert.AreEqual(obl.BoardLink?.GetLinkHash(), dbl.BoardLink?.GetLinkHash(), $"{p} Ссылка не совпадает"); break; case CompositePostNode oc: var dc = (CompositePostNode)deserialized; var oat = modules.QueryModule <IObjectSerializationService>().SerializeToString(oc.Attribute); var dat = modules.QueryModule <IObjectSerializationService>().SerializeToString(dc.Attribute); Assert.AreEqual(oat, dat, $"{p} Атрибут узла не совпадает"); if (oc.Children == null) { Assert.IsNull(dc.Children, $"{p} Список дочерних атрибутов должен быть null"); } else { Assert.IsNotNull(dc.Children, $"{p} Список дочерних узлов не должен быть null"); Assert.AreEqual(oc.Children.Count, dc.Children.Count, $"{p} Количество дочерних узлов не совпадает"); for (var i = 0; i < dc.Children.Count; i++) { AssertNodes(modules, oc.Children[i], dc.Children[i], (path ?? new int[0]).Concat(new [] { i + 1 }).ToArray(), assertCallback); } } break; } assertCallback?.Invoke(original, deserialized); } }
private ParseContext AddToResult(ParseContext result, IPostNode node) { result.Nodes.Add(node); return(result); }