class JavaTestHook
Constants
- COMPILATION_ERROR_FLAG
Public Instance Methods
command_line(*filenames)
click to toggle source
# File lib/test_hook.rb, line 10 def command_line(*filenames) "runjunit #{filenames.join(' ')}" end
compile_file_content(request)
click to toggle source
# File lib/test_hook.rb, line 35 def compile_file_content(request) test = <<EOF import java.util.*; import java.util.function.*; import java.util.stream.*; import java.util.stream.Collectors.*; import java.time.*; import org.junit.runner.RunWith; import org.junit.*; import org.junit.runner.*; import org.junit.runner.notification.*; import org.junit.runners.*; import org.junit.runners.model.InitializationError; import org.apache.commons.text.StringEscapeUtils; #{has_files?(request) ? '' : request.content} #{request.extra} public class SubmissionTest { #{request.test} @AfterClass public static void afterAll(){ System.out.println("!!!JAVA-MUMUKI-OUTPUT!!!"); } public static void main(String[] args) { JUnitCore core = new JUnitCore(); core.addListener(new MuListener()); core.run(SubmissionTest.class); } } class MuListener extends RunListener { private Map<String, Collection<String>> tests = new HashMap<>(); @Override public void testStarted(Description description) throws Exception { String methodName = description.getMethodName(); tests.put(methodName, Arrays.asList(methodName, "passed")); } @Override public void testFailure(Failure failure) { String methodName = failure.getDescription().getMethodName(); tests.put(methodName, Arrays.asList(methodName, "failed", failure.getMessage())); } @Override public void testRunFinished(Result r) { String result = prettyFormatResults(tests.values()); System.out.println(StringEscapeUtils.unescapeJson(result)); } public String prettyFormatString(String string) { return ("\\\""+string+"\\\""); } public String prettyFormatExample(Collection<String> example) { return "["+example.stream().map(element -> prettyFormatString(element)).collect(Collectors.joining(",")) +"]"; } public String prettyFormatResults(Collection<Collection<String>> results) { return "["+results.stream().map(element -> prettyFormatExample(element)).collect(Collectors.joining(","))+"]"; } } EOF has_files?(request) ? files_of(request).merge('SubmissionTest.java' => test) : test end
format_errored_result(result)
click to toggle source
# File lib/test_hook.rb, line 31 def format_errored_result(result) Mumukit::ContentType::Markdown.highlighted_code :java, result.gsub(COMPILATION_ERROR_FLAG, '').gsub(/\/tmp\/tmp.*\/SubmissionTest/, "/tmp/SubmissionTest") end
post_process_file(file, result, status)
click to toggle source
Calls superclass method
# File lib/test_hook.rb, line 23 def post_process_file(file, result, status) if result.include? COMPILATION_ERROR_FLAG [format_errored_result(result), :errored] else super end end
tempfile_extension()
click to toggle source
# File lib/test_hook.rb, line 6 def tempfile_extension '.java' end
to_structured_result(result)
click to toggle source
# File lib/test_hook.rb, line 14 def to_structured_result(result) clean_json = result.strip.gsub("\n", '\n') transform(JSON.parse(clean_json)) end
transform(examples)
click to toggle source
# File lib/test_hook.rb, line 19 def transform(examples) examples.map { |e| [e[0], e[1].to_sym, e[2].try {|result| Mumukit::ContentType::Markdown.code result}] } end