コード例 #1
0
        public void Analyze_EmptyInput_ReturnsNothing()
        {
            var input = Enumerable.Empty <Token <ModelTokenType> >();

            var analyzer = new ModelAnalyzer(new DataReaderSettings());

            Assert.False(analyzer.Analyze <object>(input).Any());
        }
コード例 #2
0
        public void IsArray_StringPrimitive_ReturnsFalse()
        {
            var input = new[]
            {
                ModelGrammar.TokenPrimitive("Hello.")
            };

            Assert.False(input.IsArray());
        }
コード例 #3
0
        public void IsArray_FalsePrimitive_ReturnsFalse()
        {
            var input = new[]
            {
                ModelGrammar.TokenFalse
            };

            Assert.False(input.IsArray());
        }
コード例 #4
0
        public void IsArray_ObjectEmpty_ReturnsFalse()
        {
            var input = new[]
            {
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenObjectEnd
            };

            Assert.False(input.IsArray());
        }
コード例 #5
0
        public void IsPrimitive_ArrayEmpty_ReturnsFalse()
        {
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenArrayEnd
            };

            Assert.False(input.IsPrimitive());
        }
コード例 #6
0
        public void HasProperty_PickNonExisting_ReturnsFalse()
        {
            var input = new[]
            {
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("key1"),
                ModelGrammar.TokenNull,
                ModelGrammar.TokenProperty("key2"),
                ModelGrammar.TokenPrimitive("Hello!"),
                ModelGrammar.TokenProperty("three"),
                ModelGrammar.TokenPrimitive(3),
                ModelGrammar.TokenProperty("4"),
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenObjectEnd
            };

            // test for a specific property
            var actual = input.HasProperty(name => name.LocalName == "five");

            Assert.False(actual);
        }
コード例 #7
0
        public void ReadMany_ObjectExtraValueAfterClose_DeserializesStreamOfObject()
        {
            // input from fail10.json in test suite at http://www.json.org/JSON_checker/
            var input = new StringReader(@"{""Extra value after close"": true} ""misplaced quoted value""");

            var reader = new JsonReader(new DataReaderSettings());

            var enumerator = reader.ReadMany(input).GetEnumerator();

            Assert.True(enumerator.MoveNext());
            Assert.Equal(new Dictionary <string, object>
            {
                { "Extra value after close", true }
            },
                         enumerator.Current,
                         false);

            Assert.True(enumerator.MoveNext());
            Assert.Equal(
                "misplaced quoted value",
                enumerator.Current);

            Assert.False(enumerator.MoveNext());
        }
コード例 #8
0
        public void IsPrimitive_EmptySequence_ReturnsFalse()
        {
            var input = new Token <ModelTokenType> [0];

            Assert.False(input.IsPrimitive());
        }
コード例 #9
0
        public void Properties_GraphComplex_ReturnsGraph()
        {
            // input from pass1.json in test suite at http://www.json.org/JSON_checker/
            var input = new[]
            {
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("JSON Test Pattern pass1"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("object with 1 member"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive("array with 1 element"),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenPrimitive(-42),
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenFalse,
                ModelGrammar.TokenNull,
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenProperty("integer"),
                ModelGrammar.TokenPrimitive(1234567890),
                ModelGrammar.TokenProperty("real"),
                ModelGrammar.TokenPrimitive(-9876.543210),
                ModelGrammar.TokenProperty("e"),
                ModelGrammar.TokenPrimitive(0.123456789e-12),
                ModelGrammar.TokenProperty("E"),
                ModelGrammar.TokenPrimitive(1.234567890E+34),
                ModelGrammar.TokenProperty(""),
                ModelGrammar.TokenPrimitive(23456789012E66),
                ModelGrammar.TokenProperty("zero"),
                ModelGrammar.TokenPrimitive(0),
                ModelGrammar.TokenProperty("one"),
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenProperty("space"),
                ModelGrammar.TokenPrimitive(" "),
                ModelGrammar.TokenProperty("quote"),
                ModelGrammar.TokenPrimitive("\""),
                ModelGrammar.TokenProperty("backslash"),
                ModelGrammar.TokenPrimitive("\\"),
                ModelGrammar.TokenProperty("controls"),
                ModelGrammar.TokenPrimitive("\b\f\n\r\t"),
                ModelGrammar.TokenProperty("slash"),
                ModelGrammar.TokenPrimitive("/ & /"),
                ModelGrammar.TokenProperty("alpha"),
                ModelGrammar.TokenPrimitive("abcdefghijklmnopqrstuvwyz"),
                ModelGrammar.TokenProperty("ALPHA"),
                ModelGrammar.TokenPrimitive("ABCDEFGHIJKLMNOPQRSTUVWYZ"),
                ModelGrammar.TokenProperty("digit"),
                ModelGrammar.TokenPrimitive("0123456789"),
                ModelGrammar.TokenProperty("0123456789"),
                ModelGrammar.TokenPrimitive("digit"),
                ModelGrammar.TokenProperty("special"),
                ModelGrammar.TokenPrimitive("`1~!@#$%^&*()_+-={':[,]}|;.</>?"),
                ModelGrammar.TokenProperty("hex"),
                ModelGrammar.TokenPrimitive("\u0123\u4567\u89AB\uCDEF\uabcd\uef4A"),
                ModelGrammar.TokenProperty("true"),
                ModelGrammar.TokenTrue,
                ModelGrammar.TokenProperty("false"),
                ModelGrammar.TokenFalse,
                ModelGrammar.TokenProperty("null"),
                ModelGrammar.TokenNull,
                ModelGrammar.TokenProperty("array"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenProperty("object"),
                ModelGrammar.TokenObjectBeginUnnamed,
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenProperty("address"),
                ModelGrammar.TokenPrimitive("50 St. James Street"),
                ModelGrammar.TokenProperty("url"),
                ModelGrammar.TokenPrimitive("http://www.JSON.org/"),
                ModelGrammar.TokenProperty("comment"),
                ModelGrammar.TokenPrimitive("// /* <!-- --"),
                ModelGrammar.TokenProperty("# -- --> */"),
                ModelGrammar.TokenPrimitive(" "),
                ModelGrammar.TokenProperty(" s p a c e d "),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenPrimitive(2),
                ModelGrammar.TokenPrimitive(3),
                ModelGrammar.TokenPrimitive(4),
                ModelGrammar.TokenPrimitive(5),
                ModelGrammar.TokenPrimitive(6),
                ModelGrammar.TokenPrimitive(7),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenProperty("compact"),
                ModelGrammar.TokenArrayBeginUnnamed,
                ModelGrammar.TokenPrimitive(1),
                ModelGrammar.TokenPrimitive(2),
                ModelGrammar.TokenPrimitive(3),
                ModelGrammar.TokenPrimitive(4),
                ModelGrammar.TokenPrimitive(5),
                ModelGrammar.TokenPrimitive(6),
                ModelGrammar.TokenPrimitive(7),
                ModelGrammar.TokenArrayEnd,
                ModelGrammar.TokenProperty("jsontext"),
                ModelGrammar.TokenPrimitive("{\"object with 1 member\":[\"array with 1 element\"]}"),
                ModelGrammar.TokenProperty("quotes"),
                ModelGrammar.TokenPrimitive("&#34; \u0022 %22 0x22 034 &#x22;"),
                ModelGrammar.TokenProperty("/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"),
                ModelGrammar.TokenPrimitive("A key can be any string"),
                ModelGrammar.TokenObjectEnd,
                ModelGrammar.TokenPrimitive(0.5),
                ModelGrammar.TokenPrimitive(98.6),
                ModelGrammar.TokenPrimitive(99.44),
                ModelGrammar.TokenPrimitive(1066),
                ModelGrammar.TokenPrimitive(10.0),
                ModelGrammar.TokenPrimitive(1.0),
                ModelGrammar.TokenPrimitive(0.1),
                ModelGrammar.TokenPrimitive(1.0),
                ModelGrammar.TokenPrimitive(2.0),
                ModelGrammar.TokenPrimitive(2.0),
                ModelGrammar.TokenPrimitive("rosebud"),
                ModelGrammar.TokenArrayEnd
            };

            var expected = new Dictionary <DataName, IEnumerable <Token <ModelTokenType> > >
            {
                { new DataName("url"), new[] { ModelGrammar.TokenPrimitive("http://www.JSON.org/") } },
                { new DataName("compact"), new[] {
                      ModelGrammar.TokenArrayBeginUnnamed,
                      ModelGrammar.TokenPrimitive(1),
                      ModelGrammar.TokenPrimitive(2),
                      ModelGrammar.TokenPrimitive(3),
                      ModelGrammar.TokenPrimitive(4),
                      ModelGrammar.TokenPrimitive(5),
                      ModelGrammar.TokenPrimitive(6),
                      ModelGrammar.TokenPrimitive(7),
                      ModelGrammar.TokenArrayEnd,
                  } }
            };

            Assert.True(input.IsArray());
            Assert.False(input.IsObject());
            Assert.False(input.IsPrimitive());

            // cherry pick properties
            var actual = input
                         .ArrayItems(index => index == 8).FirstOrDefault()                            // select the big object
                         .Properties(name => name.LocalName == "url" || name.LocalName == "compact"); // select two properties

            Assert.Equal(expected, actual, false);
        }