Skip to content

Commit

Permalink
test: Merged custom engine test cases into engine test cases.
Browse files Browse the repository at this point in the history
  • Loading branch information
bookfere committed Oct 8, 2023
1 parent db916d5 commit 8f48ec1
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 174 deletions.
6 changes: 2 additions & 4 deletions test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@

# from calibre.utils.run_tests import run_cli
from calibre_plugins.ebook_translator.tests import (
test_utils, test_config, test_engine, test_custom, test_element,
test_translation)
test_utils, test_config, test_engine, test_element, test_translation)


def get_tests(module):
Expand All @@ -14,8 +13,7 @@ def get_tests(module):
def get_test_suite():
suite = unittest.TestSuite()
klasses = [
test_utils, test_config, test_engine, test_custom, test_element,
test_translation]
test_utils, test_config, test_engine, test_element, test_translation]
suite.addTests(get_tests(klass) for klass in klasses)
return suite

Expand Down
170 changes: 0 additions & 170 deletions tests/test_custom.py

This file was deleted.

165 changes: 165 additions & 0 deletions tests/test_engine.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import re
import json
import unittest
from unittest.mock import patch

from ..engines.base import Base
from ..engines.deepl import DeeplTranslate
from ..engines.custom import (
create_engine_template, load_engine_data, CustomTranslate)


load_translations()
Expand Down Expand Up @@ -63,3 +66,165 @@ def test_translate(self, mock_browser):
_('Can not parse returned response. Raw data: {}')
.format('\n<dummy info>\n') + 'Traceback',
str(e.exception))


class TestFunction(unittest.TestCase):
def test_create_engine_template(self):
expect = """{
"name": "New Engine",
"languages": {
"source": {
"Source Language": "code"
},
"target": {
"Target Language": "code"
}
},
"request": {
"url": "https://example.api",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"data": {
"source": "<source>",
"target": "<target>",
"text": "<text>"
}
},
"response": "response"
}"""

self.assertEqual(expect, create_engine_template('New Engine'))

def test_load_engine_data(self):
self.assertEqual(
(False, _('Engine data must be in valid JSON format.')),
load_engine_data('<fake data>'))
self.assertEqual(
(False, _('Invalid engine data.')),
load_engine_data('""'))
self.assertEqual(
(False, _('Engine name is required.')),
load_engine_data('{}'))
self.assertEqual(
(False, _(
'Engine name must be different from builtin engine name.')),
load_engine_data('{"name":"Google(Free)"}'))
self.assertEqual(
(False, _('Language codes are required.')),
load_engine_data('{"name":"Test"}'))
self.assertEqual(
(False, _('Language codes are required.')),
load_engine_data('{"name":"Test","langiages":{}}'))
self.assertEqual(
(False, _('Source and target must be added in pair.')),
load_engine_data('{"name":"Test","languages":{"source":{}}}'))
self.assertEqual(
(False, _('Source and target must be added in pair.')),
load_engine_data('{"name":"Test","languages":{"target":{}}}'))
self.assertEqual(
(False, _('Request information is required.')),
load_engine_data(
'{"name":"Test","languages":{"English":"EN"}}'))
self.assertEqual(
(False, _('API URL is required.')),
load_engine_data(
'{"name":"Test","languages":{"English":"EN"},'
'"request":{"test":null}}'))
self.assertEqual(
(False, _('Placeholder <text> is required.')),
load_engine_data(
'{"name":"Test","languages":{"English":"EN"},'
'"request":{"url":"https://test.api","data":{}}}'))
self.assertEqual(
(False, _('Request headers must be an JSON object.')),
load_engine_data(
'{"name":"Test","languages":{"English":"EN"},'
'"request":{"url":"https://test.api","data":"<text>",'
'"headers":"abc"}}'))
self.assertEqual(
(False, _('A appropriate Content-Type in headers is required.')),
load_engine_data(
'{"name":"Test","languages":{"English":"EN"},'
'"request":{"url":"https://test.api","data":"<text>"}}'))
self.assertEqual(
(False, _('Expression to parse response is required.')),
load_engine_data(
'{"name":"Test","languages":{"English":"EN"},'
'"request":{"url":"https://test.api","data":"<text>",'
'"headers":{"Content-Type":"application/anything"}}}'))
json_data = (
'{"name":"Test","languages":{"English":"EN"},'
'"request":{"url":"https://test.api","data":{"test":"<text>"},'
'"headers":{"Content-Type":"application/anything"}},'
'"response":"response"}')
self.assertEqual(
(True, json.loads(json_data)), load_engine_data(json_data))


class TestCustom(unittest.TestCase):
def setUp(self):
engine_data = """{
"name": "New Engine",
"languages": {
"source": {
"English": "en"
},
"target": {
"Chinese": "zh"
}
},
"request": {
"url": "https://example.api",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"data": {
"source": "<source>",
"target": "<target>",
"text": "<text>"
}
},
"response": "response['text']"
}"""

engine_data = json.loads(engine_data)
CustomTranslate.set_engine_data(engine_data)

@patch('calibre_plugins.ebook_translator.engines.base.Browser')
def test_translate_json(self, mock_browser):
translator = CustomTranslate()
translator.set_source_lang('English')
translator.set_target_lang('Chinese')
mock_browser.return_value.response.return_value.read.return_value \
.decode.return_value = '{"text": "你好世界!"}'
self.assertEqual('你好世界!', translator.translate('HelloWorld!'))

@patch('calibre_plugins.ebook_translator.engines.base.Browser')
def test_translate_urlencoded(self, mock_browser):
translator = CustomTranslate()
# Mock content type: application/x-www-form-urlencoded
del translator.engine_data['request']['headers']
translator.set_source_lang('English')
translator.set_target_lang('Chinese')
mock_browser.return_value.response.return_value.read.return_value \
.decode.return_value = '{"text": "\\"你好\\"\\n世界!"}'
self.assertEqual(
'\"你好\"\n世界!', translator.translate('\"Hello\"\nWorld!'))

def test_parse(self):
translator = CustomTranslate()

translator.engine_data = {'response': 'response["text"]'}
self.assertEqual(
'你好世界!', translator.parse('{"text": "你好世界!"}'))

translator.engine_data = {'response': 'response.text'}
self.assertEqual(
'你好世界!', translator.parse('<test>你好世界!</test>'))

translator.engine_data = {'response': 'response'}
self.assertEqual(
'你好世界!', translator.parse('你好世界!'))

0 comments on commit 8f48ec1

Please sign in to comment.