Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
6b60fb91
Kaydet (Commit)
6b60fb91
authored
May 14, 2011
tarafından
Ezio Melotti
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
#5723: merge with 3.1.
üst
3659f27a
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
253 additions
and
218 deletions
+253
-218
decoder.py
Lib/json/decoder.py
+2
-2
__init__.py
Lib/test/json_tests/__init__.py
+42
-4
test_decode.py
Lib/test/json_tests/test_decode.py
+20
-35
test_default.py
Lib/test/json_tests/test_default.py
+8
-5
test_dump.py
Lib/test/json_tests/test_dump.py
+10
-7
test_encode_basestring_ascii.py
Lib/test/json_tests/test_encode_basestring_ascii.py
+12
-18
test_fail.py
Lib/test/json_tests/test_fail.py
+10
-8
test_float.py
Lib/test/json_tests/test_float.py
+10
-7
test_indent.py
Lib/test/json_tests/test_indent.py
+15
-13
test_pass1.py
Lib/test/json_tests/test_pass1.py
+10
-7
test_pass2.py
Lib/test/json_tests/test_pass2.py
+10
-6
test_pass3.py
Lib/test/json_tests/test_pass3.py
+10
-6
test_recursion.py
Lib/test/json_tests/test_recursion.py
+31
-29
test_scanstring.py
Lib/test/json_tests/test_scanstring.py
+10
-19
test_separators.py
Lib/test/json_tests/test_separators.py
+10
-8
test_speedups.py
Lib/test/json_tests/test_speedups.py
+12
-17
test_unicode.py
Lib/test/json_tests/test_unicode.py
+27
-25
support.py
Lib/test/support.py
+2
-2
NEWS
Misc/NEWS
+2
-0
No files found.
Lib/json/decoder.py
Dosyayı görüntüle @
6b60fb91
...
...
@@ -5,7 +5,7 @@ import re
import
sys
import
struct
from
json
.scanner
import
make_
scanner
from
json
import
scanner
try
:
from
_json
import
scanstring
as
c_scanstring
except
ImportError
:
...
...
@@ -340,7 +340,7 @@ class JSONDecoder(object):
self
.
parse_array
=
JSONArray
self
.
parse_string
=
scanstring
self
.
memo
=
{}
self
.
scan_once
=
make_scanner
(
self
)
self
.
scan_once
=
scanner
.
make_scanner
(
self
)
def
decode
(
self
,
s
,
_w
=
WHITESPACE
.
match
):
...
...
Lib/test/json_tests/__init__.py
Dosyayı görüntüle @
6b60fb91
import
os
import
sys
import
unittest
import
json
import
doctest
import
unittest
from
test
import
support
# import json with and without accelerations
cjson
=
support
.
import_fresh_module
(
'json'
,
fresh
=
[
'_json'
])
pyjson
=
support
.
import_fresh_module
(
'json'
,
blocked
=
[
'_json'
])
# create two base classes that will be used by the other tests
class
PyTest
(
unittest
.
TestCase
):
json
=
pyjson
loads
=
staticmethod
(
pyjson
.
loads
)
dumps
=
staticmethod
(
pyjson
.
dumps
)
@unittest.skipUnless
(
cjson
,
'requires _json'
)
class
CTest
(
unittest
.
TestCase
):
if
cjson
is
not
None
:
json
=
cjson
loads
=
staticmethod
(
cjson
.
loads
)
dumps
=
staticmethod
(
cjson
.
dumps
)
# test PyTest and CTest checking if the functions come from the right module
class
TestPyTest
(
PyTest
):
def
test_pyjson
(
self
):
self
.
assertEqual
(
self
.
json
.
scanner
.
make_scanner
.
__module__
,
'json.scanner'
)
self
.
assertEqual
(
self
.
json
.
decoder
.
scanstring
.
__module__
,
'json.decoder'
)
self
.
assertEqual
(
self
.
json
.
encoder
.
encode_basestring_ascii
.
__module__
,
'json.encoder'
)
class
TestCTest
(
CTest
):
def
test_cjson
(
self
):
self
.
assertEqual
(
self
.
json
.
scanner
.
make_scanner
.
__module__
,
'_json'
)
self
.
assertEqual
(
self
.
json
.
decoder
.
scanstring
.
__module__
,
'_json'
)
self
.
assertEqual
(
self
.
json
.
encoder
.
c_make_encoder
.
__module__
,
'_json'
)
self
.
assertEqual
(
self
.
json
.
encoder
.
encode_basestring_ascii
.
__module__
,
'_json'
)
here
=
os
.
path
.
dirname
(
__file__
)
...
...
@@ -17,12 +56,11 @@ def test_suite():
return
suite
def
additional_tests
():
import
json
import
json.encoder
import
json.decoder
suite
=
unittest
.
TestSuite
()
for
mod
in
(
json
,
json
.
encoder
,
json
.
decoder
):
suite
.
addTest
(
doctest
.
DocTestSuite
(
mod
))
suite
.
addTest
(
TestPyTest
(
'test_pyjson'
))
suite
.
addTest
(
TestCTest
(
'test_cjson'
))
return
suite
def
main
():
...
...
Lib/test/json_tests/test_decode.py
Dosyayı görüntüle @
6b60fb91
import
decimal
from
unittest
import
TestCase
from
io
import
StringIO
from
contextlib
import
contextmanager
import
json
import
json.decoder
import
json.scanner
from
collections
import
OrderedDict
from
test.json_tests
import
PyTest
,
CTest
@contextmanager
def
use_python_scanner
():
py_scanner
=
json
.
scanner
.
py_make_scanner
old_scanner
=
json
.
decoder
.
make_scanner
json
.
decoder
.
make_scanner
=
py_scanner
try
:
yield
finally
:
json
.
decoder
.
make_scanner
=
old_scanner
class
TestDecode
(
TestCase
):
class
TestDecode
:
def
test_decimal
(
self
):
rval
=
json
.
loads
(
'1.1'
,
parse_float
=
decimal
.
Decimal
)
rval
=
self
.
loads
(
'1.1'
,
parse_float
=
decimal
.
Decimal
)
self
.
assertTrue
(
isinstance
(
rval
,
decimal
.
Decimal
))
self
.
assertEqual
(
rval
,
decimal
.
Decimal
(
'1.1'
))
def
test_float
(
self
):
rval
=
json
.
loads
(
'1'
,
parse_int
=
float
)
rval
=
self
.
loads
(
'1'
,
parse_int
=
float
)
self
.
assertTrue
(
isinstance
(
rval
,
float
))
self
.
assertEqual
(
rval
,
1.0
)
def
test_empty_objects
(
self
):
self
.
assertEqual
(
json
.
loads
(
'{}'
),
{})
self
.
assertEqual
(
json
.
loads
(
'[]'
),
[])
self
.
assertEqual
(
json
.
loads
(
'""'
),
""
)
self
.
assertEqual
(
self
.
loads
(
'{}'
),
{})
self
.
assertEqual
(
self
.
loads
(
'[]'
),
[])
self
.
assertEqual
(
self
.
loads
(
'""'
),
""
)
def
test_object_pairs_hook
(
self
):
s
=
'{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
p
=
[(
"xkd"
,
1
),
(
"kcw"
,
2
),
(
"art"
,
3
),
(
"hxm"
,
4
),
(
"qrt"
,
5
),
(
"pad"
,
6
),
(
"hoy"
,
7
)]
self
.
assertEqual
(
json
.
loads
(
s
),
eval
(
s
))
self
.
assertEqual
(
json
.
loads
(
s
,
object_pairs_hook
=
lambda
x
:
x
),
p
)
self
.
assertEqual
(
json
.
load
(
StringIO
(
s
),
object_pairs_hook
=
lambda
x
:
x
),
p
)
od
=
json
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
)
self
.
assertEqual
(
self
.
loads
(
s
),
eval
(
s
))
self
.
assertEqual
(
self
.
loads
(
s
,
object_pairs_hook
=
lambda
x
:
x
),
p
)
self
.
assertEqual
(
self
.
json
.
load
(
StringIO
(
s
),
object_pairs_hook
=
lambda
x
:
x
),
p
)
od
=
self
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
)
self
.
assertEqual
(
od
,
OrderedDict
(
p
))
self
.
assertEqual
(
type
(
od
),
OrderedDict
)
# the object_pairs_hook takes priority over the object_hook
self
.
assertEqual
(
json
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
,
self
.
assertEqual
(
self
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
,
object_hook
=
lambda
x
:
None
),
OrderedDict
(
p
))
...
...
@@ -57,7 +40,7 @@ class TestDecode(TestCase):
# Several optimizations were made that skip over calls to
# the whitespace regex, so this test is designed to try and
# exercise the uncommon cases. The array cases are already covered.
rval
=
json
.
loads
(
'{ "key" : "value" , "k":"v" }'
)
rval
=
self
.
loads
(
'{ "key" : "value" , "k":"v" }'
)
self
.
assertEqual
(
rval
,
{
"key"
:
"value"
,
"k"
:
"v"
})
def
check_keys_reuse
(
self
,
source
,
loads
):
...
...
@@ -68,7 +51,9 @@ class TestDecode(TestCase):
def
test_keys_reuse
(
self
):
s
=
'[{"a_key": 1, "b_
\xe9
": 2}, {"a_key": 3, "b_
\xe9
": 4}]'
self
.
check_keys_reuse
(
s
,
json
.
loads
)
# Disabled: the pure Python version of json simply doesn't work
with
use_python_scanner
():
self
.
check_keys_reuse
(
s
,
json
.
decoder
.
JSONDecoder
()
.
decode
)
self
.
check_keys_reuse
(
s
,
self
.
loads
)
self
.
check_keys_reuse
(
s
,
self
.
json
.
decoder
.
JSONDecoder
()
.
decode
)
class
TestPyDecode
(
TestDecode
,
PyTest
):
pass
class
TestCDecode
(
TestDecode
,
CTest
):
pass
Lib/test/json_tests/test_default.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
from
test.json_tests
import
PyTest
,
CTest
import
json
class
TestDefault
(
TestCase
)
:
class
TestDefault
:
def
test_default
(
self
):
self
.
assertEqual
(
json
.
dumps
(
type
,
default
=
repr
),
json
.
dumps
(
repr
(
type
)))
self
.
dumps
(
type
,
default
=
repr
),
self
.
dumps
(
repr
(
type
)))
class
TestPyDefault
(
TestDefault
,
PyTest
):
pass
class
TestCDefault
(
TestDefault
,
CTest
):
pass
Lib/test/json_tests/test_dump.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
from
io
import
StringIO
from
test.json_tests
import
PyTest
,
CTest
import
json
class
TestDump
(
TestCase
)
:
class
TestDump
:
def
test_dump
(
self
):
sio
=
StringIO
()
json
.
dump
({},
sio
)
self
.
json
.
dump
({},
sio
)
self
.
assertEqual
(
sio
.
getvalue
(),
'{}'
)
def
test_dumps
(
self
):
self
.
assertEqual
(
json
.
dumps
({}),
'{}'
)
self
.
assertEqual
(
self
.
dumps
({}),
'{}'
)
def
test_encode_truefalse
(
self
):
self
.
assertEqual
(
json
.
dumps
(
self
.
assertEqual
(
self
.
dumps
(
{
True
:
False
,
False
:
True
},
sort_keys
=
True
),
'{"false": true, "true": false}'
)
self
.
assertEqual
(
json
.
dumps
(
self
.
assertEqual
(
self
.
dumps
(
{
2
:
3.0
,
4.0
:
5
,
False
:
1
,
6
:
True
},
sort_keys
=
True
),
'{"false": 1, "2": 3.0, "4.0": 5, "6": true}'
)
class
TestPyDump
(
TestDump
,
PyTest
):
pass
class
TestCDump
(
TestDump
,
CTest
):
pass
Lib/test/json_tests/test_encode_basestring_ascii.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
import
json.encoder
from
json
import
dumps
from
collections
import
OrderedDict
from
test.json_tests
import
PyTest
,
CTest
CASES
=
[
(
'/
\\
"
\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\x08\x0c\n\r\t
`1~!@#$
%
^&*()_+-=[]{}|;:
\'
,./<>?'
,
'"/
\\\\\\
"
\\
ucafe
\\
ubabe
\\
uab98
\\
ufcde
\\
ubcda
\\
uef4a
\\
b
\\
f
\\
n
\\
r
\\
t`1~!@#$
%
^&*()_+-=[]{}|;:
\'
,./<>?"'
),
...
...
@@ -21,19 +19,11 @@ CASES = [
(
'
\u0123\u4567\u89ab\ucdef\uabcd\uef4a
'
,
'"
\\
u0123
\\
u4567
\\
u89ab
\\
ucdef
\\
uabcd
\\
uef4a"'
),
]
class
TestEncodeBaseStringAscii
(
TestCase
):
def
test_py_encode_basestring_ascii
(
self
):
self
.
_test_encode_basestring_ascii
(
json
.
encoder
.
py_encode_basestring_ascii
)
def
test_c_encode_basestring_ascii
(
self
):
if
not
json
.
encoder
.
c_encode_basestring_ascii
:
return
self
.
_test_encode_basestring_ascii
(
json
.
encoder
.
c_encode_basestring_ascii
)
def
_test_encode_basestring_ascii
(
self
,
encode_basestring_ascii
):
fname
=
encode_basestring_ascii
.
__name__
class
TestEncodeBasestringAscii
:
def
test_encode_basestring_ascii
(
self
):
fname
=
self
.
json
.
encoder
.
encode_basestring_ascii
.
__name__
for
input_string
,
expect
in
CASES
:
result
=
encode_basestring_ascii
(
input_string
)
result
=
self
.
json
.
encoder
.
encode_basestring_ascii
(
input_string
)
self
.
assertEqual
(
result
,
expect
,
'{0!r} != {1!r} for {2}({3!r})'
.
format
(
result
,
expect
,
fname
,
input_string
))
...
...
@@ -41,10 +31,14 @@ class TestEncodeBaseStringAscii(TestCase):
def
test_ordered_dict
(
self
):
# See issue 6105
items
=
[(
'one'
,
1
),
(
'two'
,
2
),
(
'three'
,
3
),
(
'four'
,
4
),
(
'five'
,
5
)]
s
=
json
.
dumps
(
OrderedDict
(
items
))
s
=
self
.
dumps
(
OrderedDict
(
items
))
self
.
assertEqual
(
s
,
'{"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}'
)
def
test_sorted_dict
(
self
):
items
=
[(
'one'
,
1
),
(
'two'
,
2
),
(
'three'
,
3
),
(
'four'
,
4
),
(
'five'
,
5
)]
s
=
json
.
dumps
(
dict
(
items
),
sort_keys
=
True
)
s
=
self
.
dumps
(
dict
(
items
),
sort_keys
=
True
)
self
.
assertEqual
(
s
,
'{"five": 5, "four": 4, "one": 1, "three": 3, "two": 2}'
)
class
TestPyEncodeBasestringAscii
(
TestEncodeBasestringAscii
,
PyTest
):
pass
class
TestCEncodeBasestringAscii
(
TestEncodeBasestringAscii
,
CTest
):
pass
Lib/test/json_tests/test_fail.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
import
json
from
test.json_tests
import
PyTest
,
CTest
# Fri Dec 30 18:57:26 2005
JSONDOCS
=
[
...
...
@@ -61,15 +59,15 @@ SKIPS = {
18
:
"spec doesn't specify any nesting limitations"
,
}
class
TestFail
(
TestCase
)
:
class
TestFail
:
def
test_failures
(
self
):
for
idx
,
doc
in
enumerate
(
JSONDOCS
):
idx
=
idx
+
1
if
idx
in
SKIPS
:
json
.
loads
(
doc
)
self
.
loads
(
doc
)
continue
try
:
json
.
loads
(
doc
)
self
.
loads
(
doc
)
except
ValueError
:
pass
else
:
...
...
@@ -79,7 +77,11 @@ class TestFail(TestCase):
data
=
{
'a'
:
1
,
(
1
,
2
)
:
2
}
#This is for c encoder
self
.
assertRaises
(
TypeError
,
json
.
dumps
,
data
)
self
.
assertRaises
(
TypeError
,
self
.
dumps
,
data
)
#This is for python encoder
self
.
assertRaises
(
TypeError
,
json
.
dumps
,
data
,
indent
=
True
)
self
.
assertRaises
(
TypeError
,
self
.
dumps
,
data
,
indent
=
True
)
class
TestPyFail
(
TestFail
,
PyTest
):
pass
class
TestCFail
(
TestFail
,
CTest
):
pass
Lib/test/json_tests/test_float.py
Dosyayı görüntüle @
6b60fb91
import
math
from
unittest
import
TestCase
from
test.json_tests
import
PyTest
,
CTest
import
json
class
TestFloat
(
TestCase
)
:
class
TestFloat
:
def
test_floats
(
self
):
for
num
in
[
1617161771.7650001
,
math
.
pi
,
math
.
pi
**
100
,
math
.
pi
**-
100
,
3.1
]:
self
.
assertEqual
(
float
(
json
.
dumps
(
num
)),
num
)
self
.
assertEqual
(
json
.
loads
(
json
.
dumps
(
num
)),
num
)
self
.
assertEqual
(
float
(
self
.
dumps
(
num
)),
num
)
self
.
assertEqual
(
self
.
loads
(
self
.
dumps
(
num
)),
num
)
def
test_ints
(
self
):
for
num
in
[
1
,
1
<<
32
,
1
<<
64
]:
self
.
assertEqual
(
json
.
dumps
(
num
),
str
(
num
))
self
.
assertEqual
(
int
(
json
.
dumps
(
num
)),
num
)
self
.
assertEqual
(
self
.
dumps
(
num
),
str
(
num
))
self
.
assertEqual
(
int
(
self
.
dumps
(
num
)),
num
)
class
TestPyFloat
(
TestFloat
,
PyTest
):
pass
class
TestCFloat
(
TestFloat
,
CTest
):
pass
Lib/test/json_tests/test_indent.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
import
json
import
textwrap
from
io
import
StringIO
from
test.json_tests
import
PyTest
,
CTest
class
TestIndent
(
TestCase
)
:
class
TestIndent
:
def
test_indent
(
self
):
h
=
[[
'blorpie'
],
[
'whoops'
],
[],
'd-shtaeou'
,
'd-nthiouh'
,
'i-vhbjkhnth'
,
{
'nifty'
:
87
},
{
'field'
:
'yes'
,
'morefield'
:
False
}
]
...
...
@@ -30,14 +29,13 @@ class TestIndent(TestCase):
\t
}
]"""
)
d1
=
self
.
dumps
(
h
)
d2
=
self
.
dumps
(
h
,
indent
=
2
,
sort_keys
=
True
,
separators
=
(
','
,
': '
))
d3
=
self
.
dumps
(
h
,
indent
=
'
\t
'
,
sort_keys
=
True
,
separators
=
(
','
,
': '
))
d1
=
json
.
dumps
(
h
)
d2
=
json
.
dumps
(
h
,
indent
=
2
,
sort_keys
=
True
,
separators
=
(
','
,
': '
))
d3
=
json
.
dumps
(
h
,
indent
=
'
\t
'
,
sort_keys
=
True
,
separators
=
(
','
,
': '
))
h1
=
json
.
loads
(
d1
)
h2
=
json
.
loads
(
d2
)
h3
=
json
.
loads
(
d3
)
h1
=
self
.
loads
(
d1
)
h2
=
self
.
loads
(
d2
)
h3
=
self
.
loads
(
d3
)
self
.
assertEqual
(
h1
,
h
)
self
.
assertEqual
(
h2
,
h
)
...
...
@@ -48,14 +46,18 @@ class TestIndent(TestCase):
def
test_indent0
(
self
):
h
=
{
3
:
1
}
def
check
(
indent
,
expected
):
d1
=
json
.
dumps
(
h
,
indent
=
indent
)
d1
=
self
.
dumps
(
h
,
indent
=
indent
)
self
.
assertEqual
(
d1
,
expected
)
sio
=
StringIO
()
json
.
dump
(
h
,
sio
,
indent
=
indent
)
self
.
json
.
dump
(
h
,
sio
,
indent
=
indent
)
self
.
assertEqual
(
sio
.
getvalue
(),
expected
)
# indent=0 should emit newlines
check
(
0
,
'{
\n
"3": 1
\n
}'
)
# indent=None is more compact
check
(
None
,
'{"3": 1}'
)
class
TestPyIndent
(
TestIndent
,
PyTest
):
pass
class
TestCIndent
(
TestIndent
,
CTest
):
pass
Lib/test/json_tests/test_pass1.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
from
test.json_tests
import
PyTest
,
CTest
import
json
# from http://json.org/JSON_checker/test/pass1.json
JSON
=
r'''
...
...
@@ -62,15 +61,19 @@ JSON = r'''
,"rosebud"]
'''
class
TestPass1
(
TestCase
)
:
class
TestPass1
:
def
test_parse
(
self
):
# test in/out equivalence and parsing
res
=
json
.
loads
(
JSON
)
out
=
json
.
dumps
(
res
)
self
.
assertEqual
(
res
,
json
.
loads
(
out
))
res
=
self
.
loads
(
JSON
)
out
=
self
.
dumps
(
res
)
self
.
assertEqual
(
res
,
self
.
loads
(
out
))
try
:
json
.
dumps
(
res
,
allow_nan
=
False
)
self
.
dumps
(
res
,
allow_nan
=
False
)
except
ValueError
:
pass
else
:
self
.
fail
(
"23456789012E666 should be out of range"
)
class
TestPyPass1
(
TestPass1
,
PyTest
):
pass
class
TestCPass1
(
TestPass1
,
CTest
):
pass
Lib/test/json_tests/test_pass2.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
import
json
from
test.json_tests
import
PyTest
,
CTest
# from http://json.org/JSON_checker/test/pass2.json
JSON
=
r'''
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
'''
class
TestPass2
(
TestCase
)
:
class
TestPass2
:
def
test_parse
(
self
):
# test in/out equivalence and parsing
res
=
json
.
loads
(
JSON
)
out
=
json
.
dumps
(
res
)
self
.
assertEqual
(
res
,
json
.
loads
(
out
))
res
=
self
.
loads
(
JSON
)
out
=
self
.
dumps
(
res
)
self
.
assertEqual
(
res
,
self
.
loads
(
out
))
class
TestPyPass2
(
TestPass2
,
PyTest
):
pass
class
TestCPass2
(
TestPass2
,
CTest
):
pass
Lib/test/json_tests/test_pass3.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
from
test.json_tests
import
PyTest
,
CTest
import
json
# from http://json.org/JSON_checker/test/pass3.json
JSON
=
r'''
...
...
@@ -12,9 +11,14 @@ JSON = r'''
}
'''
class
TestPass3
(
TestCase
):
class
TestPass3
:
def
test_parse
(
self
):
# test in/out equivalence and parsing
res
=
json
.
loads
(
JSON
)
out
=
json
.
dumps
(
res
)
self
.
assertEqual
(
res
,
json
.
loads
(
out
))
res
=
self
.
loads
(
JSON
)
out
=
self
.
dumps
(
res
)
self
.
assertEqual
(
res
,
self
.
loads
(
out
))
class
TestPyPass3
(
TestPass3
,
PyTest
):
pass
class
TestCPass3
(
TestPass3
,
CTest
):
pass
Lib/test/json_tests/test_recursion.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
from
test.json_tests
import
PyTest
,
CTest
import
json
class
JSONTestObject
:
pass
class
RecursiveJSONEncoder
(
json
.
JSONEncoder
):
recurse
=
False
def
default
(
self
,
o
):
if
o
is
JSONTestObject
:
if
self
.
recurse
:
return
[
JSONTestObject
]
else
:
return
'JSONTestObject'
return
json
.
JSONEncoder
.
default
(
o
)
class
EndlessJSONEncoder
(
json
.
JSONEncoder
):
def
default
(
self
,
o
):
"""If check_circular is False, this will keep adding another list."""
return
[
o
]
class
TestRecursion
(
TestCase
):
class
TestRecursion
:
def
test_listrecursion
(
self
):
x
=
[]
x
.
append
(
x
)
try
:
json
.
dumps
(
x
)
self
.
dumps
(
x
)
except
ValueError
:
pass
else
:
...
...
@@ -36,7 +19,7 @@ class TestRecursion(TestCase):
y
=
[
x
]
x
.
append
(
y
)
try
:
json
.
dumps
(
x
)
self
.
dumps
(
x
)
except
ValueError
:
pass
else
:
...
...
@@ -44,13 +27,13 @@ class TestRecursion(TestCase):
y
=
[]
x
=
[
y
,
y
]
# ensure that the marker is cleared
json
.
dumps
(
x
)
self
.
dumps
(
x
)
def
test_dictrecursion
(
self
):
x
=
{}
x
[
"test"
]
=
x
try
:
json
.
dumps
(
x
)
self
.
dumps
(
x
)
except
ValueError
:
pass
else
:
...
...
@@ -58,9 +41,19 @@ class TestRecursion(TestCase):
x
=
{}
y
=
{
"a"
:
x
,
"b"
:
x
}
# ensure that the marker is cleared
json
.
dumps
(
x
)
self
.
dumps
(
x
)
def
test_defaultrecursion
(
self
):
class
RecursiveJSONEncoder
(
self
.
json
.
JSONEncoder
):
recurse
=
False
def
default
(
self
,
o
):
if
o
is
JSONTestObject
:
if
self
.
recurse
:
return
[
JSONTestObject
]
else
:
return
'JSONTestObject'
return
pyjson
.
JSONEncoder
.
default
(
o
)
enc
=
RecursiveJSONEncoder
()
self
.
assertEqual
(
enc
.
encode
(
JSONTestObject
),
'"JSONTestObject"'
)
enc
.
recurse
=
True
...
...
@@ -76,11 +69,11 @@ class TestRecursion(TestCase):
# test that loading highly-nested objects doesn't segfault when C
# accelerations are used. See #12017
with
self
.
assertRaises
(
RuntimeError
):
json
.
loads
(
'{"a":'
*
100000
+
'1'
+
'}'
*
100000
)
self
.
loads
(
'{"a":'
*
100000
+
'1'
+
'}'
*
100000
)
with
self
.
assertRaises
(
RuntimeError
):
json
.
loads
(
'{"a":'
*
100000
+
'[1]'
+
'}'
*
100000
)
self
.
loads
(
'{"a":'
*
100000
+
'[1]'
+
'}'
*
100000
)
with
self
.
assertRaises
(
RuntimeError
):
json
.
loads
(
'['
*
100000
+
'1'
+
']'
*
100000
)
self
.
loads
(
'['
*
100000
+
'1'
+
']'
*
100000
)
def
test_highly_nested_objects_encoding
(
self
):
# See #12051
...
...
@@ -88,11 +81,20 @@ class TestRecursion(TestCase):
for
x
in
range
(
100000
):
l
,
d
=
[
l
],
{
'k'
:
d
}
with
self
.
assertRaises
(
RuntimeError
):
json
.
dumps
(
l
)
self
.
dumps
(
l
)
with
self
.
assertRaises
(
RuntimeError
):
json
.
dumps
(
d
)
self
.
dumps
(
d
)
def
test_endless_recursion
(
self
):
# See #12051
class
EndlessJSONEncoder
(
self
.
json
.
JSONEncoder
):
def
default
(
self
,
o
):
"""If check_circular is False, this will keep adding another list."""
return
[
o
]
with
self
.
assertRaises
(
RuntimeError
):
EndlessJSONEncoder
(
check_circular
=
False
)
.
encode
(
5
j
)
class
TestPyRecursion
(
TestRecursion
,
PyTest
):
pass
class
TestCRecursion
(
TestRecursion
,
CTest
):
pass
Lib/test/json_tests/test_scanstring.py
Dosyayı görüntüle @
6b60fb91
import
sys
from
unittest
import
TestCase
,
skipUnless
from
test.json_tests
import
PyTest
,
CTest
import
json
import
json.decoder
try
:
import
_json
except
ImportError
:
_json
=
None
class
TestScanString
(
TestCase
):
def
test_py_scanstring
(
self
):
self
.
_test_scanstring
(
json
.
decoder
.
py_scanstring
)
@skipUnless
(
_json
,
'test requires the _json module'
)
def
test_c_scanstring
(
self
):
if
json
.
decoder
.
c_scanstring
is
not
None
:
self
.
_test_scanstring
(
json
.
decoder
.
c_scanstring
)
def
_test_scanstring
(
self
,
scanstring
):
class
TestScanstring
:
def
test_scanstring
(
self
):
scanstring
=
self
.
json
.
decoder
.
scanstring
self
.
assertEqual
(
scanstring
(
'"z
\\
ud834
\\
udd20x"'
,
1
,
True
),
(
'z
\U0001d120
x'
,
16
))
...
...
@@ -109,4 +95,9 @@ class TestScanString(TestCase):
(
'Bad value'
,
12
))
def
test_overflow
(
self
):
self
.
assertRaises
(
OverflowError
,
json
.
decoder
.
scanstring
,
b
"xxx"
,
sys
.
maxsize
+
1
)
with
self
.
assertRaises
(
OverflowError
):
self
.
json
.
decoder
.
scanstring
(
b
"xxx"
,
sys
.
maxsize
+
1
)
class
TestPyScanstring
(
TestScanstring
,
PyTest
):
pass
class
TestCScanstring
(
TestScanstring
,
CTest
):
pass
Lib/test/json_tests/test_separators.py
Dosyayı görüntüle @
6b60fb91
import
textwrap
from
unittest
import
TestCase
from
test.json_tests
import
PyTest
,
CTest
import
json
class
TestSeparators
(
TestCase
):
class
TestSeparators
:
def
test_separators
(
self
):
h
=
[[
'blorpie'
],
[
'whoops'
],
[],
'd-shtaeou'
,
'd-nthiouh'
,
'i-vhbjkhnth'
,
{
'nifty'
:
87
},
{
'field'
:
'yes'
,
'morefield'
:
False
}
]
...
...
@@ -31,12 +29,16 @@ class TestSeparators(TestCase):
]"""
)
d1
=
json
.
dumps
(
h
)
d2
=
json
.
dumps
(
h
,
indent
=
2
,
sort_keys
=
True
,
separators
=
(
' ,'
,
' : '
))
d1
=
self
.
dumps
(
h
)
d2
=
self
.
dumps
(
h
,
indent
=
2
,
sort_keys
=
True
,
separators
=
(
' ,'
,
' : '
))
h1
=
json
.
loads
(
d1
)
h2
=
json
.
loads
(
d2
)
h1
=
self
.
loads
(
d1
)
h2
=
self
.
loads
(
d2
)
self
.
assertEqual
(
h1
,
h
)
self
.
assertEqual
(
h2
,
h
)
self
.
assertEqual
(
d2
,
expect
)
class
TestPySeparators
(
TestSeparators
,
PyTest
):
pass
class
TestCSeparators
(
TestSeparators
,
CTest
):
pass
Lib/test/json_tests/test_speedups.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
,
skipUnless
from
test.json_tests
import
CTest
from
json
import
decoder
,
encoder
,
scanner
try
:
import
_json
except
ImportError
:
_json
=
None
@skipUnless
(
_json
,
'test requires the _json module'
)
class
TestSpeedups
(
TestCase
):
class
TestSpeedups
(
CTest
):
def
test_scanstring
(
self
):
self
.
assertEqual
(
decoder
.
scanstring
.
__module__
,
"_json"
)
self
.
assertIs
(
decoder
.
scanstring
,
decoder
.
c_scanstring
)
self
.
assertEqual
(
self
.
json
.
decoder
.
scanstring
.
__module__
,
"_json"
)
self
.
assertIs
(
self
.
json
.
decoder
.
scanstring
,
self
.
json
.
decoder
.
c_scanstring
)
def
test_encode_basestring_ascii
(
self
):
self
.
assertEqual
(
encoder
.
encode_basestring_ascii
.
__module__
,
"_json"
)
self
.
assertIs
(
encoder
.
encode_basestring_ascii
,
encoder
.
c_encode_basestring_ascii
)
self
.
assertEqual
(
self
.
json
.
encoder
.
encode_basestring_ascii
.
__module__
,
"_json"
)
self
.
assertIs
(
self
.
json
.
encoder
.
encode_basestring_ascii
,
self
.
json
.
encoder
.
c_encode_basestring_ascii
)
class
TestDecode
(
TestCase
):
class
TestDecode
(
CTest
):
def
test_make_scanner
(
self
):
self
.
assertRaises
(
AttributeError
,
scanner
.
c_make_scanner
,
1
)
self
.
assertRaises
(
AttributeError
,
s
elf
.
json
.
s
canner
.
c_make_scanner
,
1
)
def
test_make_encoder
(
self
):
self
.
assertRaises
(
TypeError
,
encoder
.
c_make_encoder
,
self
.
assertRaises
(
TypeError
,
self
.
json
.
encoder
.
c_make_encoder
,
(
True
,
False
),
b
"
\xCD\x7D\x3D\x4E\x12\x4C\xF9\x79\xD7\x52\xBA\x82\xF2\x27\x4A\x7D\xA0\xCA\x75
"
,
None
)
Lib/test/json_tests/test_unicode.py
Dosyayı görüntüle @
6b60fb91
from
unittest
import
TestCase
import
json
from
collections
import
OrderedDict
from
test.json_tests
import
PyTest
,
CTest
class
TestUnicode
(
TestCase
)
:
class
TestUnicode
:
# test_encoding1 and test_encoding2 from 2.x are irrelevant (only str
# is supported as input, not bytes).
def
test_encoding3
(
self
):
u
=
'
\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}
'
j
=
json
.
dumps
(
u
)
j
=
self
.
dumps
(
u
)
self
.
assertEqual
(
j
,
'"
\\
u03b1
\\
u03a9"'
)
def
test_encoding4
(
self
):
u
=
'
\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}
'
j
=
json
.
dumps
([
u
])
j
=
self
.
dumps
([
u
])
self
.
assertEqual
(
j
,
'["
\\
u03b1
\\
u03a9"]'
)
def
test_encoding5
(
self
):
u
=
'
\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}
'
j
=
json
.
dumps
(
u
,
ensure_ascii
=
False
)
j
=
self
.
dumps
(
u
,
ensure_ascii
=
False
)
self
.
assertEqual
(
j
,
'"{0}"'
.
format
(
u
))
def
test_encoding6
(
self
):
u
=
'
\N{GREEK SMALL LETTER ALPHA}\N{GREEK CAPITAL LETTER OMEGA}
'
j
=
json
.
dumps
([
u
],
ensure_ascii
=
False
)
j
=
self
.
dumps
([
u
],
ensure_ascii
=
False
)
self
.
assertEqual
(
j
,
'["{0}"]'
.
format
(
u
))
def
test_big_unicode_encode
(
self
):
u
=
'
\U0001d120
'
self
.
assertEqual
(
json
.
dumps
(
u
),
'"
\\
ud834
\\
udd20"'
)
self
.
assertEqual
(
json
.
dumps
(
u
,
ensure_ascii
=
False
),
'"
\U0001d120
"'
)
self
.
assertEqual
(
self
.
dumps
(
u
),
'"
\\
ud834
\\
udd20"'
)
self
.
assertEqual
(
self
.
dumps
(
u
,
ensure_ascii
=
False
),
'"
\U0001d120
"'
)
def
test_big_unicode_decode
(
self
):
u
=
'z
\U0001d120
x'
self
.
assertEqual
(
json
.
loads
(
'"'
+
u
+
'"'
),
u
)
self
.
assertEqual
(
json
.
loads
(
'"z
\\
ud834
\\
udd20x"'
),
u
)
self
.
assertEqual
(
self
.
loads
(
'"'
+
u
+
'"'
),
u
)
self
.
assertEqual
(
self
.
loads
(
'"z
\\
ud834
\\
udd20x"'
),
u
)
def
test_unicode_decode
(
self
):
for
i
in
range
(
0
,
0xd7ff
):
u
=
chr
(
i
)
s
=
'"
\\
u{0:04x}"'
.
format
(
i
)
self
.
assertEqual
(
json
.
loads
(
s
),
u
)
self
.
assertEqual
(
self
.
loads
(
s
),
u
)
def
test_unicode_preservation
(
self
):
self
.
assertEqual
(
type
(
json
.
loads
(
'""'
)),
str
)
self
.
assertEqual
(
type
(
json
.
loads
(
'"a"'
)),
str
)
self
.
assertEqual
(
type
(
json
.
loads
(
'["a"]'
)[
0
]),
str
)
self
.
assertEqual
(
type
(
self
.
loads
(
'""'
)),
str
)
self
.
assertEqual
(
type
(
self
.
loads
(
'"a"'
)),
str
)
self
.
assertEqual
(
type
(
self
.
loads
(
'["a"]'
)[
0
]),
str
)
def
test_bytes_encode
(
self
):
self
.
assertRaises
(
TypeError
,
json
.
dumps
,
b
"hi"
)
self
.
assertRaises
(
TypeError
,
json
.
dumps
,
[
b
"hi"
])
self
.
assertRaises
(
TypeError
,
self
.
dumps
,
b
"hi"
)
self
.
assertRaises
(
TypeError
,
self
.
dumps
,
[
b
"hi"
])
def
test_bytes_decode
(
self
):
self
.
assertRaises
(
TypeError
,
json
.
loads
,
b
'"hi"'
)
self
.
assertRaises
(
TypeError
,
json
.
loads
,
b
'["hi"]'
)
self
.
assertRaises
(
TypeError
,
self
.
loads
,
b
'"hi"'
)
self
.
assertRaises
(
TypeError
,
self
.
loads
,
b
'["hi"]'
)
def
test_object_pairs_hook_with_unicode
(
self
):
s
=
'{"xkd":1, "kcw":2, "art":3, "hxm":4, "qrt":5, "pad":6, "hoy":7}'
p
=
[(
"xkd"
,
1
),
(
"kcw"
,
2
),
(
"art"
,
3
),
(
"hxm"
,
4
),
(
"qrt"
,
5
),
(
"pad"
,
6
),
(
"hoy"
,
7
)]
self
.
assertEqual
(
json
.
loads
(
s
),
eval
(
s
))
self
.
assertEqual
(
json
.
loads
(
s
,
object_pairs_hook
=
lambda
x
:
x
),
p
)
od
=
json
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
)
self
.
assertEqual
(
self
.
loads
(
s
),
eval
(
s
))
self
.
assertEqual
(
self
.
loads
(
s
,
object_pairs_hook
=
lambda
x
:
x
),
p
)
od
=
self
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
)
self
.
assertEqual
(
od
,
OrderedDict
(
p
))
self
.
assertEqual
(
type
(
od
),
OrderedDict
)
# the object_pairs_hook takes priority over the object_hook
self
.
assertEqual
(
json
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
,
self
.
assertEqual
(
self
.
loads
(
s
,
object_pairs_hook
=
OrderedDict
,
object_hook
=
lambda
x
:
None
),
OrderedDict
(
p
))
class
TestPyUnicode
(
TestUnicode
,
PyTest
):
pass
class
TestCUnicode
(
TestUnicode
,
CTest
):
pass
Lib/test/support.py
Dosyayı görüntüle @
6b60fb91
...
...
@@ -128,8 +128,8 @@ def import_fresh_module(name, fresh=(), blocked=(), deprecated=False):
If deprecated is True, any module or package deprecation messages
will be suppressed."""
# NOTE: test_heapq
and test_warnings include extra sanity checks to make
# sure that this utility function is working as expected
# NOTE: test_heapq
, test_json and test_warnings include extra sanity checks
#
to make
sure that this utility function is working as expected
with
_ignore_deprecated_imports
(
deprecated
):
# Keep track of modules saved for later restoration as well
# as those which just need a blocking entry removed
...
...
Misc/NEWS
Dosyayı görüntüle @
6b60fb91
...
...
@@ -379,6 +379,8 @@ Extension Modules
Tests
-----
- Issue #5723: Improve json tests to be executed with and without accelerations.
- Issue #11873: Change regex in test_compileall to fix occasional failures when
when the randomly generated temporary path happened to match the regex.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment