test_translator.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import unittest
  2. from pdf2zh.translator import BaseTranslator
  3. from pdf2zh.translator import OpenAIlikedTranslator
  4. from pdf2zh import cache
  5. from pdf2zh.config import ConfigManager
  6. class AutoIncreaseTranslator(BaseTranslator):
  7. name = "auto_increase"
  8. n = 0
  9. def do_translate(self, text):
  10. self.n += 1
  11. return str(self.n)
  12. class TestTranslator(unittest.TestCase):
  13. def setUp(self):
  14. self.test_db = cache.init_test_db()
  15. def tearDown(self):
  16. cache.clean_test_db(self.test_db)
  17. def test_cache(self):
  18. translator = AutoIncreaseTranslator("en", "zh", "test")
  19. # First translation should be cached
  20. text = "Hello World"
  21. first_result = translator.translate(text)
  22. # Second translation should return the same result from cache
  23. second_result = translator.translate(text)
  24. self.assertEqual(first_result, second_result)
  25. # Different input should give different result
  26. different_text = "Different Text"
  27. different_result = translator.translate(different_text)
  28. self.assertNotEqual(first_result, different_result)
  29. # Test cache with ignore_cache=True
  30. translator.ignore_cache = True
  31. no_cache_result = translator.translate(text)
  32. self.assertNotEqual(first_result, no_cache_result)
  33. def test_add_cache_impact_parameters(self):
  34. translator = AutoIncreaseTranslator("en", "zh", "test")
  35. # Test cache with added parameters
  36. text = "Hello World"
  37. first_result = translator.translate(text)
  38. translator.add_cache_impact_parameters("test", "value")
  39. second_result = translator.translate(text)
  40. self.assertNotEqual(first_result, second_result)
  41. # Test cache with ignore_cache=True
  42. no_cache_result1 = translator.translate(text, ignore_cache=True)
  43. self.assertNotEqual(first_result, no_cache_result1)
  44. translator.ignore_cache = True
  45. no_cache_result2 = translator.translate(text)
  46. self.assertNotEqual(no_cache_result1, no_cache_result2)
  47. # Test cache with ignore_cache=False
  48. translator.ignore_cache = False
  49. cache_result = translator.translate(text)
  50. self.assertEqual(no_cache_result2, cache_result)
  51. # Test cache with another parameter
  52. translator.add_cache_impact_parameters("test2", "value2")
  53. another_result = translator.translate(text)
  54. self.assertNotEqual(second_result, another_result)
  55. def test_base_translator_throw(self):
  56. translator = BaseTranslator("en", "zh", "test")
  57. with self.assertRaises(NotImplementedError):
  58. translator.translate("Hello World")
  59. class TestOpenAIlikedTranslator(unittest.TestCase):
  60. def setUp(self) -> None:
  61. self.default_envs = {
  62. "OPENAILIKED_BASE_URL": "https://api.openailiked.com",
  63. "OPENAILIKED_API_KEY": "test_api_key",
  64. "OPENAILIKED_MODEL": "test_model",
  65. }
  66. def test_missing_base_url_raises_error(self):
  67. """测试缺失 OPENAILIKED_BASE_URL 时抛出异常"""
  68. ConfigManager.clear()
  69. with self.assertRaises(ValueError) as context:
  70. OpenAIlikedTranslator(
  71. lang_in="en", lang_out="zh", model="test_model", envs={}
  72. )
  73. self.assertIn("The OPENAILIKED_BASE_URL is missing.", str(context.exception))
  74. def test_missing_model_raises_error(self):
  75. """测试缺失 OPENAILIKED_MODEL 时抛出异常"""
  76. envs_without_model = {
  77. "OPENAILIKED_BASE_URL": "https://api.openailiked.com",
  78. "OPENAILIKED_API_KEY": "test_api_key",
  79. }
  80. ConfigManager.clear()
  81. with self.assertRaises(ValueError) as context:
  82. OpenAIlikedTranslator(
  83. lang_in="en", lang_out="zh", model=None, envs=envs_without_model
  84. )
  85. self.assertIn("The OPENAILIKED_MODEL is missing.", str(context.exception))
  86. def test_initialization_with_valid_envs(self):
  87. """测试使用有效的环境变量初始化"""
  88. ConfigManager.clear()
  89. translator = OpenAIlikedTranslator(
  90. lang_in="en",
  91. lang_out="zh",
  92. model=None,
  93. envs=self.default_envs,
  94. )
  95. self.assertEqual(
  96. translator.envs["OPENAILIKED_BASE_URL"],
  97. self.default_envs["OPENAILIKED_BASE_URL"],
  98. )
  99. self.assertEqual(
  100. translator.envs["OPENAILIKED_API_KEY"],
  101. self.default_envs["OPENAILIKED_API_KEY"],
  102. )
  103. self.assertEqual(translator.model, self.default_envs["OPENAILIKED_MODEL"])
  104. def test_default_api_key_fallback(self):
  105. """测试当 OPENAILIKED_API_KEY 为空时使用默认值"""
  106. envs_without_key = {
  107. "OPENAILIKED_BASE_URL": "https://api.openailiked.com",
  108. "OPENAILIKED_MODEL": "test_model",
  109. }
  110. ConfigManager.clear()
  111. translator = OpenAIlikedTranslator(
  112. lang_in="en",
  113. lang_out="zh",
  114. model=None,
  115. envs=envs_without_key,
  116. )
  117. self.assertEqual(
  118. translator.envs["OPENAILIKED_BASE_URL"],
  119. self.default_envs["OPENAILIKED_BASE_URL"],
  120. )
  121. self.assertEqual(translator.envs["OPENAILIKED_API_KEY"], None)
  122. if __name__ == "__main__":
  123. unittest.main()