Пример #1
0
        protected override Expression VisitConditional(ConditionalExpression expression, List <Token <ModelTokenType> > tokens)
        {
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);
            tokens.Add(ModelGrammar.TokenProperty(expression.NodeType));
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);

            try
            {
                tokens.Add(ModelGrammar.TokenProperty("Test"));
                this.Visit(expression.Test, tokens);

                tokens.Add(ModelGrammar.TokenProperty("IfTrue"));
                this.Visit(expression.IfTrue, tokens);

                tokens.Add(ModelGrammar.TokenProperty("IfFalse"));
                this.Visit(expression.IfFalse, tokens);

                // no change
                return(expression);
            }
            finally
            {
                tokens.Add(ModelGrammar.TokenObjectEnd);
                tokens.Add(ModelGrammar.TokenObjectEnd);
            }
        }
Пример #2
0
        public void GetTokens_ObjectDictionary_ReturnsObjectTokens()
        {
            var input = new Dictionary <string, object>
            {
                { "One", 1 },
                { "Two", 2 },
                { "Three", 3 }
            };

            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin("object"),
                ModelGrammar.TokenProperty("One"),
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenProperty("Two"),
                ModelGrammar.TokenPrimitive(2),
                ModelGrammar.TokenProperty("Three"),
                ModelGrammar.TokenPrimitive(3),
                ModelGrammar.TokenObjectEnd
            };

            var walker = new ModelWalker(new DataWriterSettings());
            var actual = walker.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #3
0
        public void GetTokens_ExpandoObjectNested_ReturnsObjectTokens()
        {
            dynamic input = new ExpandoObject();

            input.foo   = true;
            input.array = new object[]
            {
                false, 1, 2, Math.PI, null, "hello world."
            };

            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin("object"),
                ModelGrammar.TokenProperty("foo"),
                ModelGrammar.TokenPrimitive(true),
                ModelGrammar.TokenProperty("array"),
                ModelGrammar.TokenArrayBegin("array"),
                ModelGrammar.TokenPrimitive(false),
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenPrimitive(2),
                ModelGrammar.TokenPrimitive(Math.PI),
                ModelGrammar.TokenPrimitive(null),
                ModelGrammar.TokenPrimitive("hello world."),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenObjectEnd
            };

            var walker = new ModelWalker(new DataWriterSettings());
            var actual = walker.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #4
0
        public void GetTokens_HtmlContentPrettyPrinted_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("div")),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("class")),
                ModelGrammar.TokenPrimitive("content"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenPrimitive("\r\n\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("p")),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("style")),
                ModelGrammar.TokenPrimitive("color:red"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenPrimitive("\r\n\t\t"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("strong")),
                ModelGrammar.TokenPrimitive("Lorem ipsum"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive(" dolor sit amet, "),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("i")),
                ModelGrammar.TokenPrimitive("consectetur"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive(" adipiscing elit.\r\n\t"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive("\r\n"),
                ModelGrammar.TokenArrayEnd
            };
            var expected = 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 converter = new JsonMLWriter.JsonMLOutTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #5
0
        public void GetTokens_UnclosedTags_AutoCloses()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("odd", "a", "http://example.com/odd/a")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("auto-closed", "b", "http://example.com/auto-closed/b")),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("even", "c", "http://example.com/even/c")),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
            };
            var expected = 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.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("even", "c", "http://example.com/even/c")),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };

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

            Assert.Equal(expected, actual);
        }
Пример #6
0
        public void GetTokens_UndeclaredPrefixes_ReturnsDefault()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("one")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("two")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("three")),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd
            };
            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 converter = new JsonMLWriter.JsonMLOutTransformer();
            var actual    = converter.Transform(input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #7
0
        public void GetTokens_AttributeWhitespaceQuotDelims_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("root")),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("white")),
                ModelGrammar.TokenPrimitive(" extra whitespace around quote delims "),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenAttribute(new DataName("white")),
                MarkupGrammar.TokenPrimitive(" extra whitespace around quote delims "),
                MarkupGrammar.TokenElementEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #8
0
        public void Format_ArrayMultiItemPrettyPrint_ReturnsExpectedPrettyPrintedArray()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(0),
                ModelGrammar.TokenNull,
                ModelGrammar.TokenFalse,
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenArrayEnd
            };

            const string expected =
                @"[
	0,
	null,
	false,
	true
]";

            var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings {
                PrettyPrint = true
            });
            var actual = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
Пример #9
0
        public void Format_ObjectNestedPrettyPrint_ReturnsPrettyPrintedNestedObject()
        {
            // input from pass3.json in test suite at http://www.json.org/JSON_checker/
            var input = new[]
            {
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("JSON Test Pattern pass3"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("The outermost value"),
                ModelGrammar.TokenPrimitive("must be an object or array."),
                ModelGrammar.TokenProperty("In this test"),
                ModelGrammar.TokenPrimitive("It is an object."),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenObjectEnd
            };

            const string expected =
                @"{
	""JSON Test Pattern pass3"" : {
		""The outermost value"" : ""must be an object or array."",
		""In this test"" : ""It is an object.""
	}
}";

            var formatter = new JsonWriter.JsonFormatter(new DataWriterSettings {
                PrettyPrint = true
            });
            var actual = formatter.Format(input);

            Assert.Equal(expected, actual);
        }
Пример #10
0
        public void Format_NamedObjectOneProperty_RendersSimpleObject()
        {
            var input = new[]
            {
                ModelGrammar.TokenObjectBegin("Yada"),
                ModelGrammar.TokenProperty("key"),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd
            };

            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("div")),
                MarkupGrammar.TokenElementBegin(new DataName("dl")),
                MarkupGrammar.TokenAttribute(new DataName("title")),
                MarkupGrammar.TokenPrimitive(new DataName("Yada")),
                MarkupGrammar.TokenElementBegin(new DataName("dt")),
                MarkupGrammar.TokenPrimitive(new DataName("key")),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("dd")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #11
0
        public void Format_NamespacedObjectOneProperty_CorrectlyEmitsNamespace()
        {
            var input = new[]
            {
                ModelGrammar.TokenObjectBegin("foo"),
                ModelGrammar.TokenProperty(new DataName("key", String.Empty, "http://json.org")),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd
            };

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

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

            Assert.Equal(expected, actual);
        }
Пример #12
0
        protected override NewExpression VisitNew(NewExpression expression, List <Token <ModelTokenType> > tokens)
        {
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);
            tokens.Add(ModelGrammar.TokenProperty(expression.NodeType));
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);

            try
            {
                tokens.Add(ModelGrammar.TokenProperty("Arguments"));
                this.VisitExpressionList(expression.Arguments, tokens);

                tokens.Add(ModelGrammar.TokenProperty("Members"));
                if (expression.Members == null)
                {
                    tokens.Add(ModelGrammar.TokenNull);
                }
                else
                {
                    tokens.Add(ModelGrammar.TokenArrayBeginUnnamed);
                    foreach (var member in expression.Members)
                    {
                        tokens.Add(ModelGrammar.TokenPrimitive(ExpressionWalker.GetMemberName(member)));
                    }
                    tokens.Add(ModelGrammar.TokenArrayEnd);
                }

                // no change
                return(expression);
            }
            finally
            {
                tokens.Add(ModelGrammar.TokenObjectEnd);
                tokens.Add(ModelGrammar.TokenObjectEnd);
            }
        }
Пример #13
0
        protected override Expression VisitLambda(LambdaExpression expression, List <Token <ModelTokenType> > tokens)
        {
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);
            tokens.Add(ModelGrammar.TokenProperty(expression.NodeType));
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);

            try
            {
                tokens.Add(ModelGrammar.TokenProperty("Type"));
                tokens.Add(ModelGrammar.TokenPrimitive(ExpressionWalker.GetTypeName(expression.Type)));

                tokens.Add(ModelGrammar.TokenProperty("Body"));
                Expression body = this.Visit(expression.Body, tokens);

                tokens.Add(ModelGrammar.TokenProperty("Parameters"));
                tokens.Add(ModelGrammar.TokenArrayBeginUnnamed);
                foreach (ParameterExpression param in expression.Parameters)
                {
                    this.VisitParameter(param, tokens);
                }
                tokens.Add(ModelGrammar.TokenArrayEnd);

                // no change
                return(expression);
            }
            finally
            {
                tokens.Add(ModelGrammar.TokenObjectEnd);
                tokens.Add(ModelGrammar.TokenObjectEnd);
            }
        }
Пример #14
0
        protected override Expression VisitMethodCall(MethodCallExpression expression, List <Token <ModelTokenType> > tokens)
        {
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);
            tokens.Add(ModelGrammar.TokenProperty(expression.NodeType));
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);

            try
            {
                tokens.Add(ModelGrammar.TokenProperty("Object"));
                this.Visit(expression.Object, tokens);

                tokens.Add(ModelGrammar.TokenProperty("Method"));
                tokens.Add(ModelGrammar.TokenPrimitive(ExpressionWalker.GetMemberName(expression.Method)));

                tokens.Add(ModelGrammar.TokenProperty("Arguments"));

                this.VisitExpressionList(expression.Arguments, tokens);

                // no change
                return(expression);
            }
            finally
            {
                tokens.Add(ModelGrammar.TokenObjectEnd);
                tokens.Add(ModelGrammar.TokenObjectEnd);
            }
        }
Пример #15
0
        public void GetTokens_ParentAndChildDifferentDefaultNamespaces_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("foo", String.Empty, "http://json.org")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("child", String.Empty, "http://jsonfx.net")),
                ModelGrammar.TokenPrimitive("text value"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo", String.Empty, "http://json.org")),
                MarkupGrammar.TokenElementBegin(new DataName("child", String.Empty, "http://jsonfx.net")),
                MarkupGrammar.TokenPrimitive("text value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #16
0
        public void Format_ArrayMultiItem_ReturnsExpectedArray()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("array")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenPrimitive(0),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementVoid(new DataName("item")),
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenPrimitive(false),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("item")),
                MarkupGrammar.TokenPrimitive(true),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(0),
                ModelGrammar.TokenNull,
                ModelGrammar.TokenFalse,
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenArrayEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #17
0
        public void GetTokens_DifferentPrefixSameNamespace_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("foo", String.Empty, "http://example.org")),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("key", "blah", "http://example.org")),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = 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
            };

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

            Assert.Equal(expected, actual);
        }
Пример #18
0
        public void Format_ObjectNested_RendersNestedObject()
        {
            // input from pass3.json in test suite at http://www.json.org/JSON_checker/
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("object")),
                MarkupGrammar.TokenElementBegin(new DataName("JSON_x0020_Test_x0020_Pattern_x0020_pass3")),
                MarkupGrammar.TokenElementBegin(new DataName("The_x0020_outermost_x0020_value")),
                MarkupGrammar.TokenPrimitive("must be an object or array."),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementBegin(new DataName("In_x0020_this_x0020_test")),
                MarkupGrammar.TokenPrimitive("It is an object."),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("JSON Test Pattern pass3"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("The outermost value"),
                ModelGrammar.TokenPrimitive("must be an object or array."),
                ModelGrammar.TokenProperty("In this test"),
                ModelGrammar.TokenPrimitive("It is an object."),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenObjectEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #19
0
        public void GetTokens_SingleAttributeEmptyValue_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("root")),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("emptyValue")),
                ModelGrammar.TokenPrimitive(String.Empty),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenAttribute(new DataName("emptyValue")),
                MarkupGrammar.TokenPrimitive(String.Empty),
                MarkupGrammar.TokenElementEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #20
0
        public void Format_NestedObjectsAlternatingNamespaces_CorrectlyEmitsNamespaces()
        {
            var input = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo1", String.Empty, "http://json.org")),
                MarkupGrammar.TokenElementBegin(new DataName("key1", String.Empty, "http://jsonfx.net")),
                MarkupGrammar.TokenElementBegin(new DataName("key2", String.Empty, "http://json.org")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };
            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin(new DataName("foo1", String.Empty, "http://json.org")),
                ModelGrammar.TokenProperty(new DataName("key1", String.Empty, "http://jsonfx.net")),

                ModelGrammar.TokenObjectBegin(new DataName("key2", String.Empty, "http://json.org")),
                ModelGrammar.TokenProperty(new DataName("key2", String.Empty, "http://json.org")),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenObjectEnd,

                ModelGrammar.TokenObjectEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #21
0
        public void GetTokens_MultipleAttributes_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("root")),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty(new DataName("no-value")),
                ModelGrammar.TokenPrimitive(String.Empty),
                ModelGrammar.TokenProperty(new DataName("whitespace")),
                ModelGrammar.TokenPrimitive(" this contains whitespace "),
                ModelGrammar.TokenProperty(new DataName("anyQuotedText")),
                ModelGrammar.TokenPrimitive("/\\\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("root")),
                MarkupGrammar.TokenAttribute(new DataName("no-value")),
                MarkupGrammar.TokenPrimitive(String.Empty),
                MarkupGrammar.TokenAttribute(new DataName("whitespace")),
                MarkupGrammar.TokenPrimitive(" this contains whitespace "),
                MarkupGrammar.TokenAttribute(new DataName("anyQuotedText")),
                MarkupGrammar.TokenPrimitive("/\\\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"),
                MarkupGrammar.TokenElementEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #22
0
        public void GetTokens_ArrayRoot_ReturnsDocument()
        {
            // BSON doesn't provide a way to know if the root element is an array

            var input = new byte[]
            {
                0x26, 0x00, 0x00, 0x00,
                0x02, (byte)'0', 0, 0x08, 0x00, 0x00, 0x00, (byte)'a', (byte)'w', (byte)'e', (byte)'s', (byte)'o', (byte)'m', (byte)'e', 0x00,
                0x01, (byte)'1', 0, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x14, 0x40,
                0x10, (byte)'2', 0, 0xC2, 0x07, 0x00, 0x00,
                0x00
            };

            var expected = new[]
            {
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("0"),
                ModelGrammar.TokenPrimitive("awesome"),
                ModelGrammar.TokenProperty("1"),
                ModelGrammar.TokenPrimitive(5.05),
                ModelGrammar.TokenProperty("2"),
                ModelGrammar.TokenPrimitive(1986),
                ModelGrammar.TokenObjectEnd
            };

            var tokenizer = new BsonReader.BsonTokenizer();
            var actual    = tokenizer.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #23
0
        public void GetTokens_OverlappingTags_ReturnsSequenceAsIs()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("odd")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("auto-closed")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("even")),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd,
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("odd")),
                MarkupGrammar.TokenElementBegin(new DataName("auto-closed")),
                MarkupGrammar.TokenElementBegin(new DataName("even")),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };

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

            Assert.Equal(expected, actual);
        }
Пример #24
0
        public void GetTokens_CodeCommentAroundMarkup_ReturnsSingleUnparsedBlock()
        {
            var input = new[]
            {
                ModelGrammar.TokenPrimitive(new UnparsedBlock("%--", "--%",
                                                              @"
<html>
	<body style=""color:lime"">
		<!-- not much to say here -->
	</body>
</html>
"))
            };
            var expected = new[]
            {
                MarkupGrammar.TokenUnparsed("%--", "--%",
                                            @"
<html>
	<body style=""color:lime"">
		<!-- not much to say here -->
	</body>
</html>
")
            };

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

            Assert.Equal(expected, actual);
        }
Пример #25
0
        public void GetTokens_ArrayMultiItem_ReturnsArrayTokens()
        {
            var input = new object[]
            {
                false,
                true,
                null,
                'a',
                'b',
                'c',
                1,
                2,
                3
            };

            var expected = new[]
            {
                ModelGrammar.TokenArrayBegin("array"),
                ModelGrammar.TokenFalse,
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenNull,
                ModelGrammar.TokenPrimitive('a'),
                ModelGrammar.TokenPrimitive('b'),
                ModelGrammar.TokenPrimitive('c'),
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenPrimitive(2),
                ModelGrammar.TokenPrimitive(3),
                ModelGrammar.TokenArrayEnd
            };

            var walker = new ModelWalker(new DataWriterSettings());
            var actual = walker.GetTokens(input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #26
0
        public void GetTokens_NamespacedChildTag_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("foo")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("child", String.Empty, "http://example.com/schema")),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo")),
                MarkupGrammar.TokenElementBegin(new DataName("child", String.Empty, "http://example.com/schema")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd
            };

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

            Assert.Equal(expected, actual);
        }
Пример #27
0
        public void GetTokens_ExpandoObject_ReturnsObjectTokens()
        {
            dynamic input = new ExpandoObject();

            input.One   = 1;
            input.Two   = 2;
            input.Three = 3;

            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin("object"),
                ModelGrammar.TokenProperty("One"),
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenProperty("Two"),
                ModelGrammar.TokenPrimitive(2),
                ModelGrammar.TokenProperty("Three"),
                ModelGrammar.TokenPrimitive(3),
                ModelGrammar.TokenObjectEnd
            };

            var walker = new ModelWalker(new DataWriterSettings());
            var actual = walker.GetTokens((object)input).ToArray();

            Assert.Equal(expected, actual);
        }
Пример #28
0
        public void GetTokens_ParentAndChildSharePrefixedNamespace_ReturnsSequence()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("foo", "bar", "http://example.org")),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(new DataName("child", "bar", "http://example.org")),
                ModelGrammar.TokenPrimitive("value"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenArrayEnd
            };
            var expected = new[]
            {
                MarkupGrammar.TokenElementBegin(new DataName("foo", "bar", "http://example.org")),
                MarkupGrammar.TokenElementBegin(new DataName("child", "bar", "http://example.org")),
                MarkupGrammar.TokenPrimitive("value"),
                MarkupGrammar.TokenElementEnd,
                MarkupGrammar.TokenElementEnd,
            };

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

            Assert.Equal(expected, actual);
        }
Пример #29
0
        public void GetTokens_DynamicExample_ReturnsDynamicObject()
        {
            dynamic input = new DynamicExample();

            input.foo     = "hello world";
            input.number  = 42;
            input.boolean = false;
            input.@null   = null;

            var expected = new[]
            {
                ModelGrammar.TokenObjectBegin("DynamicExample"),
                ModelGrammar.TokenProperty("foo"),
                ModelGrammar.TokenPrimitive("hello world"),
                ModelGrammar.TokenProperty("number"),
                ModelGrammar.TokenPrimitive(42),
                ModelGrammar.TokenProperty("boolean"),
                ModelGrammar.TokenPrimitive(false),
                ModelGrammar.TokenProperty("null"),
                ModelGrammar.TokenPrimitive(null),
                ModelGrammar.TokenObjectEnd
            };

            var walker = new ModelWalker(new DataWriterSettings());
            var actual = walker.GetTokens(input).ToArray();

            Assert.Equal(expected, actual, false);
        }
Пример #30
0
        protected override Expression VisitBinary(BinaryExpression expression, List <Token <ModelTokenType> > tokens)
        {
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);
            tokens.Add(ModelGrammar.TokenProperty(expression.NodeType));
            tokens.Add(ModelGrammar.TokenObjectBeginUnnamed);

            try
            {
                tokens.Add(ModelGrammar.TokenProperty("Left"));
                this.Visit(expression.Left, tokens);

                tokens.Add(ModelGrammar.TokenProperty("Right"));
                this.Visit(expression.Right, tokens);

                tokens.Add(ModelGrammar.TokenProperty("Conversion"));
                this.Visit(expression.Conversion, tokens);

                tokens.Add(ModelGrammar.TokenProperty("IsLiftedToNull"));
                tokens.Add(ModelGrammar.TokenPrimitive(expression.IsLiftedToNull));

                tokens.Add(ModelGrammar.TokenProperty("Method"));
                tokens.Add(ModelGrammar.TokenPrimitive(ExpressionWalker.GetMemberName(expression.Method)));

                // no change
                return(expression);
            }
            finally
            {
                tokens.Add(ModelGrammar.TokenObjectEnd);
                tokens.Add(ModelGrammar.TokenObjectEnd);
            }
        }