diff -r 1af087712e69 Lib/test/test_json/test_enum.py --- a/Lib/test/test_json/test_enum.py Wed Aug 14 18:11:09 2013 -0600 +++ b/Lib/test/test_json/test_enum.py Thu Aug 15 15:49:10 2013 +0800 @@ -15,17 +15,23 @@ E = 2.718281 PI = 3.141593 TAU = 2 * PI +INF = float('inf') +NEG_INF = float('-inf') class FloatNum(float, Enum): e = E pi = PI tau = TAU + inf = INF + neg_inf = NEG_INF + +class NaNNum(float, Enum): + nan = float('nan') class TestEnum: def test_floats(self): for enum in FloatNum: - self.assertEqual(self.dumps(enum), repr(enum.value)) self.assertEqual(float(self.dumps(enum)), enum) self.assertEqual(self.loads(self.dumps(enum)), enum) @@ -40,23 +46,27 @@ self.dumps(list(BigNum)), str([SMALL, BIG, HUGE, REALLY_HUGE]), ) - self.assertEqual(self.dumps(list(FloatNum)), str([E, PI, TAU])) + self.assertEqual( + self.loads(self.dumps(list(FloatNum))), + [E, PI, TAU, INF, NEG_INF]) def test_dict_keys(self): s, b, h, r = BigNum - e, p, t = FloatNum + e, p, t, i, n = FloatNum d = { s:'tiny', b:'large', h:'larger', r:'largest', - e:"Euler's number", p:'pi', t:'tau', + e:"Euler's number", p:'pi', t:'tau', i:'inf', n:'-inf', } nd = self.loads(self.dumps(d)) self.assertEqual(nd[str(SMALL)], 'tiny') self.assertEqual(nd[str(BIG)], 'large') self.assertEqual(nd[str(HUGE)], 'larger') self.assertEqual(nd[str(REALLY_HUGE)], 'largest') - self.assertEqual(nd[repr(E)], "Euler's number") - self.assertEqual(nd[repr(PI)], 'pi') - self.assertEqual(nd[repr(TAU)], 'tau') + self.assertEqual(nd[self.dumps(E)], "Euler's number") + self.assertEqual(nd[self.dumps(PI)], 'pi') + self.assertEqual(nd[self.dumps(TAU)], 'tau') + self.assertEqual(nd[self.dumps(INF)], 'inf') + self.assertEqual(nd[self.dumps(NEG_INF)], '-inf') def test_dict_values(self): d = dict( @@ -67,6 +77,8 @@ e=FloatNum.e, pi=FloatNum.pi, tau=FloatNum.tau, + inf=FloatNum.inf, + neg_inf=FloatNum.neg_inf, ) nd = self.loads(self.dumps(d)) self.assertEqual(nd['tiny'], SMALL) @@ -76,6 +88,22 @@ self.assertEqual(nd['e'], E) self.assertEqual(nd['pi'], PI) self.assertEqual(nd['tau'], TAU) + self.assertEqual(nd['inf'], INF) + self.assertEqual(nd['neg_inf'], NEG_INF) + + def test_allow_nan(self): + self.assertRaises(ValueError, self.dumps, [FloatNum.inf], + allow_nan=False) + self.assertRaises(ValueError, self.dumps, [FloatNum.neg_inf], + allow_nan=False) + self.assertRaises(ValueError, self.dumps, [NaNNum.nan], + allow_nan=False) + + def test_nan(self): + out = self.dumps([NaNNum.nan]) + res = self.loads(out) + self.assertEqual(len(res), 1) + self.assertNotEqual(res[0], res[0]) class TestPyEnum(TestEnum, PyTest): pass class TestCEnum(TestEnum, CTest): pass