コード例 #1
0
        public void Parse_WhenApplyToObjectLiteral_ReturnsObjectJsonObject()
        {
            // Arrange
            var p = new JsonParser();

            // Act
            IJsonObject r0 = p.Parse(Input.FromString("{}"));
            IJsonObject r1 = p.Parse(Input.FromString(" {} "));
            IJsonObject r2 = p.Parse(Input.FromString("{ foo:\"bar\" }"));
            IJsonObject r3 = p.Parse(Input.FromString("{'foo' : \"bar\", baz: true}"));
            IJsonObject r4 = p.Parse(Input.FromString(" {\"foo\" : 'bar' ,baz:true} "));
            IJsonObject r5 = p.Parse(Input.FromString(" {\"foo\": {\"bar\": {\"baz\": null}}} "));

            // Assert
            Assert.That(r0.Properties.Count(), Is.EqualTo(0));
            Assert.That(r1.Properties.Count(), Is.EqualTo(0));
            Assert.That(r2.Properties.Count(), Is.EqualTo(1));
            Assert.That(r3.Properties.Count(), Is.EqualTo(2));
            Assert.That(r4.Properties.Count(), Is.EqualTo(2));
            Assert.That(r4.GetProperty("foo").AsString(), Is.EqualTo("bar"));
            Assert.That(r4.GetProperty("baz").AsBoolean(), Is.True);
            Assert.That(r5.Properties.Count(), Is.EqualTo(1));
            Assert.That(r5.GetProperty("foo")
                        .GetProperty("bar")
                        .GetProperty("baz")
                        .TypeIs(JsonObjectType.Null), Is.True);
        }
コード例 #2
0
        public static void Main(string[] args)
        {
            // 1. Read JSON
            // JsonObject.FromXxxx methods read JSON from String, File and Stream.
            IJsonObject j1 = JsonObject.FromString("{foo: 123, bar: true, baz: \"hello\"}");

            // IJsonObject#GetProperty() accesses JSON object's property.
            // NOTE: GetPropery() and XxxxValue() methods have another version
            // that can be specified fallback value.
            Console.WriteLine("j1 = {0}", j1);
            Console.WriteLine("foo = {0}", j1.GetProperty("foo").AsNumber());
            Console.WriteLine("bar = {0}", j1.GetProperty("bar").AsBoolean());
            Console.WriteLine("baz = {0}", j1.GetProperty("baz").AsString());
            Console.WriteLine("baa exists? = {0}", j1.HasProperty("baa"));

            // 2. Build JSON
            // JsonObject.Builder() returns new builder instance.
            IJsonObject j2 = JsonObject
                             .Builder()
                             .Append("foo", "hello")
                             .Append("bar", "hello", "bonjour", "こんにちは")
                             .Append("baz", (b) => {
                // Lambda's argument is new builder
                // instance for nested object.
                b.Append("bazProp1", 1);
                b.Append("bazProp2", 2);
            })
                             .Build();
            // The builder can be initialized with existed JSON.
            IJsonObject j3 = JsonObject
                             .Builder(j2).Append("baa", 123).Build();

            Console.WriteLine("j2 = {0}", j2);
            Console.WriteLine("j3 = {0}", j3);

            // 3. Format JSON
            IJsonFormatOptions opts = JsonFormatOptions
                                      .Builder()
                                      .Indent(true).SoftTabs(true).TabWidth(2)
                                      .Build();

            Console.WriteLine("j3' = {0}", j3.Format(opts));
        }
コード例 #3
0
        public void GetProperty_ThrowsException()
        {
            // Arrange
            IJsonObject json = JsonObject.Of(true);

            // Act
            // Assert
            Assert.Throws <ApplicationException>(() =>
            {
                json.GetProperty("foo");
            });
        }
コード例 #4
0
        public void GetProperty_WhenPropertyDoesNotExist_ThrowsException()
        {
            // Arrange
            IJsonObject json0 = JsonObject.FromString("{}");
            IJsonObject json1 = JsonObject.FromString("{a:'abc',b:123,c:true,d:null,e:[],f:{}}");

            // Act
            // Assert
            Assert.Throws <ApplicationException>(() => json0.GetProperty("foo"));
            Assert.DoesNotThrow(() => json1.GetProperty("a"));
            Assert.DoesNotThrow(() => json1.GetProperty("b"));
            Assert.DoesNotThrow(() => json1.GetProperty("c"));
            Assert.DoesNotThrow(() => json1.GetProperty("d"));
            Assert.DoesNotThrow(() => json1.GetProperty("e"));
            Assert.DoesNotThrow(() => json1.GetProperty("f"));
            Assert.Throws <ApplicationException>(() => json1.GetProperty("g"));
        }
コード例 #5
0
        public void GetProperty_WhenPropertyExists_ReturnsTheProperty()
        {
            // Arrange
            IJsonObject json1 = JsonObject.FromString("{a:'abc',b:123,c:true,d:null,e:[],f:{}}");

            // Act
            // Assert
            Assert.That(json1.GetProperty("a").AsString(), Is.EqualTo("abc"));
            Assert.That(json1.GetProperty("b").AsNumber(), Is.EqualTo(123));
            Assert.That(json1.GetProperty("c").AsBoolean(), Is.EqualTo(true));
            Assert.That(json1.GetProperty("d").TypeIs(JsonObjectType.Null), Is.True);
            Assert.That(json1.GetProperty("e").AsArray().Count, Is.EqualTo(0));
            Assert.That(json1.GetProperty("f").TypeIs(JsonObjectType.Object), Is.True);
        }