def test_does_not_leak_dictionary_values(self): import gc gc.collect() value = ["abc"] data = {"1": value} ref_count = sys.getrefcount(value) ujson.dumps(data) self.assertEqual(ref_count, sys.getrefcount(value))
def test_does_not_leak_dictionary_None_key(self): import gc gc.collect() key1 = None value1 = 1 data = {key1: value1} ref_count1 = sys.getrefcount(key1) ujson.dumps(data) self.assertEqual(ref_count1, sys.getrefcount(key1))
def test_does_not_leak_dictionary_keys(self): import gc gc.collect() key1 = "1" key2 = "1" value1 = ["abc"] value2 = [1, 2, 3] data = {key1: value1, key2: value2} ref_count1 = sys.getrefcount(key1) ref_count2 = sys.getrefcount(key2) ujson.dumps(data) self.assertEqual(ref_count1, sys.getrefcount(key1)) self.assertEqual(ref_count2, sys.getrefcount(key2))
def testEncodeSymbols(self): s = "\u273f\u2661\u273f" # โฟโกโฟ encoded = ujson.dumps(s) encoded_json = json.dumps(s) self.assertEqual(len(encoded), len(s) * 6 + 2) # 6 characters + quotes self.assertEqual(encoded, encoded_json) decoded = ujson.loads(encoded) self.assertEqual(s, decoded) # ujson outputs an UTF-8 encoded str object encoded = ujson.dumps(s, ensure_ascii=False) # json outputs an unicode object encoded_json = json.dumps(s, ensure_ascii=False) self.assertEqual(len(encoded), len(s) + 2) # original length + quotes self.assertEqual(encoded, encoded_json) decoded = ujson.loads(encoded) self.assertEqual(s, decoded)
def testEncodeUnicodeBMP(self): s = "\U0001f42e\U0001f42e\U0001F42D\U0001F42D" # ๐ฎ๐ฎ๐ญ๐ญ encoded = ujson.dumps(s) encoded_json = json.dumps(s) if len(s) == 4: self.assertEqual(len(encoded), len(s) * 12 + 2) else: self.assertEqual(len(encoded), len(s) * 6 + 2) self.assertEqual(encoded, encoded_json) decoded = ujson.loads(encoded) self.assertEqual(s, decoded) # ujson outputs an UTF-8 encoded str object encoded = ujson.dumps(s, ensure_ascii=False) # json outputs an unicode object encoded_json = json.dumps(s, ensure_ascii=False) self.assertEqual(len(encoded), len(s) + 2) # original length + quotes self.assertEqual(encoded, encoded_json) decoded = ujson.loads(encoded) self.assertEqual(s, decoded)
def test_encodeNullCharacter(self): input = "31337 \x00 1337" output = ujson.encode(input) self.assertEqual(input, json.loads(output)) self.assertEqual(output, json.dumps(input)) self.assertEqual(input, ujson.decode(output)) input = "\x00" output = ujson.encode(input) self.assertEqual(input, json.loads(output)) self.assertEqual(output, json.dumps(input)) self.assertEqual(input, ujson.decode(output)) self.assertEqual('" \\u0000\\r\\n "', ujson.dumps(" \u0000\r\n "))
def test_sortKeys(self): data = {"a": 1, "c": 1, "b": 1, "e": 1, "f": 1, "d": 1} sortedKeys = ujson.dumps(data, sort_keys=True) self.assertEqual(sortedKeys, '{"a":1,"b":1,"c":1,"d":1,"e":1,"f":1}')
def test_WriteArrayOfSymbolsFromTuple(self): self.assertEqual("[true,false,null]", ujson.dumps((True, False, None)))
def test_WriteArrayOfSymbolsFromList(self): self.assertEqual("[true,false,null]", ujson.dumps([True, False, None]))
def test_WriteNull(self): self.assertEqual("null", ujson.dumps(None))
def test_WriteFalse(self): self.assertEqual("false", ujson.dumps(False))
def test_WriteTrue(self): self.assertEqual("true", ujson.dumps(True))
def test_encodeDecodeLongDecimal(self): sut = {"a": -528656961.4399388} encoded = ujson.dumps(sut) ujson.decode(encoded)
def testWriteEscapedString(self): self.assertEqual( "\"\\u003cimg src='\\u0026amp;'\\/\\u003e\"", ujson.dumps("<img src='&'/>", encode_html_chars=True), )