• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SPDX-License-Identifier: MIT
2# SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3# Licensed to PSF under a Contributor Agreement.
4
5import unittest
6
7from . import tomllib
8
9
10class TestError(unittest.TestCase):
11    def test_line_and_col(self):
12        with self.assertRaises(tomllib.TOMLDecodeError) as exc_info:
13            tomllib.loads("val=.")
14        self.assertEqual(str(exc_info.exception), "Invalid value (at line 1, column 5)")
15
16        with self.assertRaises(tomllib.TOMLDecodeError) as exc_info:
17            tomllib.loads(".")
18        self.assertEqual(
19            str(exc_info.exception), "Invalid statement (at line 1, column 1)"
20        )
21
22        with self.assertRaises(tomllib.TOMLDecodeError) as exc_info:
23            tomllib.loads("\n\nval=.")
24        self.assertEqual(str(exc_info.exception), "Invalid value (at line 3, column 5)")
25
26        with self.assertRaises(tomllib.TOMLDecodeError) as exc_info:
27            tomllib.loads("\n\n.")
28        self.assertEqual(
29            str(exc_info.exception), "Invalid statement (at line 3, column 1)"
30        )
31
32    def test_missing_value(self):
33        with self.assertRaises(tomllib.TOMLDecodeError) as exc_info:
34            tomllib.loads("\n\nfwfw=")
35        self.assertEqual(str(exc_info.exception), "Invalid value (at end of document)")
36
37    def test_invalid_char_quotes(self):
38        with self.assertRaises(tomllib.TOMLDecodeError) as exc_info:
39            tomllib.loads("v = '\n'")
40        self.assertTrue(" '\\n' " in str(exc_info.exception))
41
42    def test_module_name(self):
43        self.assertEqual(tomllib.TOMLDecodeError().__module__, tomllib.__name__)
44
45    def test_invalid_parse_float(self):
46        def dict_returner(s: str) -> dict:
47            return {}
48
49        def list_returner(s: str) -> list:
50            return []
51
52        for invalid_parse_float in (dict_returner, list_returner):
53            with self.assertRaises(ValueError) as exc_info:
54                tomllib.loads("f=0.1", parse_float=invalid_parse_float)
55            self.assertEqual(
56                str(exc_info.exception), "parse_float must not return dicts or lists"
57            )
58