mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # 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 sys
 | |
| 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):
 | |
|         # 465 with default recursion limit
 | |
|         nest_count = int(sys.getrecursionlimit() * 0.465)
 | |
|         recursive_array_toml = "arr = " + nest_count * "[" + nest_count * "]"
 | |
|         tomllib.loads(recursive_array_toml)
 | |
| 
 | |
|     def test_inline_table_recursion_limit(self):
 | |
|         # 310 with default recursion limit
 | |
|         nest_count = int(sys.getrecursionlimit() * 0.31)
 | |
|         recursive_table_toml = nest_count * "key = {" + nest_count * "}"
 | |
|         tomllib.loads(recursive_table_toml)
 | 
