summaryrefslogtreecommitdiffstats
path: root/tests/test_misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_misc.py')
-rw-r--r--tests/test_misc.py101
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)