diff --git a/config/env_exam.rb.SAMPLE b/config/env_exam.rb.SAMPLE --- a/config/env_exam.rb.SAMPLE +++ b/config/env_exam.rb.SAMPLE @@ -16,5 +16,8 @@ config.test_request_output_base_dir = RAILS_ROOT + "/data/test_request/output" config.test_request_problem_templates_dir = config.problems_dir + "/test_request" + # change this if you want the path on the output to be translated + config.test_request_org_output_base_dir = config.test_request_output_base_dir + config.comment_report_style = :short end diff --git a/config/env_grading.rb.SAMPLE b/config/env_grading.rb.SAMPLE --- a/config/env_grading.rb.SAMPLE +++ b/config/env_grading.rb.SAMPLE @@ -14,6 +14,9 @@ config.test_request_input_base_dir = RAILS_ROOT + "/data/test_request/input" config.test_request_output_base_dir = RAILS_ROOT + "/data/test_request/output" config.test_request_problem_templates_dir = config.problems_dir + "/test_request" + + # change this if you want the path on the output to be translated + config.test_request_org_output_base_dir = config.test_request_output_base_dir config.comment_report_style = :full end diff --git a/config/env_test.rb.SAMPLE b/config/env_test.rb.SAMPLE --- a/config/env_test.rb.SAMPLE +++ b/config/env_test.rb.SAMPLE @@ -17,6 +17,9 @@ config.test_request_output_base_dir = GRADER_ROOT + "/test/sandbox/test_request/output" config.test_request_problem_templates_dir = GRADER_ROOT + "/test/data/test_request/problems" + # change this if you want the path on the output to be translated + config.test_request_org_output_base_dir = config.test_request_output_base_dir + # # These options are for testing # diff --git a/lib/configuration.rb b/lib/configuration.rb --- a/lib/configuration.rb +++ b/lib/configuration.rb @@ -33,6 +33,10 @@ attr_accessor :test_request_output_base_dir attr_accessor :test_request_problem_templates_dir + # this is for linking output from test request + # TODO: find a cleaner way to do this. + attr_accessor :test_request_org_output_base_dir + # Comment received from the grading script will be filtered # through Configuration#report_comment. How this method behave # depends on this option; right now only two formats, :short and diff --git a/lib/test_request_helper.rb b/lib/test_request_helper.rb --- a/lib/test_request_helper.rb +++ b/lib/test_request_helper.rb @@ -5,6 +5,12 @@ module Grader + def self.translate_filepath(filename, marker, new_base_path) + p = filename.index(marker) + end_path = filename[(p+marker.length)..-1] + return new_base_path + end_path + end + def self.link_or_copy(src, des) begin FileUtils.ln_s(src, des) @@ -104,8 +110,15 @@ } end + def translate_input_filename(filename) + return Grader::translate_filepath(filename, + 'input', + @config.test_request_input_base_dir) + end + def link_input_file(test_request, problem_home) - input_fname = "#{test_request.input_file_name}" + input_fname = translate_input_filename(test_request.input_file_name) + if !File.exists?(input_fname) raise "Test Request: input file not found." end @@ -214,8 +227,9 @@ def save_result(test_request,result) if result[:output_file_name]!=nil - test_request.output_file_name = link_output_file(test_request, - result[:output_file_name]) + org_filename = link_output_file(test_request, + result[:output_file_name]) + test_request.output_file_name = translate_output_filename(org_filename) end test_request.graded_at = Time.now test_request.compiler_message = (result[:cmp_msg] or '') @@ -232,6 +246,12 @@ end protected + def translate_output_filename(filename) + return Grader::translate_filepath(filename, + 'output', + @config.test_request_org_output_base_dir) + end + def link_output_file(test_request, fname) target_file_name = random_output_file_name(test_request.user, test_request.problem)