summaryrefslogtreecommitdiffstats
path: root/_test/test_json_numbers.py
diff options
context:
space:
mode:
Diffstat (limited to '_test/test_json_numbers.py')
-rw-r--r--_test/test_json_numbers.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/_test/test_json_numbers.py b/_test/test_json_numbers.py
new file mode 100644
index 0000000..1bfd5ba
--- /dev/null
+++ b/_test/test_json_numbers.py
@@ -0,0 +1,56 @@
+# coding: utf-8
+
+import json
+
+import pytest # NOQA
+
+
+def load(s, typ=float):
+ import ruyaml
+
+ yaml = ruyaml.YAML()
+ x = '{"low": %s }' % (s)
+ print('input: [%s]' % (s), repr(x))
+ # just to check it is loadable json
+ res = json.loads(x)
+ assert isinstance(res['low'], typ)
+ ret_val = yaml.load(x)
+ print(ret_val)
+ return ret_val['low']
+
+
+class TestJSONNumbers:
+ # based on http://stackoverflow.com/a/30462009/1307905
+ # yaml number regex: http://yaml.org/spec/1.2/spec.html#id2804092
+ #
+ # -? [1-9] ( \. [0-9]* [1-9] )? ( e [-+] [1-9] [0-9]* )?
+ #
+ # which is not a superset of the JSON numbers
+ def test_json_number_float(self):
+ for x in (
+ y.split('#')[0].strip()
+ for y in """
+ 1.0 # should fail on YAML spec on 1-9 allowed as single digit
+ -1.0
+ 1e-06
+ 3.1e-5
+ 3.1e+5
+ 3.1e5 # should fail on YAML spec: no +- after e
+ """.splitlines()
+ ):
+ if not x:
+ continue
+ res = load(x)
+ assert isinstance(res, float)
+
+ def test_json_number_int(self):
+ for x in (
+ y.split('#')[0].strip()
+ for y in """
+ 42
+ """.splitlines()
+ ):
+ if not x:
+ continue
+ res = load(x, int)
+ assert isinstance(res, int)