Exemplo n.º 1
0
        public void ScopeOfXmlnsIsLimited()
        {
            var nodes   = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'/><x:post/>");
            var visitor = new NamespaceVisitor(new VisitorContext());

            visitor.Accept(nodes);
            Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
            Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[2]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[2]).Namespace);

            nodes   = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'><x:bar/></x:foo><x:post/>");
            visitor = new NamespaceVisitor(new VisitorContext());
            visitor.Accept(nodes);
            Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
            Assert.AreEqual("x:bar", ((ElementNode)visitor.Nodes[2]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[2]).Namespace);
            Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[4]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[4]).Namespace);
        }
Exemplo n.º 2
0
 public void AssignNamespaceWithDefaultPrefix()
 {
     var nodes = ParseNodes("<foo><quux:bar/></foo>");
     var visitor = new NamespaceVisitor(new VisitorContext { Prefix = "quux" });
     visitor.Accept(nodes);
     Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
     Assert.AreEqual("http://sparkviewengine.com/", ((ElementNode)visitor.Nodes[1]).Namespace);
 }
Exemplo n.º 3
0
 public void AssignNamespaceToElement()
 {
     var nodes = ParseNodes("<foo xmlns:x='http://sparkviewengine.com/x'><x:bar/></foo>");
     var visitor = new NamespaceVisitor(new VisitorContext());
     visitor.Accept(nodes);
     Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
     Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
 }
Exemplo n.º 4
0
        public void AssignNamespaceToElement()
        {
            var nodes   = ParseNodes("<foo xmlns:x='http://sparkviewengine.com/x'><x:bar/></foo>");
            var visitor = new NamespaceVisitor(new VisitorContext());

            visitor.Accept(nodes);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
        }
Exemplo n.º 5
0
        public void ElementCanUseXmlnsOnSelf()
        {
            var nodes = ParseNodes("<x:foo y:bar='hello' xmlns:x='http://sparkviewengine.com/x' xmlns:y='http://sparkviewengine.com/y'><quux/></foo>");
            var visitor = new NamespaceVisitor(new VisitorContext());
            visitor.Accept(nodes);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[1]).Namespace);

            Assert.AreEqual("y:bar", ((ElementNode)visitor.Nodes[0]).Attributes[0].Name);
            Assert.AreEqual("http://sparkviewengine.com/y", ((ElementNode)visitor.Nodes[0]).Attributes[0].Namespace);
        }
Exemplo n.º 6
0
        public void AssignNamespaceWithDefaultPrefix()
        {
            var nodes   = ParseNodes("<foo><quux:bar/></foo>");
            var visitor = new NamespaceVisitor(new VisitorContext {
                Prefix = "quux"
            });

            visitor.Accept(nodes);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("http://sparkviewengine.com/", ((ElementNode)visitor.Nodes[1]).Namespace);
        }
Exemplo n.º 7
0
        public void ElementCanUseXmlnsOnSelf()
        {
            var nodes   = ParseNodes("<x:foo y:bar='hello' xmlns:x='http://sparkviewengine.com/x' xmlns:y='http://sparkviewengine.com/y'><quux/></foo>");
            var visitor = new NamespaceVisitor(new VisitorContext());

            visitor.Accept(nodes);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[1]).Namespace);

            Assert.AreEqual("y:bar", ((ElementNode)visitor.Nodes[0]).Attributes[0].Name);
            Assert.AreEqual("http://sparkviewengine.com/y", ((ElementNode)visitor.Nodes[0]).Attributes[0].Namespace);
        }
Exemplo n.º 8
0
        public override IList <Node> IncludeFile(VisitorContext context, string path, string parse)
        {
            var existingPath = context.ViewPath;

            var directoryPath = Path.GetDirectoryName(context.ViewPath);

            var relativePath = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);

            while (relativePath.StartsWith(string.Format("..{0}", Path.DirectorySeparatorChar)))
            {
                directoryPath = Path.GetDirectoryName(directoryPath);
                relativePath  = relativePath.Substring(3);
            }
            context.ViewPath = Path.Combine(directoryPath, relativePath);

            var sourceContext = CreateSourceContext(context.ViewPath, context.ViewFolder);

            switch (parse)
            {
            case "text":
                var encoded = sourceContext.Content
                              .Replace("&", "&amp;")
                              .Replace("<", "&lt;")
                              .Replace(">", "&gt;");
                return(new[] { new TextNode(encoded) });

            case "html":
                return(new[] { new TextNode(sourceContext.Content) });
            }


            var position = new Position(sourceContext);
            var result   = _grammar.Nodes(position);

            if (result.Rest.PotentialLength() != 0)
            {
                ThrowParseException(context.ViewPath, position, result.Rest);
            }
            context.Paint = context.Paint.Union(result.Rest.GetPaint());

            var namespaceVisitor = new NamespaceVisitor(context);

            namespaceVisitor.Accept(result.Value);

            var includeVisitor = new IncludeVisitor(context);

            includeVisitor.Accept(namespaceVisitor.Nodes);

            context.ViewPath = existingPath;
            return(includeVisitor.Nodes);
        }
        public override IList <Node> IncludeFile(VisitorContext context, string path, string parse)
        {
            string viewPath      = context.ViewPath;
            string directoryName = Path.GetDirectoryName(context.ViewPath);
            string str3          = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);

            while (str3.StartsWith(string.Format("..{0}", Path.DirectorySeparatorChar)))
            {
                directoryName = Path.GetDirectoryName(directoryName);
                str3          = str3.Substring(3);
            }
            context.ViewPath = Path.Combine(directoryName, str3);
            SourceContext sourceContext = AbstractSyntaxProvider.CreateSourceContext(context.ViewPath, context.ViewFolder);

            switch (parse)
            {
            case "text":
            {
                string text = sourceContext.Content.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;");
                return(new TextNode[] { new TextNode(text) });
            }

            case "html":
                return(new TextNode[] { new TextNode(sourceContext.Content) });
            }
            Position position = new Position(sourceContext);
            ParseResult <IList <Node> > result = this._grammar.Nodes(position);

            if (result.Rest.PotentialLength() != 0)
            {
                base.ThrowParseException(context.ViewPath, position, result.Rest);
            }
            context.Paint = context.Paint.Union <Paint>(result.Rest.GetPaint());
            NamespaceVisitor visitor = new NamespaceVisitor(context);

            visitor.Accept(result.Value);
            IncludeVisitor visitor2 = new IncludeVisitor(context);

            visitor2.Accept(visitor.Nodes);
            context.ViewPath = viewPath;
            return(visitor2.Nodes);
        }
Exemplo n.º 10
0
        public void NestedElementsDontWreckScope()
        {
            var nodes   = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'><x:foo><x:foo/></x:foo></x:foo><x:post/>");
            var visitor = new NamespaceVisitor(new VisitorContext());

            visitor.Accept(nodes);
            Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[2]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[2]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[3]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[3]).Namespace);
            Assert.AreEqual("x:foo", ((EndElementNode)visitor.Nodes[4]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((EndElementNode)visitor.Nodes[4]).Namespace);
            Assert.AreEqual("x:foo", ((EndElementNode)visitor.Nodes[5]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((EndElementNode)visitor.Nodes[5]).Namespace);
            Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[6]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[6]).Namespace);
        }
Exemplo n.º 11
0
        public override IList<Node> IncludeFile(VisitorContext context, string path, string parse)
        {
            var existingPath = context.ViewPath;

            var directoryPath = Path.GetDirectoryName(context.ViewPath);

            var relativePath = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
            while (relativePath.StartsWith(string.Format("..{0}", Path.DirectorySeparatorChar)))
            {
                directoryPath = Path.GetDirectoryName(directoryPath);
                relativePath = relativePath.Substring(3);
            }
            context.ViewPath = Path.Combine(directoryPath, relativePath);

            var sourceContext = CreateSourceContext(context.ViewPath, context.ViewFolder);

            switch (parse)
            {
                case "text":
                    var encoded = sourceContext.Content
                        .Replace("&", "&amp;")
                        .Replace("<", "&lt;")
                        .Replace(">", "&gt;");
                    return new[] {new TextNode(encoded)};
                case "html":
                    return new[] {new TextNode(sourceContext.Content)};
            }

            var position = new Position(sourceContext);
            var result = _grammar.Nodes(position);
            if (result.Rest.PotentialLength() != 0)
            {
                ThrowParseException(context.ViewPath, position, result.Rest);
            }
            context.Paint = context.Paint.Union(result.Rest.GetPaint());

            var namespaceVisitor = new NamespaceVisitor(context);
            namespaceVisitor.Accept(result.Value);

            var includeVisitor = new IncludeVisitor(context);
            includeVisitor.Accept(namespaceVisitor.Nodes);

            context.ViewPath = existingPath;
            return includeVisitor.Nodes;
        }
Exemplo n.º 12
0
 public void NestedElementsDontWreckScope()
 {
     var nodes = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'><x:foo><x:foo/></x:foo></x:foo><x:post/>");
     var visitor = new NamespaceVisitor(new VisitorContext());
     visitor.Accept(nodes);
     Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name);
     Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
     Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name);
     Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
     Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[2]).Name);
     Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[2]).Namespace);
     Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[3]).Name);
     Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[3]).Namespace);
     Assert.AreEqual("x:foo", ((EndElementNode)visitor.Nodes[4]).Name);
     Assert.AreEqual("http://sparkviewengine.com/x", ((EndElementNode)visitor.Nodes[4]).Namespace);
     Assert.AreEqual("x:foo", ((EndElementNode)visitor.Nodes[5]).Name);
     Assert.AreEqual("http://sparkviewengine.com/x", ((EndElementNode)visitor.Nodes[5]).Namespace);
     Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[6]).Name);
     Assert.AreEqual("", ((ElementNode)visitor.Nodes[6]).Namespace);
 }
Exemplo n.º 13
0
        public void ScopeOfXmlnsIsLimited()
        {
            var nodes = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'/><x:post/>");
            var visitor = new NamespaceVisitor(new VisitorContext());
            visitor.Accept(nodes);
            Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
            Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[2]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[2]).Namespace);

            nodes = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'><x:bar/></x:foo><x:post/>");
            visitor = new NamespaceVisitor(new VisitorContext());
            visitor.Accept(nodes);
            Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace);
            Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace);
            Assert.AreEqual("x:bar", ((ElementNode)visitor.Nodes[2]).Name);
            Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[2]).Namespace);
            Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[4]).Name);
            Assert.AreEqual("", ((ElementNode)visitor.Nodes[4]).Namespace);
        }