diff options
Diffstat (limited to 'tests/test_misc.py')
-rw-r--r-- | tests/test_misc.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/test_misc.py b/tests/test_misc.py new file mode 100644 index 0000000..76fa590 --- /dev/null +++ b/tests/test_misc.py @@ -0,0 +1,101 @@ +# SPDX-License-Identifier: MIT +# SPDX-FileCopyrightText: 2021 Taneli Hukkinen +# Licensed to PSF under a Contributor Agreement. + +import copy +import datetime +from decimal import Decimal as D +from pathlib import Path +import tempfile +import unittest + +from . import tomllib + + +class TestMiscellaneous(unittest.TestCase): + def test_load(self): + content = "one=1 \n two='two' \n arr=[]" + expected = {"one": 1, "two": "two", "arr": []} + with tempfile.TemporaryDirectory() as tmp_dir_path: + file_path = Path(tmp_dir_path) / "test.toml" + file_path.write_text(content) + + with open(file_path, "rb") as bin_f: + actual = tomllib.load(bin_f) + self.assertEqual(actual, expected) + + def test_incorrect_load(self): + content = "one=1" + with tempfile.TemporaryDirectory() as tmp_dir_path: + file_path = Path(tmp_dir_path) / "test.toml" + file_path.write_text(content) + + with open(file_path, "r") as txt_f: + with self.assertRaises(TypeError): + tomllib.load(txt_f) # type: ignore[arg-type] + + def test_parse_float(self): + doc = """ + val=0.1 + biggest1=inf + biggest2=+inf + smallest=-inf + notnum1=nan + notnum2=-nan + notnum3=+nan + """ + obj = tomllib.loads(doc, parse_float=D) + expected = { + "val": D("0.1"), + "biggest1": D("inf"), + "biggest2": D("inf"), + "smallest": D("-inf"), + "notnum1": D("nan"), + "notnum2": D("-nan"), + "notnum3": D("nan"), + } + for k, expected_val in expected.items(): + actual_val = obj[k] + self.assertIsInstance(actual_val, D) + if actual_val.is_nan(): + self.assertTrue(expected_val.is_nan()) + else: + self.assertEqual(actual_val, expected_val) + + def test_deepcopy(self): + doc = """ + [bliibaa.diibaa] + offsettime=[1979-05-27T00:32:00.999999-07:00] + """ + obj = tomllib.loads(doc) + obj_copy = copy.deepcopy(obj) + self.assertEqual(obj_copy, obj) + expected_obj = { + "bliibaa": { + "diibaa": { + "offsettime": [ + datetime.datetime( + 1979, + 5, + 27, + 0, + 32, + 0, + 999999, + tzinfo=datetime.timezone(datetime.timedelta(hours=-7)), + ) + ] + } + } + } + self.assertEqual(obj_copy, expected_obj) + + def test_inline_array_recursion_limit(self): + nest_count = 470 + recursive_array_toml = "arr = " + nest_count * "[" + nest_count * "]" + tomllib.loads(recursive_array_toml) + + def test_inline_table_recursion_limit(self): + nest_count = 310 + recursive_table_toml = nest_count * "key = {" + nest_count * "}" + tomllib.loads(recursive_table_toml) |