Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 private ParseContext AddToResult(ParseContext result, IPostNode node)
 {
     result.Nodes.Add(node);
     return(result);
 }