Multi Language translation impl. Eine .json Datei enthält die ÜBersetztungen von allen Sprachen die übersetzt werden sollen. Dazu müssen diese Sektione allerdings auch befüllt sein
This commit is contained in:
+101
-7
@@ -29,8 +29,11 @@ class TestRunner:
|
||||
self.testdata_dir = Path(os.environ.get('PROJECT_TEST', self.project_root / "testdata"))
|
||||
self.work_dir = Path(os.environ.get('PROJECT_WORK', self.project_root / "work"))
|
||||
self.bin_dir = Path(os.environ.get('PROJECT_BIN', self.project_root / "bin"))
|
||||
self.lib_dir = Path(os.environ.get('PROJECT_LIB', self.project_root / "lib"))
|
||||
self.cfg_dir = Path(os.environ.get('PROJECT_CFG', self.project_root / "cfg"))
|
||||
self.getexdraw_bat = self.bin_dir / "getexdraw.bat"
|
||||
self.ioconverter_bat = self.bin_dir / "ioconverter.bat"
|
||||
self.translate_py = self.lib_dir / "translate.py"
|
||||
|
||||
self.test_results = []
|
||||
self.failed_tests = []
|
||||
@@ -128,6 +131,80 @@ class TestRunner:
|
||||
except Exception as e:
|
||||
return False, f"Exception during execution: {str(e)}"
|
||||
|
||||
def run_translate(self, test_filename):
|
||||
"""Execute translate.py for given test file with three variants: raw, cs, multilang"""
|
||||
dxf_file = self.testdata_dir / f"{test_filename}.dxf"
|
||||
if not dxf_file.exists():
|
||||
return False, f"Test file {dxf_file} not found"
|
||||
|
||||
try:
|
||||
# Set up environment for translate.py
|
||||
env = os.environ.copy()
|
||||
env['PROJECT_TRANSLATION'] = str(self.cfg_dir / "translation")
|
||||
|
||||
# Variant 1: Raw extraction (no translation)
|
||||
cmd_raw = [
|
||||
sys.executable,
|
||||
str(self.translate_py),
|
||||
'--extract',
|
||||
'--filename', str(dxf_file),
|
||||
'--export-type', 'json',
|
||||
'--outname', f'{test_filename}_raw'
|
||||
]
|
||||
result_raw = subprocess.run(cmd_raw, capture_output=True, text=True, env=env)
|
||||
|
||||
# Variant 2: CS translation (single language)
|
||||
cmd_cs = [
|
||||
sys.executable,
|
||||
str(self.translate_py),
|
||||
'--extract',
|
||||
'--filename', str(dxf_file),
|
||||
'--export-type', 'json',
|
||||
'--outname', f'{test_filename}_cs',
|
||||
'--translate', 'CS'
|
||||
]
|
||||
result_cs = subprocess.run(cmd_cs, capture_output=True, text=True, env=env)
|
||||
|
||||
# Variant 3: Multilang translation (CS,EN)
|
||||
cmd_multilang = [
|
||||
sys.executable,
|
||||
str(self.translate_py),
|
||||
'--extract',
|
||||
'--filename', str(dxf_file),
|
||||
'--export-type', 'json',
|
||||
'--outname', f'{test_filename}_multilang',
|
||||
'--translate', 'CS,EN'
|
||||
]
|
||||
result_multilang = subprocess.run(cmd_multilang, capture_output=True, text=True, env=env)
|
||||
|
||||
# Check if all expected output files were created
|
||||
expected_raw = self.work_dir / f"{test_filename}_raw.json"
|
||||
expected_cs = self.work_dir / f"{test_filename}_cs.json"
|
||||
expected_multilang = self.work_dir / f"{test_filename}_multilang.json"
|
||||
|
||||
missing_files = []
|
||||
if not expected_raw.exists():
|
||||
missing_files.append(f"{test_filename}_raw.json")
|
||||
if not expected_cs.exists():
|
||||
missing_files.append(f"{test_filename}_cs.json")
|
||||
if not expected_multilang.exists():
|
||||
missing_files.append(f"{test_filename}_multilang.json")
|
||||
|
||||
if missing_files:
|
||||
error_msg = f"translate.py failed - expected output files not found: {', '.join(missing_files)}"
|
||||
if result_raw.returncode != 0:
|
||||
error_msg += f"\n\nRaw variant STDOUT:\n{result_raw.stdout}\nSTDERR:\n{result_raw.stderr}"
|
||||
if result_cs.returncode != 0:
|
||||
error_msg += f"\n\nCS variant STDOUT:\n{result_cs.stdout}\nSTDERR:\n{result_cs.stderr}"
|
||||
if result_multilang.returncode != 0:
|
||||
error_msg += f"\n\nMultilang variant STDOUT:\n{result_multilang.stdout}\nSTDERR:\n{result_multilang.stderr}"
|
||||
return False, error_msg
|
||||
else:
|
||||
return True, "Success"
|
||||
|
||||
except Exception as e:
|
||||
return False, f"Exception during execution: {str(e)}"
|
||||
|
||||
def cleanup_test_files(self, test_filename):
|
||||
"""Remove the work folder for the given test"""
|
||||
if not self.clean:
|
||||
@@ -149,7 +226,11 @@ class TestRunner:
|
||||
# Check what files actually exist and determine comparison strategy based on mode
|
||||
errors_file = self.work_dir / test_filename / f"{test_filename}_errors.json"
|
||||
|
||||
if self.mode == 'ioconverter':
|
||||
if self.mode == 'translation':
|
||||
# For translation mode: compare _raw, _cs, and _multilang variants
|
||||
file_suffixes = ['_raw', '_cs', '_multilang']
|
||||
# Translation files are directly in work_dir, not in subdirectory
|
||||
elif self.mode == 'ioconverter':
|
||||
# For ioconverter mode: check for _positionsconv.json
|
||||
positions_file = self.work_dir / test_filename / f"{test_filename}_positionsconv.json"
|
||||
|
||||
@@ -178,8 +259,12 @@ class TestRunner:
|
||||
return False, f"No generated files found for {test_filename}", []
|
||||
|
||||
for suffix in file_suffixes:
|
||||
# Generated file should be in work/<testfilename>/<testfilename><suffix>.json
|
||||
generated_file = self.work_dir / test_filename / f"{test_filename}{suffix}.json"
|
||||
# For translation mode, files are directly in work_dir
|
||||
if self.mode == 'translation':
|
||||
generated_file = self.work_dir / f"{test_filename}{suffix}.json"
|
||||
else:
|
||||
# For other modes, files are in work/<testfilename>/ subdirectory
|
||||
generated_file = self.work_dir / test_filename / f"{test_filename}{suffix}.json"
|
||||
|
||||
# Reference file should be in testdata/<testfilename><suffix>.json
|
||||
reference_file = self.testdata_dir / f"{test_filename}{suffix}.json"
|
||||
@@ -237,8 +322,10 @@ class TestRunner:
|
||||
|
||||
result = TestResult(test_filename)
|
||||
|
||||
# Step 1: Run the appropriate batch script based on mode
|
||||
if self.mode == 'ioconverter':
|
||||
# Step 1: Run the appropriate script based on mode
|
||||
if self.mode == 'translation':
|
||||
success, msg = self.run_translate(test_filename)
|
||||
elif self.mode == 'ioconverter':
|
||||
success, msg = self.run_ioconverter(test_filename)
|
||||
else:
|
||||
success, msg = self.run_getexdraw(test_filename)
|
||||
@@ -370,11 +457,18 @@ def main():
|
||||
action='store_true',
|
||||
help='Run ioconverter.bat tests'
|
||||
)
|
||||
mode_group.add_argument(
|
||||
'--translation',
|
||||
action='store_true',
|
||||
help='Run translate.py tests (extract text with raw, CS, and multilang variants)'
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Determine mode - default to getexdraw if neither is specified
|
||||
if args.ioconverter:
|
||||
# Determine mode - default to getexdraw if none is specified
|
||||
if args.translation:
|
||||
mode = 'translation'
|
||||
elif args.ioconverter:
|
||||
mode = 'ioconverter'
|
||||
else:
|
||||
mode = 'getexdraw'
|
||||
|
||||
Reference in New Issue
Block a user