public void Format_SingleEmptyAttributeHtmlStyle_ReturnsMarkup()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenAttribute(new DataName("noValue")),
                MarkupGrammar.TokenPrimitive(String.Empty),
                MarkupGrammar.TokenElementEnd
            };
            const string expected = @"<root noValue></root>";

            var formatter = new HtmlFormatter(new DataWriterSettings())
            {
                EmptyAttributes = HtmlFormatter.EmptyAttributeType.Html
            };
            var actual = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 2
0
        private void TransformArray(List <Token <MarkupTokenType> > output, IStream <Token <ModelTokenType> > input)
        {
            Token <ModelTokenType> token = input.Pop();

            output.Add(MarkupGrammar.TokenElementBegin(HtmlOutTransformer.ArrayTagName));
            if (!token.Name.IsEmpty)
            {
                output.Add(MarkupGrammar.TokenAttribute(HtmlOutTransformer.HintAttributeName));
                output.Add(MarkupGrammar.TokenPrimitive(token.Name));
            }

            while (!input.IsCompleted)
            {
                token = input.Peek();
                switch (token.TokenType)
                {
                case ModelTokenType.ArrayEnd:
                {
                    input.Pop();

                    output.Add(MarkupGrammar.TokenElementEnd);
                    return;
                }

                case ModelTokenType.ArrayBegin:
                case ModelTokenType.ObjectBegin:
                case ModelTokenType.Primitive:
                {
                    output.Add(MarkupGrammar.TokenElementBegin(HtmlOutTransformer.ArrayItemTagName));
                    this.TransformValue(output, input);
                    output.Add(MarkupGrammar.TokenElementEnd);
                    break;
                }

                default:
                {
                    throw new TokenException <ModelTokenType>(
                              token,
                              String.Format(ErrorUnexpectedToken, token.TokenType));
                }
                }
            }
        }
Ejemplo n.º 3
0
        public void GetTokens_SingleOpenCloseTag_ReturnsSequence()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenElementEnd
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("root"),
                ModelGrammar.TokenArrayEnd
            };

            var converter = new JsonMLReader.JsonMLInTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
        public void Format_ArrayEmpty_ReturnsEmptyArray()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenArrayEnd
            };

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("array")),
                MarkupGrammar.TokenElementEnd
            };

            var transformer = new XmlWriter.XmlOutTransformer(new DataWriterSettings());
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 5
0
        public void GetTokens_MultipleAttributes_ReturnsSequence()
        {
            const string input    = @"<root no-value="""" whitespace="" this contains whitespace "" anyQuotedText=""" + "/\\\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\n\r\t`1~!@#$%^&amp;*()_+-=[]{}|;:',./&lt;&gt;?" + @"""></root>";
            var          expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenAttribute(new DataName("anyQuotedText")),
                MarkupGrammar.TokenPrimitive("/\\\uCAFE\uBABE\uAB98\uFCDE\uBCDA\uEF4A   `1~!@#$%^&*()_+-=[]{}|;:',./<>?"),
                MarkupGrammar.TokenAttribute(new DataName("no-value")),
                MarkupGrammar.TokenPrimitive(String.Empty),
                MarkupGrammar.TokenAttribute(new DataName("whitespace")),
                MarkupGrammar.TokenPrimitive(" this contains whitespace "),
                MarkupGrammar.TokenElementEnd
            };

            var tokenizer = new XmlReader.XmlTokenizer();
            var actual    = tokenizer.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 6
0
        public void Format_ArrayOneItem_ReturnsExpectedArray()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("array")),
                MarkupGrammar.TokenElementVoid(new DataName("item")),
                MarkupGrammar.TokenElementEnd
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenNull,
                ModelGrammar.TokenArrayEnd
            };

            var transformer = new XmlReader.XmlInTransformer(new DataReaderSettings());
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Consumes a sequence of tokens and produces a token sequence of a different type
        /// </summary>
        public IEnumerable <Token <MarkupTokenType> > Transform(IEnumerable <Token <ModelTokenType> > input)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }

            IStream <Token <ModelTokenType> > stream = Stream <Token <ModelTokenType> > .Create(input);

            List <Token <MarkupTokenType> > output = new List <Token <MarkupTokenType> >();

            while (!stream.IsCompleted)
            {
                output.Add(MarkupGrammar.TokenElementBegin(HtmlOutTransformer.RootTagName));
                this.TransformValue(output, stream);
                output.Add(MarkupGrammar.TokenElementEnd);
            }

            return(output);
        }
Ejemplo n.º 8
0
        public void GetTokens_OverlappingNamespacedTagsErrorRecovery_ReturnsSequenceAsIs()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("odd", "a", "http://example.com/odd/a")),
                MarkupGrammar.TokenElementBegin(new DataName("auto-closed", "b", "http://example.com/auto-closed/b")),
                MarkupGrammar.TokenElementBegin(new DataName("even", "c", "http://example.com/even/c")),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("a:odd"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("xmlns:a"),
                ModelGrammar.TokenPrimitive("http://example.com/odd/a"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("b:auto-closed"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("xmlns:b"),
                ModelGrammar.TokenPrimitive("http://example.com/auto-closed/b"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("c:even"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("xmlns:c"),
                ModelGrammar.TokenPrimitive("http://example.com/even/c"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
            };

            var converter = new JsonMLReader.JsonMLInTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 9
0
        public void Format_ObjectEmpty_RendersEmptyObject()
        {
            var input = new[]
            {
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenObjectEnd
            };

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("div")),
                MarkupGrammar.TokenElementBegin(new DataName("dl")),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

            var transformer = new HtmlOutTransformer();
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 10
0
        public void Format_ObjectAndAttributeDifferentNamespaces_CorrectlyEmitsNamespaces()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo", String.Empty, "http://json.org")),
                MarkupGrammar.TokenAttribute(new DataName("key", String.Empty, "http://jsonfx.net", true)),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin(new DataName("foo", String.Empty, "http://json.org")),
                ModelGrammar.TokenProperty(new DataName("key", String.Empty, "http://jsonfx.net", true)),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd
            };

            var transformer = new XmlReader.XmlInTransformer(new DataReaderSettings());
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
        public void Format_NestedDefaultNamespaces_ReturnsMarkup()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("outer", String.Empty, "http://example.org/outer")),
                MarkupGrammar.TokenElementBegin(new DataName("middle-1", String.Empty, "http://example.org/inner")),
                MarkupGrammar.TokenElementBegin(new DataName("inner", String.Empty, "http://example.org/inner")),
                MarkupGrammar.TokenPrimitive("this should be inner"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("middle-2", String.Empty, "http://example.org/outer")),
                MarkupGrammar.TokenPrimitive("this should be outer"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };
            const string expected = @"<outer xmlns=""http://example.org/outer""><middle-1 xmlns=""http://example.org/inner""><inner>this should be inner</inner></middle-1><middle-2>this should be outer</middle-2></outer>";

            var formatter = new HtmlFormatter(new DataWriterSettings());
            var actual    = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
        public void Format_DifferentPrefixSameNamespace_ReturnsMarkup()
        {
            // Not sure if this is correct: http://stackoverflow.com/questions/3312390
            // "The namespace name for an unprefixed attribute name always has no value"
            // "The attribute value in a default namespace declaration MAY be empty.
            // This has the same effect, within the scope of the declaration, of there being no default namespace."
            // http://www.w3.org/TR/xml-names/#defaulting

            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo", String.Empty, "http://example.org")),
                MarkupGrammar.TokenAttribute(new DataName("key", "blah", "http://example.org")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
            };
            const string expected = @"<foo xmlns=""http://example.org"" key=""value""></foo>";

            var formatter = new HtmlFormatter(new DataWriterSettings());
            var actual    = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 13
0
        public void GetTokens_NestedDefaultNamespaces_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("outer", String.Empty, "http://example.org/outer")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("middle-1", String.Empty, "http://example.org/inner")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("inner", String.Empty, "http://example.org/inner")),
                ModelGrammar.TokenPrimitive("this should be inner"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("middle-2", String.Empty, "http://example.org/outer")),
                ModelGrammar.TokenPrimitive("this should be outer"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("outer", String.Empty, "http://example.org/outer")),
                MarkupGrammar.TokenElementBegin(new DataName("middle-1", String.Empty, "http://example.org/inner")),
                MarkupGrammar.TokenElementBegin(new DataName("inner", String.Empty, "http://example.org/inner")),
                MarkupGrammar.TokenPrimitive("this should be inner"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("middle-2", String.Empty, "http://example.org/outer")),
                MarkupGrammar.TokenPrimitive("this should be outer"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

            var converter = new JsonMLWriter.JsonMLOutTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 14
0
        public void GetTokens_PhpHelloWorld_ReturnsSequence()
        {
            const string input =
                @"<html>
	<head>
		<title>PHP Test</title>
	</head>
	<body>
		<?php echo '<p>Hello World</p>'; ?>
	</body>
</html>";

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("html")),
                MarkupGrammar.TokenPrimitive("\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("head")),
                MarkupGrammar.TokenPrimitive("\n\t\t"),
                MarkupGrammar.TokenElementBegin(new DataName("title")),
                MarkupGrammar.TokenPrimitive("PHP Test"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("body")),
                MarkupGrammar.TokenPrimitive("\n\t\t"),
                MarkupGrammar.TokenUnparsed("?", "?", @"php echo '<p>Hello World</p>'; "),
                MarkupGrammar.TokenPrimitive("\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\n"),
                MarkupGrammar.TokenElementEnd,
            };

            var tokenizer = new XmlReader.XmlTokenizer();
            var actual    = tokenizer.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 15
0
        public void Format_NamedObjectOneProperty_RendersSimpleObject()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("Yada")),
                MarkupGrammar.TokenElementBegin(new DataName("key")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin("Yada"),
                ModelGrammar.TokenProperty("key"),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd
            };

            var transformer = new XmlReader.XmlInTransformer(new DataReaderSettings());
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 16
0
        public void GetTokens_UndeclaredPrefixes_ThrowsDeserializationException()
        {
            const string input    = @"<a:one><b:two><c:three></d:three></e:two></f:one>";
            var          expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("one")),
                MarkupGrammar.TokenElementBegin(new DataName("two")),
                MarkupGrammar.TokenElementBegin(new DataName("three")),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

            var tokenizer = new XmlReader.XmlTokenizer();

            DeserializationException ex = Assert.Throws <DeserializationException>(
                delegate()
            {
                var actual = tokenizer.GetTokens(input).ToArray();
            });

            Assert.Equal(2, ex.Index);
        }
Ejemplo n.º 17
0
        public void GetTokens_NestedDefaultNamespaces_ReturnsSequence()
        {
            const string input = @"<outer xmlns=""http://example.org/outer""><middle-1 xmlns=""http://example.org/inner""><inner>this should be inner</inner></middle-1><middle-2>this should be outer</middle-2></outer>";

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("outer", String.Empty, "http://example.org/outer")),
                MarkupGrammar.TokenElementBegin(new DataName("middle-1", String.Empty, "http://example.org/inner")),
                MarkupGrammar.TokenElementBegin(new DataName("inner", String.Empty, "http://example.org/inner")),
                MarkupGrammar.TokenPrimitive("this should be inner"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("middle-2", String.Empty, "http://example.org/outer")),
                MarkupGrammar.TokenPrimitive("this should be outer"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

            var tokenizer = new XmlReader.XmlTokenizer();
            var actual    = tokenizer.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 18
0
        public void GetTokens_NamespacePrefixTag_ReturnsSequence()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root", "prefix", "http://example.com/schema")),
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("prefix:root"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("xmlns:prefix"),
                ModelGrammar.TokenPrimitive("http://example.com/schema"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayEnd
            };

            var converter = new JsonMLReader.JsonMLInTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 19
0
        public void GetTokens_HtmlContentPrettyPrinted_ReturnsSequence()
        {
            const string input =
                @"<div class=""content"">
	<p style=""color:red"">
		<strong>Lorem ipsum</strong> dolor sit amet, <i>consectetur</i> adipiscing elit.
	</p>
</div>";

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("div")),
                MarkupGrammar.TokenAttribute(new DataName("class")),
                MarkupGrammar.TokenPrimitive("content"),
                MarkupGrammar.TokenPrimitive("\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("p")),
                MarkupGrammar.TokenAttribute(new DataName("style")),
                MarkupGrammar.TokenPrimitive("color:red"),
                MarkupGrammar.TokenPrimitive("\n\t\t"),
                MarkupGrammar.TokenElementBegin(new DataName("strong")),
                MarkupGrammar.TokenPrimitive("Lorem ipsum"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive(" dolor sit amet, "),
                MarkupGrammar.TokenElementBegin(new DataName("i")),
                MarkupGrammar.TokenPrimitive("consectetur"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive(" adipiscing elit.\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\n"),
                MarkupGrammar.TokenElementEnd,
            };

            var tokenizer = new XmlReader.XmlTokenizer();
            var actual    = tokenizer.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 20
0
        public void Format_ArrayMultiItem_ReturnsExpectedArray()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(0),
                ModelGrammar.TokenNull,
                ModelGrammar.TokenFalse,
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenArrayEnd
            };

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("div")),
                MarkupGrammar.TokenElementBegin(new DataName("ol")),
                MarkupGrammar.TokenElementBegin(new DataName("li")),
                MarkupGrammar.TokenPrimitive(0),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("li")),
                MarkupGrammar.TokenPrimitive(null),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("li")),
                MarkupGrammar.TokenPrimitive(false),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("li")),
                MarkupGrammar.TokenPrimitive(true),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

            var transformer = new HtmlOutTransformer();
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
        public void Format_PhpHelloWorld_ReturnsMarkup()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("html")),
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("head")),
                MarkupGrammar.TokenPrimitive("\r\n\t\t"),
                MarkupGrammar.TokenElementBegin(new DataName("title")),
                MarkupGrammar.TokenPrimitive("PHP Test"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("body")),
                MarkupGrammar.TokenPrimitive("\r\n\t\t"),
                MarkupGrammar.TokenUnparsed("?", "?", @"php echo '<p>Hello World</p>'; "),
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n"),
                MarkupGrammar.TokenElementEnd,
            };
            const string expected =
                @"<html>
	<head>
		<title>PHP Test</title>
	</head>
	<body>
		<?php echo '<p>Hello World</p>'; ?>
	</body>
</html>";

            var formatter = new HtmlFormatter(new DataWriterSettings());
            var actual    = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
        public void Format_NamespacedObjectNonNamespacedProperty_CorrectlyEmitsNamespace()
        {
            var input = new[]
            {
                ModelGrammar.TokenObjectBegin(new DataName("foo", String.Empty, "http://json.org")),
                ModelGrammar.TokenProperty("key"),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd
            };

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo", String.Empty, "http://json.org")),
                MarkupGrammar.TokenElementBegin(new DataName("key")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };

            var transformer = new XmlWriter.XmlOutTransformer(new DataWriterSettings());
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
        public void Format_HtmlContentPrettyPrinted_ReturnsMarkup()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("div")),
                MarkupGrammar.TokenAttribute(new DataName("class")),
                MarkupGrammar.TokenPrimitive("content"),
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("p")),
                MarkupGrammar.TokenAttribute(new DataName("style")),
                MarkupGrammar.TokenPrimitive("color:red"),
                MarkupGrammar.TokenPrimitive("\r\n\t\t"),
                MarkupGrammar.TokenElementBegin(new DataName("strong")),
                MarkupGrammar.TokenPrimitive("Lorem ipsum"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive(" dolor sit amet, "),
                MarkupGrammar.TokenElementBegin(new DataName("i")),
                MarkupGrammar.TokenPrimitive("consectetur"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive(" adipiscing elit.\r\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n"),
                MarkupGrammar.TokenElementEnd,
            };
            const string expected =
                @"<div class=""content"">
	<p style=""color:red"">
		<strong>Lorem ipsum</strong> dolor sit amet, <i>consectetur</i> adipiscing elit.
	</p>
</div>";

            var formatter = new HtmlFormatter(new DataWriterSettings());
            var actual    = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 24
0
        //[Fact(Skip="Embedded DOCTYPE not supported")]
        public void GetTokens_XmlDocTypeLocal_ReturnsUnparsed()
        {
            const string input =
                @"<!DOCTYPE doc [
	<!ATTLIST normId id ID #IMPLIED>
	<!ATTLIST normNames attr NMTOKENS #IMPLIED>
]>
<root />";
            var expected = new[]
            {
                MarkupGrammar.TokenUnparsed("!", "",
                                            @"DOCTYPE doc [
	<!ATTLIST normId id ID #IMPLIED>
	<!ATTLIST normNames attr NMTOKENS #IMPLIED>
]"),
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenElementEnd
            };

            var tokenizer = new XmlReader.XmlTokenizer();
            var actual    = tokenizer.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 25
0
        public void GetTokens_HtmlContentPrettyPrinted_ReturnsSequence()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("div")),
                MarkupGrammar.TokenAttribute(new DataName("class")),
                MarkupGrammar.TokenPrimitive("content"),
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("p")),
                MarkupGrammar.TokenAttribute(new DataName("style")),
                MarkupGrammar.TokenPrimitive("color:red"),
                MarkupGrammar.TokenPrimitive("\r\n\t\t"),
                MarkupGrammar.TokenElementBegin(new DataName("strong")),
                MarkupGrammar.TokenPrimitive("Lorem ipsum"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive(" dolor sit amet, "),
                MarkupGrammar.TokenElementBegin(new DataName("i")),
                MarkupGrammar.TokenPrimitive("consectetur"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive(" adipiscing elit.\r\n\t"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n"),
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("div"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("class")),
                ModelGrammar.TokenPrimitive("content"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("p"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("style")),
                ModelGrammar.TokenPrimitive("color:red"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenPrimitive("\r\n\t\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("strong"),
                ModelGrammar.TokenPrimitive("Lorem ipsum"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive(" dolor sit amet, "),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("i"),
                ModelGrammar.TokenPrimitive("consectetur"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive(" adipiscing elit.\r\n\t"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n"),
                ModelGrammar.TokenArrayEnd
            };

            var converter = new JsonMLReader.JsonMLInTransformer {
                Whitespace = WhitespaceType.Preserve
            };
            var actual = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 26
0
            /// <summary>
            /// Consumes a sequence of tokens and produces a token sequence of a different type
            /// </summary>
            public IEnumerable <Token <MarkupTokenType> > Transform(IEnumerable <Token <ModelTokenType> > input)
            {
                if (input == null)
                {
                    throw new ArgumentNullException("input");
                }

                IStream <Token <ModelTokenType> > stream = Stream <Token <ModelTokenType> > .Create(input);

                Token <ModelTokenType> token = stream.Peek();

                while (!stream.IsCompleted)
                {
                    switch (token.TokenType)
                    {
                    case ModelTokenType.ArrayBegin:
                    {
                        // consume array begin token
                        stream.Pop();
                        token = stream.Peek();

                        if (token.TokenType != ModelTokenType.Primitive)
                        {
                            throw new TokenException <ModelTokenType>(
                                      token,
                                      JsonMLOutTransformer.ErrorMissingTagName);
                        }

                        DataName tagName;
                        if (token.Value is DataName)
                        {
                            tagName = (DataName)token.Value;
                        }
                        else
                        {
                            // use as local-name
                            tagName = new DataName(token.ValueAsString());
                        }

                        // consume name value token
                        stream.Pop();
                        token = stream.Peek();

                        //if (token.TokenType == ModelTokenType.ArrayEnd)
                        //{
                        //    // consume array end token
                        //    stream.Pop();
                        //    token = stream.Peek();

                        //    // is a void tag
                        //    yield return MarkupGrammar.TokenElementVoid(tagName);
                        //    break;
                        //}

                        // TODO: evaluate if worth queuing up attributes for void tags with attribs
                        yield return(MarkupGrammar.TokenElementBegin(tagName));

                        if (token.TokenType != ModelTokenType.ObjectBegin)
                        {
                            // no attributes, but has children
                            break;
                        }

                        // consume object begin token
                        stream.Pop();
                        token = stream.Peek();

                        while (token.TokenType == ModelTokenType.Property)
                        {
                            yield return(token.ChangeType(MarkupTokenType.Attribute));

                            // consume attribute name token
                            stream.Pop();
                            token = stream.Peek();

                            switch (token.TokenType)
                            {
                            case ModelTokenType.Primitive:
                            {
                                yield return(token.ChangeType(MarkupTokenType.Primitive));

                                break;
                            }

                            default:
                            {
                                throw new TokenException <ModelTokenType>(
                                          token,
                                          String.Format(JsonMLOutTransformer.ErrorInvalidAttributeValue, token.TokenType));
                            }
                            }

                            // consume attribute value token
                            stream.Pop();
                            token = stream.Peek();
                        }

                        if (token.TokenType != ModelTokenType.ObjectEnd)
                        {
                            throw new TokenException <ModelTokenType>(
                                      token,
                                      String.Format(JsonMLOutTransformer.ErrorUnterminatedAttributeBlock, token.TokenType));
                        }

                        // consume object end token
                        stream.Pop();
                        token = stream.Peek();
                        break;
                    }

                    case ModelTokenType.ArrayEnd:
                    {
                        yield return(MarkupGrammar.TokenElementEnd);

                        stream.Pop();
                        token = stream.Peek();
                        break;
                    }

                    case ModelTokenType.Primitive:
                    {
                        yield return(token.ChangeType(MarkupTokenType.Primitive));

                        stream.Pop();
                        token = stream.Peek();
                        break;
                    }

                    default:
                    {
                        // the rest are invalid outside of attribute block
                        throw new TokenException <ModelTokenType>(
                                  token,
                                  String.Format(JsonMLOutTransformer.ErrorUnexpectedToken, token.TokenType));
                    }
                    }
                }
            }
Ejemplo n.º 27
0
        public void Format_ArrayNestedDeeply_ReturnsExpectedArray()
        {
            // input from pass2.json in test suite at http://www.json.org/JSON_checker/
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("array")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenPrimitive("Not too deep"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenArrayBegin(new DataName("item")),
                ModelGrammar.TokenPrimitive("Not too deep"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd
            };

            var transformer = new XmlReader.XmlInTransformer(new DataReaderSettings());
            var actual      = transformer.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 28
0
        public void GetTokens_MixedTextValues_ReturnsTextValue()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("p")),
                ModelGrammar.TokenPrimitive(@"You can add a string to a number, but this stringifies the number:"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("math")),
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("ms")),
                ModelGrammar.TokenPrimitive(@"x<y"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("mo")),
                ModelGrammar.TokenPrimitive(@"+"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("mn")),
                ModelGrammar.TokenPrimitive(@"3"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("mo")),
                ModelGrammar.TokenPrimitive(@"="),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("ms")),
                ModelGrammar.TokenPrimitive(@"x<y3"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n"),
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("p")),
                MarkupGrammar.TokenPrimitive(@"You can add a string to a number, but this stringifies the number:"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n"),
                MarkupGrammar.TokenElementBegin(new DataName("math")),
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("ms")),
                MarkupGrammar.TokenPrimitive(@"x<y"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("mo")),
                MarkupGrammar.TokenPrimitive(@"+"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("mn")),
                MarkupGrammar.TokenPrimitive(@"3"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("mo")),
                MarkupGrammar.TokenPrimitive(@"="),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n\t"),
                MarkupGrammar.TokenElementBegin(new DataName("ms")),
                MarkupGrammar.TokenPrimitive(@"x<y3"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenPrimitive("\r\n"),
                MarkupGrammar.TokenElementEnd,
            };

            var converter = new JsonMLWriter.JsonMLOutTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 29
0
            /// <summary>
            /// Gets a token sequence from the XmlReader
            /// </summary>
            /// <param name="reader"></param>
            /// <returns></returns>
            public IEnumerable <Token <MarkupTokenType> > GetTokens(System.Xml.XmlReader reader)
            {
                if (reader == null)
                {
                    throw new ArgumentNullException("reader");
                }

                while (true)
                {
                    // have to isolate try-catch away from yields
                    try
                    {
                        if (!reader.Read())
                        {
                            ((IDisposable)reader).Dispose();
                            break;
                        }
                    }
                    catch (System.Xml.XmlException ex)
                    {
                        throw new DeserializationException(ex.Message, ex.LinePosition, ex.LineNumber, -1, ex);
                    }
                    catch (Exception ex)
                    {
                        throw new DeserializationException(ex.Message, -1, ex);
                    }

                    switch (reader.NodeType)
                    {
                    case System.Xml.XmlNodeType.Element:
                    {
                        DataName tagName   = new DataName(reader.LocalName, reader.Prefix, reader.NamespaceURI);
                        bool     isVoidTag = reader.IsEmptyElement;

                        IDictionary <DataName, string> attributes;
                        if (reader.HasAttributes)
                        {
                            attributes = new CanonicalList();
                            while (reader.MoveToNextAttribute())
                            {
                                if (String.IsNullOrEmpty(reader.Prefix) && reader.LocalName == "xmlns" ||
                                    reader.Prefix == "xmlns")
                                {
                                    continue;
                                }

                                attributes[new DataName(reader.LocalName, reader.Prefix, reader.NamespaceURI)] = reader.Value;
                            }
                        }
                        else
                        {
                            attributes = null;
                        }

                        if (isVoidTag)
                        {
                            yield return(MarkupGrammar.TokenElementVoid(tagName));
                        }
                        else
                        {
                            yield return(MarkupGrammar.TokenElementBegin(tagName));
                        }

                        if (attributes != null)
                        {
                            foreach (var attribute in attributes)
                            {
                                yield return(MarkupGrammar.TokenAttribute(attribute.Key));

                                yield return(MarkupGrammar.TokenPrimitive(attribute.Value));
                            }
                        }
                        break;
                    }

                    case System.Xml.XmlNodeType.EndElement:
                    {
                        yield return(MarkupGrammar.TokenElementEnd);

                        break;
                    }

                    case System.Xml.XmlNodeType.Attribute:
                    {
                        yield return(MarkupGrammar.TokenAttribute(new DataName(reader.Name, reader.Prefix, reader.NamespaceURI, true)));

                        yield return(MarkupGrammar.TokenPrimitive(reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.Text:
                    {
                        yield return(MarkupGrammar.TokenPrimitive(reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.SignificantWhitespace:
                    case System.Xml.XmlNodeType.Whitespace:
                    {
                        yield return(MarkupGrammar.TokenPrimitive(reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.CDATA:
                    {
                        yield return(MarkupGrammar.TokenPrimitive(reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.Entity:
                    case System.Xml.XmlNodeType.EntityReference:
                    case System.Xml.XmlNodeType.EndEntity:
                    {
                        break;
                    }

                    case System.Xml.XmlNodeType.ProcessingInstruction:
                    case System.Xml.XmlNodeType.XmlDeclaration:
                    {
                        yield return(MarkupGrammar.TokenUnparsed("?", "?", reader.Name + " " + reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.Comment:
                    {
                        yield return(MarkupGrammar.TokenUnparsed("!--", "--", reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.DocumentType:
                    {
                        yield return(MarkupGrammar.TokenUnparsed("!DOCTYPE ", "", reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.Notation:
                    {
                        yield return(MarkupGrammar.TokenUnparsed("!NOTATION ", "", reader.Value));

                        break;
                    }

                    case System.Xml.XmlNodeType.None:
                    {
                        ((IDisposable)reader).Dispose();
                        yield break;
                    }

                    case System.Xml.XmlNodeType.Document:
                    case System.Xml.XmlNodeType.DocumentFragment:
                    default:
                    {
                        continue;
                    }
                    }
                }
                ;
            }