import os import unittest from unittest.mock import patch from pyecharts.datasets import ( EXTRA, FuzzyDict, register_url, register_files, register_coords, ) class TestDatasets(unittest.TestCase): @patch("pyecharts.datasets.urllib.request.urlopen") def test_register_url(self, fake): current_path = os.path.dirname(__file__) fake_registry = os.path.join(current_path, "fixtures", "registry.json") file_name = ["shape-with-internal-borders/an1_hui1_an1_qing4", "js"] with open(fake_registry, encoding="utf8") as f: fake.return_value = f register_url("http://register.url/is/used") # set maxDiff self.assertEqual.__self__.maxDiff = None self.assertEqual( EXTRA["http://register.url/is/used/js/"], { "安庆": file_name, "English Name": file_name, }, ) fake_registry_1 = os.path.join(current_path, "fixtures", "registry_1.json") with open(fake_registry_1, encoding="utf8") as f: fake.return_value = f register_url("http://register.url/is/used") self.assertEqual( EXTRA["http://register.url/is/used/"], { "安庆": file_name, "English Name": file_name, }, ) # TODO: Github Workflow cannot test it well...Fix it future... # def test_register_url_error(): # try: # register_url("http://127.0.0.1") # except (urllib.error.HTTPError, ConnectionRefusedError) as err: # assert_in(type(err), [urllib.error.HTTPError, ConnectionRefusedError]) def test_register_url_error(self): try: register_url("error_asset_url") except ValueError as err: self.assertIn(type(err), [ValueError]) def test_fuzzy_search_dict(self): fd = FuzzyDict() fd.update({"我是北京市": [1, 2]}) self.assertEqual(fd["我是北京"], [1, 2]) def test_fuzzy_search_key_error(self): with self.assertRaises(KeyError): fd = FuzzyDict() fd.cutoff = 0.9 _ = fd["我是北京"] def test_register_files(self): register_files(asset_files={"x": 1}) def test_register_coords(self): register_coords(coords={"深圳": [113, 23]}) def test_type_error_with_non_string_key(self): fd = FuzzyDict() fd[1] = "one" fd[2] = "two" result = fd._search("1") self.assertFalse(result[0]) # Ensure no match found def test_type_error_with_non_string_lookfor(self): fd = FuzzyDict() fd["one"] = 1 fd["two"] = 2 with self.assertRaises(KeyError): _ = fd[1]