Beispiel #1
0
        public void CanAssignValueToPathExpression()
        {
            var source = @"a.b.c=1";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal(1L, root.GetInt64("a.b.c"));
        }
Beispiel #2
0
        public void SubstitutionPathMustBeFullyQualified()
        {
            var source = @"
    foo = outerhello
    bar {
        foo = innerhello
        suba = ${foo}
        subb = ${bar.foo}
    }
";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal("outerhello", root.GetString("bar.suba"));
            Assert.Equal("innerhello", root.GetString("bar.subb"));

            var source2 = @"
    foo {
        bar = hello
        suba = ${bar}
    }
";
            var ex      = Record.Exception(() => JsonPlusParser.Parse(source2));

            Assert.NotNull(ex);
            Assert.IsType <JsonPlusParserException>(ex);
            _output.WriteLine($"Exception message: {ex.Message}");
        }
Beispiel #3
0
        public void CanParseJsonWithNoRootBraces()
        {
            var source = @"
""root"" : {
  ""int"" : 1,
  ""string"" : ""foo"",
  ""object"" : {
    ""hasContent"" : true
  },
  ""array"" : [1,2,3],
  ""null"" : null,
  ""double"" : 1.23,
  ""bool"" : true
},
""root_2"" : 1234";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal("1", root.GetString("root.int"));
            Assert.Equal("1.23", root.GetString("root.double"));
            Assert.True(root.GetBoolean("root.bool"));
            Assert.True(root.GetBoolean("root.object.hasContent"));
            Assert.Null(root.GetString("root.null"));
            Assert.Equal("foo", root.GetString("root.string"));
            Assert.True(new[] { 1, 2, 3 }.SequenceEqual(JsonPlusParser.Parse(source).GetInt32List("root.array")));
            Assert.Equal("1234", root.GetString("root_2"));
        }
Beispiel #4
0
        public void GettingArrayFromLiteralsReturnsNull() //undefined behavior in spec
        {
            var source = " literal : a b c";
            var res    = JsonPlusParser.Parse(source).GetStringList("literal");

            Assert.Empty(res);
        }
Beispiel #5
0
        public void CanMergeObject_RecursiveMerging()
        {
            var source = @"
foo
{
  bar 
  {
    a : 42
    b : 43 
  }
},
foo
{ 
  bar
  {
    b : 44
    c : 45
    baz
    {
      a : 9000
    }
  }
}
";

            var root = JsonPlusParser.Parse(source);

            Assert.Equal(42, root.GetInt32("foo.bar.a"));
            Assert.Equal(44, root.GetInt32("foo.bar.b"));
            Assert.Equal(45, root.GetInt32("foo.bar.c"));
            Assert.Equal(9000, root.GetInt32("foo.bar.baz.a"));
        }
Beispiel #6
0
        public void PlusEqualOperatorShouldExpandToSelfReferencingArrayConcatenation()
        {
            var source1 = @"
a = [ 1, 2 ]
a += 3
a += [4, 5]
";

            var root1 = JsonPlusParser.Parse(source1);

            Assert.True(new[] { 1, 2, 3, 4, 5 }.SequenceEqual(root1.GetInt32List("a")));

            var source = @"
a = [ 1, 2 ]
a += 3
a += ${b}
b = [ 4, 5 ]
";

            JsonPlusRoot root = null;
            var          ex   = Record.Exception(() => root = JsonPlusParser.Parse(source));

            Assert.Null(ex);
            Assert.True(new [] { 1, 2, 3, 4, 5 }.SequenceEqual(root.GetInt32List("a")));
        }
Beispiel #7
0
        public void ShouldRemoveAllTrailingWhitespace()
        {
            var source = $"a = literal value{WhitespaceDef.Whitespaces}";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal("literal value", root.GetString("a"));
        }
Beispiel #8
0
        public void SubstitutionChangeValueByPath()
        {
/*
 *          var source = @"
 *  foo = dummy
 *  subfoo = ${foo}sub1
 *  subbar = ${foo}sub2
 *  deep {
 *      subfoo = ${foo}subx
 *      subbar = ${foo}suby
 *  }
 *  subbar = world
 * ";
 */
            var source = @"
    foo = dummy
    subfoo = ${foo}sub1
    deep {
        subfoo = ${foo}subx
        subbar = ${foo}suby
    }
    subbar = ${foo}sub2
    subbar = world
";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal("dummy", root.GetString("foo"));
            Assert.Equal("dummysub1", root.GetString("subfoo"));
            Assert.Equal("dummysubx", root.GetString("deep.subfoo"));
            Assert.Equal("dummysuby", root.GetString("deep.subbar"));
            Assert.Equal("world", root.GetString("subbar"));
        }
Beispiel #9
0
        public void ArrayItemSupportObjectSubstitution()
        {
            /*
             * var source = @"
             * foo {
             * x = 123
             * }
             * bar = ${foo}{ y = 456 }
             * ";
             * var root = JsonPlusParser.Parse(source);
             * Assert.Equal(123, root.GetInt32("bar.x"));
             * Assert.Equal(456, root.GetInt32("bar.y"));
             */



            var source   = @"
    foo {
        x = 123
    }
    bar = [${foo}, ${foo}{ y = 456 }]
";
            var root     = JsonPlusParser.Parse(source);
            var barValue = root.GetValue("bar").GetArray();

            Assert.Equal(123, barValue[0].GetObject()["x"].GetValue().GetInt32());
            Assert.Equal(123, barValue[1].GetObject()["x"].GetValue().GetInt32());
            Assert.Equal(456, barValue[1].GetObject()["y"].GetValue().GetInt32());
        }
Beispiel #10
0
        public void ShouldPreserveWhitespacesInTheMiddle()
        {
            var source = $"a = literal{WhitespaceDef.Whitespaces}value";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal($"literal{WhitespaceDef.Whitespaces}value", root.GetString("a"));
        }
Beispiel #11
0
        public void CanConcatenateArray()
        {
            var source = @"a=[1,2] [3,4]";

            Assert.True(
                new[] { 1, 2, 3, 4 }.SequenceEqual(
                    JsonPlusParser.Parse(source).GetInt32List("a")));
        }
Beispiel #12
0
        public void UndefinedQuestionMarkShouldFailSilently()
        {
            var source = @"a {
  b = ${?a.c}
}";

            JsonPlusParser.Parse(source);
        }
Beispiel #13
0
        public void SimpleSubstitutionBetweenBracketsShouldResolveToArray(string bar, string[] expected)
        {
            var source = $@"foo = hello
bar = {bar}";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal(expected, root.GetStringList("bar").ToArray());
        }
Beispiel #14
0
        public void UndefinedQuestionMarkSubstitutionShouldResolveToEmptyArray()
        {
            var source = @"a {
  c = ${?a.b} [4,5,6]
}";

            Assert.True(new[] { 4, 5, 6 }.SequenceEqual(JsonPlusParser.Parse(source).GetInt32List("a.c")));
        }
Beispiel #15
0
        public void CanConcatenateObjectsViaValueConcatenation_1()
        {
            var source = "a : { b : 1 } { c : 2 }";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal(1, root.GetInt32("a.b"));
            Assert.Equal(2, root.GetInt32("a.c"));
        }
Beispiel #16
0
        public void CanUsePathsAsKeys_3_14()
        {
            var src1 = @"3.14 : 42";
            var src2 = @"3 { 14 : 42}";

            Assert.Equal(
                JsonPlusParser.Parse(src1).GetString("3.14"),
                JsonPlusParser.Parse(src2).GetString("3.14"));
        }
Beispiel #17
0
        public void CanUsePathsAsKeys_true()
        {
            var src1 = @"true : 42";
            var src2 = @"""true"" : 42";

            Assert.Equal(
                JsonPlusParser.Parse(src1).GetString("true"),
                JsonPlusParser.Parse(src2).GetString("true"));
        }
Beispiel #18
0
        public void TwoUndefinedQuestionMarkSubstitutionShouldNotCreateField()
        {
            var source = @"a{
    foo = ${?bar}${?baz}
}";
            var root   = JsonPlusParser.Parse(source);

            Assert.False(root.HasPath("a.foo"));
        }
Beispiel #19
0
        public void UndefinedQuestionMarkSubstitutionShouldResolveToEmptyString()
        {
            var source = @"a{
    b = My name is ${?foo}
}";
            var root   = JsonPlusParser.Parse(source);

            Assert.Equal("My name is ", root.GetString("a.b"));
        }
Beispiel #20
0
        public void UndefinedQuestionMarkSubstitutionShouldNotAddArrayElement()
        {
            var source = @"a{
    b = [ 1, ${?foo}, 3, 4 ]
}";
            var root   = JsonPlusParser.Parse(source);

            Assert.True(new[] { 1, 3, 4 }.SequenceEqual(root.GetInt32List("a.b")));
        }
Beispiel #21
0
        public void CanUsePathsAsKeys_3()
        {
            var src1 = @"3 : 42";
            var src2 = @"""3"" : 42";

            Assert.Equal(
                JsonPlusParser.Parse(src1).GetString("3"),
                JsonPlusParser.Parse(src2).GetString("3"));
        }
Beispiel #22
0
        public void DoNotParseSubstitutionInsideQuotedString()
        {
            var source = @"a{
    b = 5
    c = ""I have ${a.b} Tesla car(s).""
}";

            Assert.Equal("I have ${a.b} Tesla car(s).", JsonPlusParser.Parse(source).GetString("a.c"));
        }
Beispiel #23
0
        public void CanUsePathsAsKeys_FooBarBaz()
        {
            var src1 = @"foo.bar.baz : 42";
            var src2 = @"foo { bar { baz : 42 } }";

            Assert.Equal(
                JsonPlusParser.Parse(src1).GetString("foo.bar.baz"),
                JsonPlusParser.Parse(src2).GetString("foo.bar.baz"));
        }
Beispiel #24
0
        public void CanUsePathsAsKeys_A_B_C()
        {
            var src1 = @"a b c : 42";
            var src2 = @"""a b c"" : 42";

            Assert.Equal(
                JsonPlusParser.Parse(src1).GetString("a b c"),
                JsonPlusParser.Parse(src2).GetString("a b c"));
        }
Beispiel #25
0
        public void CanConcatenateQuotedString()
        {
            var source = @"a {
  name = Roger
  c = ""Hello my name is ""${a.name}
}";

            Assert.Equal("Hello my name is Roger", JsonPlusParser.Parse(source).GetString("a.c"));
        }
Beispiel #26
0
        public void ExtraCommaAtTheEndIgnored()
        {
            var src1 = @"a:1, b:2, c:3,";
            var src2 = @"a:1, b:2, c:3";

            Assert.True(
                JsonPlusParser.Parse(src1).AsEnumerable().SequenceEqual(
                    JsonPlusParser.Parse(src2).AsEnumerable()));
        }
Beispiel #27
0
        public void ThrowsParserExceptionOnIllegalCommaInFrontOfArray()
        {
            var source = @"array : [, 1, 2, 3]";

            var ex = Record.Exception(() => JsonPlusParser.Parse(source));

            Assert.NotNull(ex);
            Assert.IsType <JsonPlusParserException>(ex);
            _output.WriteLine($"Exception message: {ex.Message}");
        }
Beispiel #28
0
        public void ThrowsParserExceptionOnMultipleTrailingCommasInArray()
        {
            var source = @"array : [1, 2, 3,, ]";

            var ex = Record.Exception(() => JsonPlusParser.Parse(source));

            Assert.NotNull(ex);
            Assert.IsType <JsonPlusParserException>(ex);
            _output.WriteLine($"Exception message: {ex.Message}");
        }
Beispiel #29
0
        public void ThrowsParserExceptionOnMultipleCommas()
        {
            var source = @"{a:1,, b:2, c:3}";

            var ex = Record.Exception(() => JsonPlusParser.Parse(source));

            Assert.NotNull(ex);
            Assert.IsType <JsonPlusParserException>(ex);
            _output.WriteLine($"Exception message: {ex.Message}");
        }
Beispiel #30
0
        public void CanConcatenateArray_2()
        {
            var source = @"a {
  b = [4,5,6]
  c = [1,2,3] ${a.b}
}";
            var root   = JsonPlusParser.Parse(source);

            Assert.True(new[] { 1, 2, 3, 4, 5, 6 }.SequenceEqual(root.GetInt32List("a.c")));
        }