Previously, it was necessary to support older versions of Python for compatibility. F-strings were released in Python 3.6. Python 3.5 was marked as unsupported by the end of 2020, so now it's possible to start using f-strings safely for better readability and performance.
112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
import glob
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
|
|
import pytest
|
|
from unit.applications.proto import TestApplicationProto
|
|
from unit.option import option
|
|
|
|
|
|
class TestApplicationJava(TestApplicationProto):
|
|
application_type = "java"
|
|
|
|
def prepare_env(self, script):
|
|
app_path = f'{option.temp_dir}/java'
|
|
web_inf_path = f'{app_path}/WEB-INF/'
|
|
classes_path = f'{web_inf_path}classes/'
|
|
script_path = f'{option.test_dir}/java/{script}/'
|
|
|
|
if not os.path.isdir(app_path):
|
|
os.makedirs(app_path)
|
|
|
|
src = []
|
|
|
|
for f in os.listdir(script_path):
|
|
file_path = f'{script_path}{f}'
|
|
|
|
if f.endswith('.java'):
|
|
src.append(file_path)
|
|
continue
|
|
|
|
if f.startswith('.') or f == 'Makefile':
|
|
continue
|
|
|
|
if os.path.isdir(file_path):
|
|
if f == 'WEB-INF':
|
|
continue
|
|
|
|
shutil.copytree(file_path, f'{app_path}/{f}')
|
|
continue
|
|
|
|
if f == 'web.xml':
|
|
if not os.path.isdir(web_inf_path):
|
|
os.makedirs(web_inf_path)
|
|
|
|
shutil.copy2(file_path, web_inf_path)
|
|
else:
|
|
shutil.copy2(file_path, app_path)
|
|
|
|
if src:
|
|
if not os.path.isdir(classes_path):
|
|
os.makedirs(classes_path)
|
|
|
|
classpath = (
|
|
f'{option.current_dir}/build/tomcat-servlet-api-9.0.70.jar'
|
|
)
|
|
|
|
ws_jars = glob.glob(
|
|
f'{option.current_dir}/build/websocket-api-java-*.jar'
|
|
)
|
|
|
|
if not ws_jars:
|
|
pytest.fail('websocket api jar not found.')
|
|
|
|
javac = [
|
|
'javac',
|
|
'-target',
|
|
'8',
|
|
'-source',
|
|
'8',
|
|
'-nowarn',
|
|
'-encoding',
|
|
'utf-8',
|
|
'-d',
|
|
classes_path,
|
|
'-classpath',
|
|
f'{classpath}:{ws_jars[0]}',
|
|
]
|
|
javac.extend(src)
|
|
|
|
if option.detailed:
|
|
print(f'\n$ {" ".join(javac)}')
|
|
|
|
try:
|
|
subprocess.check_output(javac, stderr=subprocess.STDOUT)
|
|
|
|
except KeyboardInterrupt:
|
|
raise
|
|
|
|
except subprocess.CalledProcessError:
|
|
pytest.fail("Can't run javac process.")
|
|
|
|
def load(self, script, **kwargs):
|
|
self.prepare_env(script)
|
|
|
|
script_path = f'{option.test_dir}/java/{script}/'
|
|
self._load_conf(
|
|
{
|
|
"listeners": {"*:7080": {"pass": f"applications/{script}"}},
|
|
"applications": {
|
|
script: {
|
|
"unit_jars": f'{option.current_dir}/build',
|
|
"type": self.get_application_type(),
|
|
"processes": {"spare": 0},
|
|
"working_directory": script_path,
|
|
"webapp": f'{option.temp_dir}/java',
|
|
}
|
|
},
|
|
},
|
|
**kwargs,
|
|
)
|