コード例 #1
0
        private void ValidateSyntaxTree(Interfaces.ITemplateManager manager)
        {
            var template = manager.GetTemplate(Template, new TestTyperesolver(),
                                               new TypeResolver.ModelDescriptor(new TypeResolver.IDjangoType[]
            {
                new TypeResolver.CLRTypeDjangoType("Standard", typeof(EmptyClass))
            }));

            //the same logic responsible for retriving nodes as in NodeProvider class (DjangoDesigner).
            var nodes = GetNodes(template.Nodes.ToList().ConvertAll
                                     (node => (Interfaces.INode)node)).FindAll(node =>
                                                                               (node is Interfaces.ICompletionValuesProvider) ||
                                                                               (node.NodeType == Interfaces.NodeType.ParsingContext) ||
                                                                               (node.ErrorMessage.Message != ""));
            var actualResult = nodes.ConvertAll(
                node =>
            {
                var valueProvider = node as Interfaces.ICompletionValuesProvider;
                var values        =
                    valueProvider == null ?
                    new List <string>()
                            : valueProvider.Values;
                var contextValues = new List <string>(values);
                switch (node.NodeType)
                {
                case Interfaces.NodeType.ParsingContext:
                    contextValues.InsertRange(0, (node.Context.TagClosures));
                    return(new DesignerData(node.Position, node.Length, contextValues.ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message));

                case Interfaces.NodeType.Reference:
                    return(new DesignerData(node.Position, node.Length, GetModelValues(node.Context.Model, RecursionDepth).ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message));

                default:
                    return(new DesignerData(node.Position, node.Length, new List <string>(values).ToArray(), node.ErrorMessage.Severity, node.ErrorMessage.Message));
                }
            });

            for (var i = 0; i < actualResult.Count; i++)
            {
                Assert.AreEqual(ResultForDesigner[i].Length, actualResult[i].Length, "Invalid Length");
                Assert.AreEqual(ResultForDesigner[i].Position, actualResult[i].Position, "Invalid Position");
                Assert.AreEqual(ResultForDesigner[i].ErrorMessage, actualResult[i].ErrorMessage, "Invalid ErrorMessage");
                Assert.AreEqual(ResultForDesigner[i].Severity, actualResult[i].Severity, "Invalid Severity");
                Assert.AreEqual(ResultForDesigner[i].Values.OrderBy(x => x), actualResult[i].Values.OrderBy(x => x), "Invalid Values Array " + i);
            }

            Assert.AreEqual(ResultForDesigner.Count(), actualResult.Count);
        }