public void ObjectArrayTest() { string input = "[{}, {}] "; JsonToken[] token = { JsonToken.ArrayStart(), JsonToken.ObjectStart(), JsonToken.ObjectEnd(), JsonToken.ObjectStart(), JsonToken.ObjectEnd(), JsonToken.ArrayEnd(), }; JsonRoundTripsTests.PerformRoundTripTest(input, token); }
private static JsonToken[] GetTokensFromArrayNode(IJsonNavigatorNode node, IJsonNavigator navigator, bool performCorrectnessCheck) { // Get tokens once through IEnumerable List <JsonToken> tokensFromIEnumerable = new List <JsonToken>(); IEnumerable <IJsonNavigatorNode> arrayItems = navigator.GetArrayItems(node); tokensFromIEnumerable.Add(JsonToken.ArrayStart()); foreach (IJsonNavigatorNode arrayItem in arrayItems) { tokensFromIEnumerable.AddRange(JsonNavigatorTests.GetTokensFromNode(arrayItem, navigator, performCorrectnessCheck)); } tokensFromIEnumerable.Add(JsonToken.ArrayEnd()); if (performCorrectnessCheck) { // Get tokens once again through indexer List <JsonToken> tokensFromIndexer = new List <JsonToken>(); tokensFromIndexer.Add(JsonToken.ArrayStart()); for (int i = 0; i < navigator.GetArrayItemCount(node); ++i) { tokensFromIndexer.AddRange(JsonNavigatorTests.GetTokensFromNode(navigator.GetArrayItemAt(node, i), navigator, performCorrectnessCheck)); } tokensFromIndexer.Add(JsonToken.ArrayEnd()); Assert.AreEqual(arrayItems.Count(), navigator.GetArrayItemCount(node)); Assert.IsTrue(tokensFromIEnumerable.SequenceEqual(tokensFromIndexer)); try { navigator.GetArrayItemAt(node, navigator.GetArrayItemCount(node) + 1); Assert.Fail("Expected to get an index out of range exception from going one past the end of the array."); } catch (IndexOutOfRangeException) { Assert.AreEqual(navigator.SerializationFormat, JsonSerializationFormat.Binary); } catch (ArgumentOutOfRangeException) { Assert.AreEqual(navigator.SerializationFormat, JsonSerializationFormat.Text); } } return(tokensFromIEnumerable.ToArray()); }
public void IntArrayTest() { string input = "[ -2, -1, 0, 1, 2] "; JsonToken[] token = { JsonToken.ArrayStart(), JsonToken.Number(-2), JsonToken.Number(-1), JsonToken.Number(0), JsonToken.Number(1), JsonToken.Number(2), JsonToken.ArrayEnd(), }; this.PerformRoundTripTest(input, token); }
public void AllPrimitiveArrayTest() { string input = "[0, 0.1, -1, -1.1, 1, 2, \"hello\", null, true, false] "; JsonToken[] token = { JsonToken.ArrayStart(), JsonToken.Number(0), JsonToken.Number(0.1), JsonToken.Number(-1), JsonToken.Number(-1.1), JsonToken.Number(1), JsonToken.Number(2), JsonToken.String("hello"), JsonToken.Null(), JsonToken.Boolean(true), JsonToken.Boolean(false), JsonToken.ArrayEnd(), }; this.PerformRoundTripTest(input, token); }
private static JsonToken[] GetTokensWithReader(IJsonReader jsonReader) { List <JsonToken> tokens = new List <JsonToken>(); while (jsonReader.Read()) { JsonToken token; switch (jsonReader.CurrentTokenType) { case JsonTokenType.NotStarted: throw new InvalidOperationException(); case JsonTokenType.BeginArray: token = JsonToken.ArrayStart(); break; case JsonTokenType.EndArray: token = JsonToken.ArrayEnd(); break; case JsonTokenType.BeginObject: token = JsonToken.ObjectStart(); break; case JsonTokenType.EndObject: token = JsonToken.ObjectEnd(); break; case JsonTokenType.String: token = JsonToken.String(jsonReader.GetStringValue()); break; case JsonTokenType.Number: token = JsonToken.Number(jsonReader.GetNumberValue()); break; case JsonTokenType.True: token = JsonToken.Boolean(true); break; case JsonTokenType.False: token = JsonToken.Boolean(false); break; case JsonTokenType.Null: token = JsonToken.Null(); break; case JsonTokenType.FieldName: token = JsonToken.FieldName(jsonReader.GetStringValue()); break; case JsonTokenType.Int8: token = JsonToken.Int8(jsonReader.GetInt8Value()); break; case JsonTokenType.Int16: token = JsonToken.Int16(jsonReader.GetInt16Value()); break; case JsonTokenType.Int32: token = JsonToken.Int32(jsonReader.GetInt32Value()); break; case JsonTokenType.Int64: token = JsonToken.Int64(jsonReader.GetInt64Value()); break; case JsonTokenType.UInt32: token = JsonToken.UInt32(jsonReader.GetUInt32Value()); break; case JsonTokenType.Float32: token = JsonToken.Float32(jsonReader.GetFloat32Value()); break; case JsonTokenType.Float64: token = JsonToken.Float64(jsonReader.GetFloat64Value()); break; case JsonTokenType.Guid: token = JsonToken.Guid(jsonReader.GetGuidValue()); break; case JsonTokenType.Binary: token = JsonToken.Binary(jsonReader.GetBinaryValue()); break; default: throw new ArgumentException($"Unknown {nameof(JsonTokenType)}: {jsonReader.CurrentTokenType}"); } tokens.Add(token); } return(tokens.ToArray()); }
public void ArrayLengthLimitsTest() { // empty array string emptyArrayInput = "[]"; JsonToken[] emptyArrayTokens = { JsonToken.ArrayStart(), JsonToken.ArrayEnd() }; this.PerformRoundTripTest(emptyArrayInput, emptyArrayTokens); // single item array string singleItemArrayInput = @"[""a""]"; JsonToken[] singleItemArrayTokens = { JsonToken.ArrayStart(), JsonToken.String("a"), JsonToken.ArrayEnd() }; this.PerformRoundTripTest(singleItemArrayInput, singleItemArrayTokens); // max 1 byte length array string maxByteLengthPayload = new string('a', byte.MaxValue - 1 - 1); string maxByteLengthInput = @"[""" + maxByteLengthPayload + @"""]"; JsonToken[] maxByteLengthTokens = { JsonToken.ArrayStart(), JsonToken.String(maxByteLengthPayload), JsonToken.ArrayEnd() }; this.PerformRoundTripTest(maxByteLengthInput, maxByteLengthTokens); // max 2 byte length array string maxUShortLengthPayload = new string('a', ushort.MaxValue - 1 - 2); string maxUShortLengthInput = @"[""" + maxUShortLengthPayload + @"""]"; JsonToken[] maxUShortLengthTokens = { JsonToken.ArrayStart(), JsonToken.String(maxUShortLengthPayload), JsonToken.ArrayEnd() }; this.PerformRoundTripTest(maxUShortLengthInput, maxUShortLengthTokens); // max 4 byte length array string maxUIntLengthPayload = new string('a', ushort.MaxValue); string maxUIntLengthInput = @"[""" + maxUIntLengthPayload + @"""]"; JsonToken[] maxUIntLengthTokens = { JsonToken.ArrayStart(), // 2 of them just to go past int.MaxValue but < uint.MaxValue JsonToken.String(maxUIntLengthPayload), JsonToken.ArrayEnd() }; this.PerformRoundTripTest(maxUIntLengthInput, maxUIntLengthTokens); }
public void AllPrimitivesObjectTest() { string input = @"{ ""id"": ""7029d079-4016-4436-b7da-36c0bae54ff6"", ""double"": 0.18963001816981939, ""int"": -1330192615, ""string"": ""XCPCFXPHHF"", ""boolean"": true, ""null"": null, ""datetime"": ""2526-07-11T18:18:16.4520716"", ""spatialPoint"": { ""type"": ""Point"", ""coordinates"": [ 118.9897, -46.6781 ] }, ""text"": ""tiger diamond newbrunswick snowleopard chocolate dog snowleopard turtle cat sapphire peach sapphire vancouver white chocolate horse diamond lion superlongcolourname ruby"" }"; JsonToken[] token = { JsonToken.ObjectStart(), JsonToken.FieldName("id"), JsonToken.String("7029d079-4016-4436-b7da-36c0bae54ff6"), JsonToken.FieldName("double"), JsonToken.Number(0.18963001816981939), JsonToken.FieldName("int"), JsonToken.Number(-1330192615), JsonToken.FieldName("string"), JsonToken.String("XCPCFXPHHF"), JsonToken.FieldName("boolean"), JsonToken.Boolean(true), JsonToken.FieldName("null"), JsonToken.Null(), JsonToken.FieldName("datetime"), JsonToken.String("2526-07-11T18:18:16.4520716"), JsonToken.FieldName("spatialPoint"), JsonToken.ObjectStart(), JsonToken.FieldName("type"), JsonToken.String("Point"), JsonToken.FieldName("coordinates"), JsonToken.ArrayStart(), JsonToken.Number(118.9897), JsonToken.Number(-46.6781), JsonToken.ArrayEnd(), JsonToken.ObjectEnd(), JsonToken.FieldName("text"), JsonToken.String("tiger diamond newbrunswick snowleopard chocolate dog snowleopard turtle cat sapphire peach sapphire vancouver white chocolate horse diamond lion superlongcolourname ruby"), JsonToken.ObjectEnd(), }; this.PerformRoundTripTest(input, token); }