test_translator.py 5.1 KB

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