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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); } }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }