| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import unittest
- from pdf2zh.translator import BaseTranslator
- from pdf2zh.translator import OpenAIlikedTranslator
- from pdf2zh import cache
- from pdf2zh.config import ConfigManager
- class AutoIncreaseTranslator(BaseTranslator):
- name = "auto_increase"
- n = 0
- def do_translate(self, text):
- self.n += 1
- return str(self.n)
- class TestTranslator(unittest.TestCase):
- def setUp(self):
- self.test_db = cache.init_test_db()
- def tearDown(self):
- cache.clean_test_db(self.test_db)
- def test_cache(self):
- translator = AutoIncreaseTranslator("en", "zh", "test")
- # First translation should be cached
- text = "Hello World"
- first_result = translator.translate(text)
- # Second translation should return the same result from cache
- second_result = translator.translate(text)
- self.assertEqual(first_result, second_result)
- # Different input should give different result
- different_text = "Different Text"
- different_result = translator.translate(different_text)
- self.assertNotEqual(first_result, different_result)
- # Test cache with ignore_cache=True
- translator.ignore_cache = True
- no_cache_result = translator.translate(text)
- self.assertNotEqual(first_result, no_cache_result)
- def test_add_cache_impact_parameters(self):
- translator = AutoIncreaseTranslator("en", "zh", "test")
- # Test cache with added parameters
- text = "Hello World"
- first_result = translator.translate(text)
- translator.add_cache_impact_parameters("test", "value")
- second_result = translator.translate(text)
- self.assertNotEqual(first_result, second_result)
- # Test cache with ignore_cache=True
- no_cache_result1 = translator.translate(text, ignore_cache=True)
- self.assertNotEqual(first_result, no_cache_result1)
- translator.ignore_cache = True
- no_cache_result2 = translator.translate(text)
- self.assertNotEqual(no_cache_result1, no_cache_result2)
- # Test cache with ignore_cache=False
- translator.ignore_cache = False
- cache_result = translator.translate(text)
- self.assertEqual(no_cache_result2, cache_result)
- # Test cache with another parameter
- translator.add_cache_impact_parameters("test2", "value2")
- another_result = translator.translate(text)
- self.assertNotEqual(second_result, another_result)
- def test_base_translator_throw(self):
- translator = BaseTranslator("en", "zh", "test")
- with self.assertRaises(NotImplementedError):
- translator.translate("Hello World")
- class TestOpenAIlikedTranslator(unittest.TestCase):
- def setUp(self) -> None:
- self.default_envs = {
- "OPENAILIKED_BASE_URL": "https://api.openailiked.com",
- "OPENAILIKED_API_KEY": "test_api_key",
- "OPENAILIKED_MODEL": "test_model",
- }
- def test_missing_base_url_raises_error(self):
- """测试缺失 OPENAILIKED_BASE_URL 时抛出异常"""
- ConfigManager.clear()
- with self.assertRaises(ValueError) as context:
- OpenAIlikedTranslator(
- lang_in="en", lang_out="zh", model="test_model", envs={}
- )
- self.assertIn("The OPENAILIKED_BASE_URL is missing.", str(context.exception))
- def test_missing_model_raises_error(self):
- """测试缺失 OPENAILIKED_MODEL 时抛出异常"""
- envs_without_model = {
- "OPENAILIKED_BASE_URL": "https://api.openailiked.com",
- "OPENAILIKED_API_KEY": "test_api_key",
- }
- ConfigManager.clear()
- with self.assertRaises(ValueError) as context:
- OpenAIlikedTranslator(
- lang_in="en", lang_out="zh", model=None, envs=envs_without_model
- )
- self.assertIn("The OPENAILIKED_MODEL is missing.", str(context.exception))
- def test_initialization_with_valid_envs(self):
- """测试使用有效的环境变量初始化"""
- ConfigManager.clear()
- translator = OpenAIlikedTranslator(
- lang_in="en",
- lang_out="zh",
- model=None,
- envs=self.default_envs,
- )
- self.assertEqual(
- translator.envs["OPENAILIKED_BASE_URL"],
- self.default_envs["OPENAILIKED_BASE_URL"],
- )
- self.assertEqual(
- translator.envs["OPENAILIKED_API_KEY"],
- self.default_envs["OPENAILIKED_API_KEY"],
- )
- self.assertEqual(translator.model, self.default_envs["OPENAILIKED_MODEL"])
- def test_default_api_key_fallback(self):
- """测试当 OPENAILIKED_API_KEY 为空时使用默认值"""
- envs_without_key = {
- "OPENAILIKED_BASE_URL": "https://api.openailiked.com",
- "OPENAILIKED_MODEL": "test_model",
- }
- ConfigManager.clear()
- translator = OpenAIlikedTranslator(
- lang_in="en",
- lang_out="zh",
- model=None,
- envs=envs_without_key,
- )
- self.assertEqual(
- translator.envs["OPENAILIKED_BASE_URL"],
- self.default_envs["OPENAILIKED_BASE_URL"],
- )
- self.assertEqual(translator.envs["OPENAILIKED_API_KEY"], None)
- if __name__ == "__main__":
- unittest.main()
|