UNPKG

json-with-bigint

Version:

JS library that allows you to easily serialize and deserialize data with BigInt values

146 lines (129 loc) 5.74 kB
// ------ Unit tests ------ const assert = require("assert"); const { JSONStringify, JSONParse } = require("../json-with-bigint.cjs"); const test1JSON = `{"zero":9007199254740998,"one":-42,"two":-9007199254740998,"test":["He was\\":[-23432432432434324324324324]",111,9007199254740998,{"test2":-9007199254740998}],"test3":["He was:[-23432432432434324324324324]",111,9007199254740998,{"test2":-9007199254740998,"float":1.9007199254740998,"float2":0.1,"float3":2.9007199254740996,"int":1,"int2":3243243432432434324324324}],"float4":[1.9007199254740998,1111111111111111111111111111111111,0.1,1,54354654654654654654656546546546546]}`; const test1Obj = { zero: 9007199254740998n, one: -42, two: -9007199254740998n, test: [ 'He was":[-23432432432434324324324324]', 111, 9007199254740998n, { test2: -9007199254740998n }, ], test3: [ "He was:[-23432432432434324324324324]", 111, 9007199254740998n, { test2: -9007199254740998n, float: 1.9007199254740998, float2: 0.1, float3: 2.9007199254740996, int: 1, int2: 3243243432432434324324324n, }, ], float4: [ 1.9007199254740998, 1111111111111111111111111111111111n, 0.1, 1, 54354654654654654654656546546546546n, ], }; const test2JSON = `{ "test": [ { "ID": 1035342667379599058, "Timestamp": "2022-09-13 22:21:25", "Contents": "broken example message", "Contents2": "broken example 1035342667379599058 message", "Contents3": "broken example [1035342667379599058, 1035342667379599058] message", "Attachments": "", "BreakingValue": 54354654654654654654656546546546546 }, 1035342667379599058, -1.1035342667379599058, 1035342667379599058 ], "test2": { "1035342667379599058": 1035342667379599058 } }`; // Special case, because native JSON.parse strips \n and whitespaces. // So technically, a true round-trip operation (including all spaces, etc.) is not possible in the case of pretty JSON without writing your own full JSON.parse implementation for this particular case. // In practice, though, it shouldn't cause any problems, because data will work fine even in that case, and if the backend expects a prettified JSON, you can just prettify it before sending it. const test2TersedJSON = `{"test":[{"ID":1035342667379599058,"Timestamp":"2022-09-13 22:21:25","Contents":"broken example message","Contents2":"broken example 1035342667379599058 message","Contents3":"broken example [1035342667379599058, 1035342667379599058] message","Attachments":"","BreakingValue":54354654654654654654656546546546546},1035342667379599058,-1.10353426673796,1035342667379599058],"test2":{"1035342667379599058":1035342667379599058}}`; const test2Obj = { test: [ { ID: 1035342667379599058n, Timestamp: "2022-09-13 22:21:25", Contents: "broken example message", Contents2: "broken example 1035342667379599058 message", Contents3: "broken example [1035342667379599058, 1035342667379599058] message", Attachments: "", BreakingValue: 54354654654654654654656546546546546n, }, 1035342667379599058n, -1.10353426673796, 1035342667379599058n, ], test2: { "1035342667379599058": 1035342667379599058n }, }; const test3JSON = `{"items":[{"message":"some text 17365091955960356025, some text"}]}`; const test3Obj = { items: [{ message: "some text 17365091955960356025, some text" }], }; const test4JSON = `9007199254740998`; const test4Obj = 9007199254740998n; const test5JSON = `[9007199254740998,[9007199254740998],9007199254740998]`; const test5Obj = [9007199254740998n, [9007199254740998n], 9007199254740998n]; const test6JSON = `[9007199254740998]`; const test6Obj = [9007199254740998n]; const test7JSON = `["0a","1b","9n","9nn",90071992547409981111,"90071992547409981111.5n"]`; const test7Obj = [ "0a", "1b", "9n", "9nn", 90071992547409981111n, "90071992547409981111.5n", ]; const test8Obj = { uid: BigInt("1308537228663099396") }; const test8JSON = '{\n "uid": 1308537228663099396\n}'; assert.deepStrictEqual(JSONParse(test1JSON), test1Obj); console.log("1 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test1JSON)), test1JSON); console.log("1 test round-trip passed"); assert.deepStrictEqual(JSONParse(test2JSON), test2Obj); console.log("2 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test2JSON)), test2TersedJSON); console.log("2 test round-trip passed"); assert.deepStrictEqual(JSONParse(test3JSON), test3Obj); console.log("3 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test3JSON)), test3JSON); console.log("3 test round-trip passed"); assert.deepStrictEqual(JSONParse(test4JSON), test4Obj); console.log("4 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test4JSON)), test4JSON); console.log("4 test round-trip passed"); assert.deepStrictEqual(JSONParse(test5JSON), test5Obj); console.log("5 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test5JSON)), test5JSON); console.log("5 test round-trip passed"); assert.deepStrictEqual(JSONParse(test6JSON), test6Obj); console.log("6 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test6JSON)), test6JSON); console.log("6 test round-trip passed"); assert.deepStrictEqual(JSONParse(test7JSON), test7Obj); console.log("7 test passed"); assert.deepStrictEqual(JSONStringify(JSONParse(test7JSON)), test7JSON); console.log("7 test round-trip passed"); assert.deepStrictEqual(JSONStringify(test8Obj, null, 2), test8JSON); console.log("8 test passed"); assert.deepStrictEqual(JSONParse(JSONStringify(test8Obj, null, 2)), test8Obj); console.log("8 test round-trip passed");