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