Commit fbdfc829 authored by Johannes Bechberger's avatar Johannes Bechberger

Improve .java test type

parent dfc94ae0
...@@ -79,14 +79,17 @@ class Environment: ...@@ -79,14 +79,17 @@ class Environment:
if not self.own_tmp_dir: if not self.own_tmp_dir:
shutil.rmtree(self.tmp_dir) shutil.rmtree(self.tmp_dir)
def run_mj_command(self, *args: Tuple[str]) -> Tuple[bytes, bytes, int]: def run_mj_command(self, mode: str, *args: Tuple[str]) -> Tuple[bytes, bytes, int]:
""" """
Execute the MiniJava `run` script with the given arguments. Execute the MiniJava `run` script with the given arguments.
:param args: arguments for the MiniJava `run` script :param args: arguments for the MiniJava `run` script
:return: (out, err, return code) :return: (out, err, return code)
""" """
cmd = [self.mj_run_cmd] + list(args) mode_flag = {
TestMode.syntax: "--parsetest"
}[mode]
cmd = [self.mj_run_cmd, mode_flag] + list(args)
return execute(cmd, timeout=self.timeout) return execute(cmd, timeout=self.timeout)
def run_command(self, cmd: str, *args: Tuple[str]) -> Tuple[bytes, bytes, int]: def run_command(self, cmd: str, *args: Tuple[str]) -> Tuple[bytes, bytes, int]:
......
import shutil
from mjtest.environment import Environment, TestMode from mjtest.environment import Environment, TestMode
from mjtest.test.tests import TestCase, TestResult, BasicTestResult from mjtest.test.tests import TestCase, BasicTestResult
from os import path from os import path
from mjtest.util.shell import execute
class BasicSyntaxTest(TestCase): class BasicSyntaxTest(TestCase):
FILE_ENDINGS = [".invalid.mj", ".valid.mj", ".mj"] FILE_ENDINGS = [".invalid.mj", ".valid.mj", ".mj"]
MODE = TestMode.syntax
def __init__(self, env: Environment, type: str, file: str): def __init__(self, env: Environment, type: str, file: str):
super().__init__(env, type, file) super().__init__(env, type, file)
...@@ -19,7 +20,7 @@ class BasicSyntaxTest(TestCase): ...@@ -19,7 +20,7 @@ class BasicSyntaxTest(TestCase):
return path.basename(self.file)[:-3] return path.basename(self.file)[:-3]
def run(self) -> BasicTestResult: def run(self) -> BasicTestResult:
out, err, rtcode = self.env.run_mj_command("--parsetest ", self.file) out, err, rtcode = self.env.run_mj_command(self.MODE, self.file)
return BasicTestResult(self, rtcode, out.decode(), err.decode()) return BasicTestResult(self, rtcode, out.decode(), err.decode())
TestCase.TEST_CASE_CLASSES[TestMode.syntax].append(BasicSyntaxTest) TestCase.TEST_CASE_CLASSES[TestMode.syntax].append(BasicSyntaxTest)
...@@ -36,7 +37,8 @@ class JavaCompileTest(BasicSyntaxTest): ...@@ -36,7 +37,8 @@ class JavaCompileTest(BasicSyntaxTest):
super().__init__(env, type, file) super().__init__(env, type, file)
tmp_dir = self.env.create_tmpdir() tmp_dir = self.env.create_tmpdir()
_, self.javac_err, self.javac_rtcode = \ _, self.javac_err, self.javac_rtcode = \
self.env.run_command("javac", file, "-d", tmp_dir) self.env.run_command("javac", path.relpath(file), "-d", tmp_dir)
shutil.rmtree(tmp_dir, ignore_errors=True)
self._should_succeed = self.javac_rtcode == 0 self._should_succeed = self.javac_rtcode == 0
def short_name(self) -> str: def short_name(self) -> str:
...@@ -44,9 +46,8 @@ class JavaCompileTest(BasicSyntaxTest): ...@@ -44,9 +46,8 @@ class JavaCompileTest(BasicSyntaxTest):
def run(self) -> BasicTestResult: def run(self) -> BasicTestResult:
ret = super().run() ret = super().run()
ret.add_additional_text("javac error output", str(self.javac_err)) ret.add_additional_text("javac error output", self.javac_err.decode())
ret.add_additional_text_line("javac return code", str(self.javac_rtcode)) ret.add_additional_text_line("javac return code", str(self.javac_rtcode))
return ret return ret
TestCase.TEST_CASE_CLASSES[TestMode.syntax].append(JavaCompileTest) TestCase.TEST_CASE_CLASSES[TestMode.syntax].append(JavaCompileTest)
TestCase.TEST_CASE_CLASSES[TestMode.semantic].append(JavaCompileTest)
...@@ -108,7 +108,7 @@ class TestSuite: ...@@ -108,7 +108,7 @@ class TestSuite:
def _func(self, test_case: 'TestCase'): def _func(self, test_case: 'TestCase'):
ret = self._run_test_case(test_case) ret = self._run_test_case(test_case)
if ret.is_correct(): if ret is not False and ret.is_correct():
return 0, [test_case] return 0, [test_case]
return 1, [] return 1, []
......
# source: https://github.com/libfirm/sisyphus # source: https://github.com/libfirm/sisyphus, but slightly modified to support Windows
""" """
Convenience function Convenience function
Alternative to subprocess and os.system Alternative to subprocess and os.system
""" """
import shlex
import subprocess import subprocess
has_resource_module = True has_resource_module = True
try: try:
import resource import resource
except ImportError: except ImportError:
has_resource_module = False has_resource_module = False
pass pass
import sys import sys
import signal import signal
...@@ -75,6 +76,7 @@ class _Execute(object): ...@@ -75,6 +76,7 @@ class _Execute(object):
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stderr=subprocess.PIPE,
env=self.env, env=self.env,
shell=True,
**prexec_args) **prexec_args)
x = self.proc.communicate() x = self.proc.communicate()
self.out, self.err = x self.out, self.err = x
...@@ -119,9 +121,11 @@ def execute(cmd, env=None, timeout=0, rlimit=None, propagate_sigint=True): ...@@ -119,9 +121,11 @@ def execute(cmd, env=None, timeout=0, rlimit=None, propagate_sigint=True):
if not rlimit: if not rlimit:
rlimit = dict() rlimit = dict()
if cmd is str: if cmd is str:
cmd = filter(lambda x: x, cmd.split(' ')) pass
#cmd = filter(lambda x: x, cmd.split(' '))
else: else:
cmd = list(filter(lambda x: x, cmd[0].split(' '))) + cmd[1:] #cmd = shlex.split(cmd[0]) + cmd[1:]
cmd = cmd[0] + " " + " ".join(shlex.quote(c) for c in cmd[1:])
exc = _Execute(cmd, timeout, env, rlimit) exc = _Execute(cmd, timeout, env, rlimit)
(out, err, returncode) = exc.run() (out, err, returncode) = exc.run()
if returncode == -signal.SIGINT: if returncode == -signal.SIGINT:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment