Example #1
0
        public void ExtraCommaAfterLastArrayElementAllowed()
        {
            JsonReader reader = CreateReader("[4,2,]");

            reader.ReadToken(JsonTokenClass.Array);
            Assert.AreEqual(4, reader.ReadNumber().ToInt32());
            Assert.AreEqual(2, reader.ReadNumber().ToInt32());
            reader.ReadToken(JsonTokenClass.EndArray);
        }
Example #2
0
        public void ArrayValuesMayBeDelimitedBySemiColon()
        {
            JsonReader reader = CreateReader("[1;2;3]");

            reader.ReadToken(JsonTokenClass.Array);
            Assert.AreEqual(1, reader.ReadNumber().ToInt32());
            Assert.AreEqual(2, reader.ReadNumber().ToInt32());
            Assert.AreEqual(3, reader.ReadNumber().ToInt32());
            reader.ReadToken(JsonTokenClass.EndArray);
        }
Example #3
0
        public void SlashStarComment()
        {
            JsonReader reader = CreateReader(@"
            [ /*
                1,
                // 2, this is a single line comment
                3 */
            ]");

            reader.ReadToken(JsonTokenClass.Array);
            reader.ReadToken(JsonTokenClass.EndArray);
        }
        public void ImportNonObjectMember()
        {
            Surrogate     surrogate = new Surrogate(new object());
            ImportContext context   = new ImportContext();

            surrogate.Import(context, "foo", JsonText.CreateReader("bar"));
            JsonReader tail = surrogate.CreateObject(context).TailReader;

            tail.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("foo", tail.ReadMember());
            Assert.AreEqual("bar", tail.ReadString());
            tail.ReadToken(JsonTokenClass.EndObject);
        }
        public void CreateObject()
        {
            object                   obj       = new object();
            Surrogate                surrogate = new Surrogate(obj);
            ImportContext            context   = new ImportContext();
            ObjectConstructionResult result    = surrogate.CreateObject(context);

            Assert.AreSame(obj, result.Object);
            JsonReader tail = result.TailReader;

            tail.ReadToken(JsonTokenClass.Object);
            tail.ReadToken(JsonTokenClass.EndObject);
        }
Example #6
0
        public void Export()
        {
            JsonArray    a      = new JsonArray(new object[] { 123, "Hello World", true });
            JsonRecorder writer = new JsonRecorder();

            a.Export(writer);
            JsonReader reader = writer.CreatePlayer();

            reader.ReadToken(JsonTokenClass.Array);
            Assert.AreEqual(a[0], reader.ReadNumber().ToInt32());
            Assert.AreEqual(a[1], reader.ReadString());
            Assert.AreEqual(a[2], reader.ReadBoolean());
            reader.ReadToken(JsonTokenClass.EndArray);
        }
Example #7
0
        public void SlashSlashComment()
        {
            JsonReader reader = CreateReader(@"
            [
                1,
                // 2, this is a single line comment
                3
            ]");

            reader.ReadToken(JsonTokenClass.Array);
            Assert.AreEqual(1, reader.ReadNumber().ToInt32());
            Assert.AreEqual(3, reader.ReadNumber().ToInt32());
            reader.ReadToken(JsonTokenClass.EndArray);
        }
Example #8
0
        public void HashComment()
        {
            JsonReader reader = CreateReader(@"
            [
                1, # one
                2, # two
                3  # three
            ]");

            reader.ReadToken(JsonTokenClass.Array);
            Assert.AreEqual(1, reader.ReadNumber().ToInt32());
            Assert.AreEqual(2, reader.ReadNumber().ToInt32());
            Assert.AreEqual(3, reader.ReadNumber().ToInt32());
            reader.ReadToken(JsonTokenClass.EndArray);
        }
Example #9
0
        protected virtual void Import(ImportContext context, JsonReader reader)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            //
            // IMPORTANT! A new list is created and then committed to make
            // sure that this method is exception-safe. If something goes
            // wrong during the import of elements then this instance
            // will remain largely untouched.
            //

            ArrayList list = new ArrayList();

            reader.ReadToken(JsonTokenClass.Array);

            while (reader.TokenClass != JsonTokenClass.EndArray)
            {
                list.Add(context.Import(reader));
            }

            reader.Read();

            InnerList.Clear();
            InnerList.AddRange(list);
        }
Example #10
0
        protected virtual void Import(ImportContext context, JsonReader reader)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            // FIXME: Consider making this method exception-safe.
            // Right now this is a problem because of reliance on
            // DictionaryBase.

            Clear();

            reader.ReadToken(JsonTokenClass.Object);

            while (reader.TokenClass != JsonTokenClass.EndObject)
            {
                Put(reader.ReadMember(), context.Import(reader));
            }

            reader.Read();
        }
        public void InitializeWithReaderOnMember()
        {
            JsonReader reader = JsonText.CreateReader("{foo:bar}");

            reader.MoveToContent();
            reader.ReadToken(JsonTokenClass.Object);
            new FreeJsonMemberReadingHelper(reader);
        }
Example #12
0
        public void ExtraCommaAfterLastObjectMemberAllowded()
        {
            JsonReader reader = CreateReader("{ 'member':'value',}");

            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("member", reader.ReadMember());
            Assert.AreEqual("value", reader.ReadString());
            Assert.AreSame(JsonTokenClass.EndObject, reader.TokenClass);
        }
Example #13
0
        public void MemberValuesMayBeDelimitedBySemiColon()
        {
            JsonReader reader = CreateReader("{ 'm1' = 'v1'; 'm2' => 'v2' }");

            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("m1", reader.ReadMember());
            Assert.AreEqual("v1", reader.ReadString());
            Assert.AreEqual("m2", reader.ReadMember());
            Assert.AreEqual("v2", reader.ReadString());
            Assert.AreSame(JsonTokenClass.EndObject, reader.TokenClass);
        }
Example #14
0
        public void AlternateKeyDelimiters()
        {
            JsonReader reader = CreateReader("{ 'm1' = 'v1', 'm2' => 'v2' }");

            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("m1", reader.ReadMember());
            Assert.AreEqual("v1", reader.ReadString());
            Assert.AreEqual("m2", reader.ReadMember());
            Assert.AreEqual("v2", reader.ReadString());
            Assert.AreSame(JsonTokenClass.EndObject, reader.TokenClass);
        }
Example #15
0
        public void NullMemberNameHarmless()
        {
            JsonReader reader = CreateReader("{null:null}");

            reader.MoveToContent();
            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("null", reader.ReadMember());
            reader.ReadNull();
            Assert.AreSame(JsonTokenClass.EndObject, reader.TokenClass);
            Assert.IsFalse(reader.Read());
        }
        public void EmptyTailReading()
        {
            FreeJsonMemberReadingHelper helper = CreateHelper(@"{ y: 456, x: 123, z: 789 }");

            Assert.AreEqual(123, helper.ReadMember("x").ReadNumber().ToInt32());
            Assert.AreEqual(456, helper.ReadMember("y").ReadNumber().ToInt32());
            Assert.AreEqual(789, helper.ReadMember("z").ReadNumber().ToInt32());
            JsonReader tail = helper.GetTailReader();

            tail.ReadToken(JsonTokenClass.EndObject);
            Assert.IsFalse(tail.Read());
        }
        public void TailReadingWithNoBufferedMembers()
        {
            JsonReader tail = CreateHelper(@"{ y: 456, x: 123, z: 789 }").GetTailReader();

            Assert.AreEqual("y", tail.ReadMember());
            Assert.AreEqual(456, tail.ReadNumber().ToInt32());
            Assert.AreEqual("x", tail.ReadMember());
            Assert.AreEqual(123, tail.ReadNumber().ToInt32());
            Assert.AreEqual("z", tail.ReadMember());
            Assert.AreEqual(789, tail.ReadNumber().ToInt32());
            tail.ReadToken(JsonTokenClass.EndObject);
            Assert.IsFalse(tail.Read());
        }
        public void TailReading()
        {
            FreeJsonMemberReadingHelper helper = CreateHelper(@"
                { y: 456, 
                  x: 123, 
                  z: 789, 
                  obj1: { foo: bar }, 
                  comment: null, 
                  arr: [ 123, 456, 789 ],
                  obj2: { a: 1, b: 2, }, }");

            Assert.AreEqual(123, helper.ReadMember("x").ReadNumber().ToInt32());
            helper.ReadMember("comment").ReadNull();
            JsonReader reader = helper.BaseReader;

            Assert.AreEqual(JsonTokenClass.Member, reader.TokenClass);
            Assert.AreEqual("arr", reader.Text);
            JsonReader tail = helper.GetTailReader();

            Assert.AreEqual("y", tail.ReadMember());
            Assert.AreEqual(456, tail.ReadNumber().ToInt32());
            Assert.AreEqual("z", tail.ReadMember());
            Assert.AreEqual(789, tail.ReadNumber().ToInt32());
            Assert.AreEqual("obj1", tail.ReadMember());
            tail.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("foo", tail.ReadMember());
            Assert.AreEqual("bar", tail.ReadString());
            tail.ReadToken(JsonTokenClass.EndObject);
            Assert.AreEqual("arr", tail.ReadMember());
            tail.ReadToken(JsonTokenClass.Array);
            Assert.AreEqual(123, tail.ReadNumber().ToInt32());
            Assert.AreEqual(456, tail.ReadNumber().ToInt32());
            Assert.AreEqual(789, tail.ReadNumber().ToInt32());
            tail.ReadToken(JsonTokenClass.EndArray);
            Assert.AreEqual("obj2", tail.ReadMember());
            tail.StepOut();
            Assert.IsFalse(reader.Read());
        }
        protected override object ImportFromArray(ImportContext context, JsonReader reader)
        {
            if (context == null) throw new ArgumentNullException("context");
            if (reader == null) throw new ArgumentNullException("reader");

            object collection = CreateCollection();

            reader.ReadToken(JsonTokenClass.Array);

            ImportElements(collection, context, reader);

            if (reader.TokenClass != JsonTokenClass.EndArray)
                throw new Exception("Implementation error.");

            reader.Read();
            return collection;
        }
Example #20
0
 protected virtual void Import(ImportContext context, JsonReader reader)
 {
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     if (reader == null)
     {
         throw new ArgumentNullException("reader");
     }
     Clear();
     reader.ReadToken(JsonTokenClass.Object);
     while (reader.TokenClass != JsonTokenClass.EndObject)
     {
         Put(reader.ReadMember(), context.Import(reader));
     }
     reader.Read();
 }
        protected virtual void Import(ImportContext context, JsonReader reader)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            ArrayList arrayList = new ArrayList();

            reader.ReadToken(JsonTokenClass.Array);
            while (reader.TokenClass != JsonTokenClass.EndArray)
            {
                arrayList.Add(context.Import(reader));
            }
            reader.Read();
            base.InnerList.Clear();
            base.InnerList.AddRange(arrayList);
        }
Example #22
0
        public void Export()
        {
            JsonObject o = new JsonObject();

            o.Put("Number", 123);
            o.Put("String", "Hello World");
            o.Put("Boolean", true);
            JsonRecorder writer = new JsonRecorder();

            o.Export(writer);
            JsonReader reader = writer.CreatePlayer();

            reader.ReadToken(JsonTokenClass.Object);
            string[] members = (string[])o.GetNamesArray().ToArray(typeof(string));
            Assert.AreEqual(members[0], reader.ReadMember());
            Assert.AreEqual(o[members[0]], reader.ReadNumber().ToInt32());
            Assert.AreEqual(members[1], reader.ReadMember());
            Assert.AreEqual(o[members[1]], reader.ReadString());
            Assert.AreEqual(members[2], reader.ReadMember());
            Assert.AreEqual(o[members[2]], reader.ReadBoolean());
            Assert.AreEqual(JsonTokenClass.EndObject, reader.TokenClass);
        }
Example #23
0
        public void AutoCompletion()
        {
            JsonRecorder writer = new JsonRecorder();

            writer.WriteStartArray();
            writer.WriteStartObject();
            writer.WriteMember("outer");
            writer.WriteStartObject();
            writer.WriteMember("inner");
            writer.AutoComplete();

            JsonReader reader = writer.CreatePlayer();

            reader.ReadToken(JsonTokenClass.Array);
            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("outer", reader.ReadMember());
            reader.ReadToken(JsonTokenClass.Object);
            Assert.AreEqual("inner", reader.ReadMember());
            reader.ReadNull();
            reader.ReadToken(JsonTokenClass.EndObject);
            reader.ReadToken(JsonTokenClass.EndObject);
            reader.ReadToken(JsonTokenClass.EndArray);
            Assert.IsTrue(reader.EOF);
        }
Example #24
0
        protected virtual void Import(ImportContext context, JsonReader reader)
        {
            if (context == null)
                throw new ArgumentNullException("context");

            if (reader == null)
                throw new ArgumentNullException("reader");

            //
            // IMPORTANT! A new list is created and then committed to make
            // sure that this method is exception-safe. If something goes
            // wrong during the import of elements then this instance
            // will remain largely untouched.
            //

            ArrayList list = new ArrayList();

            reader.ReadToken(JsonTokenClass.Array);

            while (reader.TokenClass != JsonTokenClass.EndArray)
                list.Add(context.Import(reader));

            reader.Read();

            InnerList.Clear();
            InnerList.AddRange(list);
        }
        /// <remarks>
        /// This method is not exception-safe. If an error occurs while 
        /// reading then the object may be partially imported.
        /// </remarks>

        public virtual void Import(JsonReader reader)
        {
            if (reader == null)
                throw new ArgumentNullException("reader");

            // FIXME: Consider making this method exception-safe.
            // Right now this is a problem because of reliance on
            // DictionaryBase.
            
            Clear();
            
            reader.ReadToken(JsonTokenClass.Object);
            
            while (reader.TokenClass != JsonTokenClass.EndObject)
                Put(reader.ReadMember(), reader.ReadValue());
            
            reader.Read();
        }
            protected override JsonToken ReadTokenImpl()
            {
                JsonReader baseReader = _reader;

                int index = _index;

                if (index < 0)
                {
                    //
                    // If the base reader was never started then do it now.
                    // Check for zero depth is the same as BOF.
                    //
                    if (baseReader.Depth == 0)
                    {
                        baseReader.ReadToken(JsonTokenClass.Object);
                        _innerDepth = baseReader.Depth;
                    }

                    _index = 0;
                    return(JsonToken.Object());
                }

                //
                // Buffered members, if any, get served first.
                //

                NamedJsonBufferList bufferedMembers = _bufferedMembers;

                if (bufferedMembers != null && index < bufferedMembers.Count)
                {
                    //
                    // Is there a value to serve?
                    //

                    JsonBuffer value = _memberValue;
                    if (!value.IsEmpty)
                    {
                        if (value.IsStructured) // JSON Array or Object
                        {
                            //
                            // Get a reader on the structured (array or
                            // object) value if not already acquired.
                            //

                            JsonReader valueReader = _memberStructuredValueReader;
                            if (valueReader == null)
                            {
                                valueReader = _memberStructuredValueReader = value.CreateReader();
                            }

                            //
                            // Serve tokens from the value reader until OEF.
                            //

                            if (valueReader.Read())
                            {
                                return(valueReader.Token);
                            }

                            //
                            // Proceed with next.
                            //

                            _memberValue = JsonBuffer.Empty;
                            _memberStructuredValueReader = null;
                            _index++;
                            return(ReadTokenImpl());
                        }
                        else // JSON Null, Boolean, Number or String
                        {
                            Debug.Assert(value.IsNull || value.IsScalar);

                            //
                            // Establish state to proceed with next and
                            // serve token pertaining to scalar value.
                            //

                            _memberValue = JsonBuffer.Empty;
                            _index++;

                            return(value.IsNull
                                       ? JsonToken.Null()
                                       : value.CreateReader().Token);
                        }
                    }

                    //
                    // Serve buffered member name and establish state so
                    // that the value will be served next.
                    //

                    NamedJsonBuffer member = (NamedJsonBuffer)bufferedMembers[index];
                    _memberValue = member.Buffer;
                    return(JsonToken.Member(member.Name));
                }

                //
                // Done with buffered members so now move on to remaining
                // members from the underlying reader.
                //

                if (baseReader == null)
                {
                    return(JsonToken.EOF()); // Done with serving
                }
                //
                // If base reader is on the object end at the same depth as
                // on entry then serve the last end token. The reader is
                // released so that on next read, the above will signal EOF.
                //

                if (baseReader.Depth == _innerDepth &&
                    baseReader.TokenClass == JsonTokenClass.EndObject)
                {
                    _reader = null;
                }

                //
                // Move through the base reader.
                //

                JsonToken token = baseReader.Token;

                baseReader.Read();
                return(token);
            }