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