Show More
Commit Description:
add option -A <opt> to box. This options allow more argument to be explicitly passed to the program...
Commit Description:
add option -A <opt> to box. This options allow more argument to be explicitly passed to the program
We have to use this because if the argument we wish to pass to the program is option (in -? format),
box will intepret it as its option and failed accordingly.
be noted that, by the definition of getopt, these options will be put after original argument
(check the code for more info)
References:
File last commit:
Show/Diff file:
Action:
test/engine_test.rb
| 152 lines
| 4.3 KiB
| text/x-ruby
| RubyLexer
|
|
r22 | require 'test/unit' | ||
require 'rubygems' | ||||
require 'mocha' | ||||
require File.join(File.dirname(__FILE__),'test_helper') | ||||
class GraderEngineTest < UnitTest.TestCase | ||||
def setup | ||||
@@lang_c = stub(:name => 'c', :ext => 'c') | ||||
@@lang_cpp = stub(:name => 'cpp', :ext => 'cpp') | ||||
@@lang_pas = stub(:name => 'pas', :ext => 'pas') | ||||
@config = Grader::Configuration.get_instance | ||||
@problem_test1 = stub(:id => 1, :name => 'test1', :full_score => 135) | ||||
@user_user1 = stub(:id => 1, :login => 'user1') | ||||
@engine = Grader::Engine.new | ||||
init_sandbox | ||||
end | ||||
def teardown | ||||
end | ||||
def test_grade_oldest_task_with_no_submission | ||||
Task.expects(:get_inqueue_and_change_status).returns(nil) | ||||
assert_equal nil, @engine.grade_oldest_task, 'should return nil when there is no task' | ||||
end | ||||
def test_normal_submission | ||||
submission = create_test1_submission_mock_from_file("test1_correct.c") | ||||
submission.expects(:graded_at=) | ||||
submission.expects(:points=).with(135) | ||||
submission.expects(:grader_comment=).with do |value| | ||||
/^PASSED/.match(value) | ||||
end | ||||
submission.expects(:compiler_message=).with('') | ||||
submission.expects(:save) | ||||
@engine.grade(submission) | ||||
end | ||||
def test_compile_error_submission | ||||
submission = create_test1_submission_mock_from_file("test1_compile_error.c") | ||||
submission.expects(:graded_at=) | ||||
submission.expects(:points=).with(0) | ||||
submission.expects(:grader_comment=).with('FAILED: compile error') | ||||
submission.expects(:compiler_message=) do |value| | ||||
/[Ee]rror/.match value | ||||
end | ||||
submission.expects(:save) | ||||
@engine.grade(submission) | ||||
end | ||||
def test_timeout_submission | ||||
@problem_test2 = stub(:id => 1, :name => 'test2', :full_score => 10) | ||||
@user_user1 = stub(:id => 1, :login => 'user1') | ||||
submission = create_submission_from_file(1, @user_user1, @problem_test2, | ||||
"test2_timeout.c") | ||||
submission.expects(:graded_at=) | ||||
submission.expects(:points=).with(0) | ||||
submission.expects(:grader_comment=).with do |value| | ||||
/^FAILED: TT$/.match value | ||||
end | ||||
submission.expects(:compiler_message=).with('') | ||||
submission.expects(:save) | ||||
@engine.grade(submission) | ||||
end | ||||
def test_timeout_submission_running_one_and_a_half_second | ||||
|
r23 | @problem_test2 = stub(:id => 1, :name => 'test2', :full_score => 20) | ||
|
r22 | @user_user1 = stub(:id => 1, :login => 'user1') | ||
submission = create_submission_from_file(1, @user_user1, @problem_test2, | ||||
"test2_1-5sec.c") | ||||
submission.expects(:graded_at=) | ||||
|
r23 | submission.expects(:points=).with(10) | ||
|
r22 | submission.expects(:grader_comment=).with do |value| | ||
/^FAILED: TP$/.match value | ||||
end | ||||
submission.expects(:compiler_message=).with('') | ||||
submission.expects(:save) | ||||
@engine.grade(submission) | ||||
end | ||||
def test_grade_oldest_task | ||||
# mock submission | ||||
submission = create_test1_submission_mock_from_file("test1_correct.c") | ||||
submission.expects(:graded_at=) | ||||
submission.expects(:points=).with(135) | ||||
submission.expects(:grader_comment=).with do |value| | ||||
/^PASSED/.match(value) | ||||
end | ||||
submission.expects(:compiler_message=).with('') | ||||
submission.expects(:save) | ||||
# mock task | ||||
task = stub(:id => 1, :submission_id => submission.id) | ||||
Task.expects(:get_inqueue_and_change_status).returns(task) | ||||
task.expects(:status_complete!) | ||||
# mock Submission | ||||
Submission.expects(:find).with(task.submission_id).returns(submission) | ||||
@engine.grade_oldest_task | ||||
end | ||||
def test_grade_oldest_task_with_grader_process | ||||
grader_process = stub | ||||
grader_process.expects(:report_active) | ||||
@engine = Grader::Engine.new(grader_process) | ||||
test_grade_oldest_task | ||||
end | ||||
protected | ||||
def clear_sandbox | ||||
clear_cmd = "rm -rf #{@config.test_sandbox_dir}/*" | ||||
system(clear_cmd) | ||||
end | ||||
def init_sandbox | ||||
clear_sandbox | ||||
Dir.mkdir @config.user_result_dir | ||||
cp_cmd = "cp -R #{@config.test_data_dir}/ev #{@config.test_sandbox_dir}" | ||||
system(cp_cmd) | ||||
end | ||||
def create_submission_from_file(id, user, problem, source_fname, language = @@lang_c) | ||||
source = File.open(@config.test_data_dir + "/" + source_fname).read | ||||
stub(:id => id, :user => user, :problem => problem, | ||||
:source => source, :language => language) | ||||
end | ||||
def create_test1_submission_mock_from_file(source_fname) | ||||
create_submission_from_file(1, @user_user1, @problem_test1, source_fname) | ||||
end | ||||
end | ||||