cmdtest/t/CMDTEST_misc.rb
2014-09-07 22:57:54 +02:00

911 lines
19 KiB
Ruby

require "selftest_utils"
class CMDTEST_misc < Cmdtest::Testcase
include SelftestUtils
def test_path_with_spaces
ignore_file "with spaces/tmp-cmdtest-2/"
Dir.mkdir "with spaces"
chdir "with spaces" do
create_CMDTEST_foo [
"cmd 'echo.rb this is a line' do",
" stdout_equal ['this is a line']",
"end",
]
cmd_cmdtest do
stdout_equal [
"### echo.rb this is a line",
]
end
end
end
#----------------------------------------
# Ruby script called with "ruby -S"
#----------------------------------------
def test_ruby_script
create_CMDTEST_foo [
"cmd 'echo.rb this is a line' do",
" stdout_equal ['this is a line']",
"end",
]
cmd_cmdtest do
stdout_equal [
"### echo.rb this is a line",
]
end
end
#-----------------------------------
def test_actual_false_rb_will_give_error
create_CMDTEST_foo [
"cmd 'true.rb' do",
"end",
"",
"cmd 'false.rb' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### true.rb",
"### false.rb",
"--- ERROR: expected zero exit status, got 1",
]
exit_nonzero
end
end
#-----------------------------------
def test_actual_false_rb_will_give_error_2
create_CMDTEST_foo [
"cmd 'false.rb' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### false.rb",
"--- ERROR: expected zero exit status, got 1",
]
exit_nonzero
end
end
#-----------------------------------
def test_another_non_zero_exit_will_give_error
create_CMDTEST_foo [
"cmd 'exit.rb 18' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### exit.rb 18",
"--- ERROR: expected zero exit status, got 18",
]
exit_nonzero
end
end
#-----------------------------------
def test_actual_STDOUT_will_give_error
create_CMDTEST_foo [
"cmd 'echo.rb a line on stdout' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### echo.rb a line on stdout",
"--- ERROR: wrong stdout",
"--- actual: a line on stdout",
"--- expect: [[empty]]",
]
exit_nonzero
end
end
#-----------------------------------
def test_actual_STDERR_will_give_error
create_CMDTEST_foo [
"cmd 'echo.rb a line on stderr 1>&2' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### echo.rb a line on stderr 1>&2",
"--- ERROR: wrong stderr",
"--- actual: a line on stderr",
"--- expect: [[empty]]",
]
exit_nonzero
end
end
#-----------------------------------
def test_existing_files_is_OK
create_CMDTEST_foo [
"file_open('before1', 'w') {}",
"file_open('before2', 'w') {}",
"cmd 'true.rb' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### true.rb",
]
end
end
#-----------------------------------
def test_actual_created_file_will_give_error
create_CMDTEST_foo [
"cmd 'echo.rb content > a-new-file' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### echo.rb content > a-new-file",
"--- ERROR: created files",
'--- actual: ["a-new-file"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_several_actual_created_files_will_give_error
create_CMDTEST_foo [
"file_open('before1', 'w') {}",
"file_open('before2', 'w') {}",
"cmd 'echo.rb x > a && echo.rb x > b' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### echo.rb x > a && echo.rb x > b",
"--- ERROR: created files",
'--- actual: ["a", "b"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_actual_removed_file_will_give_error
create_CMDTEST_foo [
"file_open('before', 'w') {}",
"cmd 'rm.rb before' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### rm.rb before",
"--- ERROR: removed files",
'--- actual: ["before"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_several_actual_removed_files_will_give_error
create_CMDTEST_foo [
"file_open('before1', 'w') {}",
"file_open('before2', 'w') {}",
"file_open('before3', 'w') {}",
"cmd 'rm.rb before1 before2' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### rm.rb before1 before2",
"--- ERROR: removed files",
'--- actual: ["before1", "before2"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_actual_changed_files_will_give_error
# NOTE: order of writing/testing is important below
create_CMDTEST_foo <<'_END_'
file_open('changed1', 'w') {}
file_open('changed2', 'w') {}
file_open('script.rb', 'w') do |f|
f.puts 't1 = File.mtime("changed2")'
f.puts 'while File.mtime("changed2") == t1'
f.puts ' File.open("changed2", "w") {|f| f.puts 111 }'
f.puts ' File.open("changed1", "w") {|f| f.puts 111 }'
f.puts 'end'
end
cmd 'ruby script.rb' do
end
_END_
cmd_cmdtest do
stdout_equal [
"### ruby script.rb",
"--- ERROR: changed files",
'--- actual: ["changed1", "changed2"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_mix_of_actual_created_removed_files_will_give_error
create_CMDTEST_foo [
"file_open('before1', 'w') {}",
"file_open('before2', 'w') {}",
"file_open('before3', 'w') {}",
"cmd 'rm.rb before1 before2 && echo.rb x > a && echo.rb x > b' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### rm.rb before1 before2 && echo.rb x > a && echo.rb x > b",
"--- ERROR: created files",
'--- actual: ["a", "b"]',
"--- expect: []",
"--- ERROR: removed files",
'--- actual: ["before1", "before2"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_mix_of_all_errros
create_CMDTEST_foo <<'_END_'
file_open('before1', 'w') {}
file_open('before2', 'w') {}
file_open('before3', 'w') {}
file_open('script.rb', 'w') do |f|
f.puts 'File.unlink "before1"'
f.puts 'File.unlink "before2"'
f.puts 'File.open("a", "w") {}'
f.puts 'File.open("b", "w") {}'
f.puts 'STDOUT.puts [11,22,33]'
f.puts 'STDERR.puts [44,55,66]'
f.puts 'exit 39'
end
cmd 'ruby script.rb' do
end
_END_
cmd_cmdtest do
stdout_equal [
"### ruby script.rb",
"--- ERROR: expected zero exit status, got 39",
"--- ERROR: wrong stdout",
"--- actual: 11",
"--- 22",
"--- 33",
"--- expect: [[empty]]",
"--- ERROR: wrong stderr",
"--- actual: 44",
"--- 55",
"--- 66",
"--- expect: [[empty]]",
"--- ERROR: created files",
'--- actual: ["a", "b"]',
"--- expect: []",
"--- ERROR: removed files",
'--- actual: ["before1", "before2"]',
"--- expect: []",
]
exit_nonzero
end
end
#-----------------------------------
def test_removed_files
create_CMDTEST_foo [
"file_open('file1', 'w') {}",
"file_open('file2', 'w') {}",
"",
"cmd 'rm.rb file1' do",
" comment 'removed_files'",
" removed_files 'file1'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### removed_files",
]
end
end
#-----------------------------------
def test_FAILED_removed_files
create_CMDTEST_foo [
"file_open('file1', 'w') {}",
"file_open('file2', 'w') {}",
"",
"cmd 'true.rb' do",
" comment 'FAILED removed_files'",
" removed_files 'file1'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### FAILED removed_files",
"--- ERROR: removed files",
"--- actual: []",
'--- expect: ["file1"]',
]
exit_nonzero
end
end
#-----------------------------------
def test_changed_files
create_CMDTEST_foo [
"file_open('file1', 'w') {}",
"file_open('file2', 'w') {}",
"",
"cmd 'sleep.rb 1 && touch.rb file1' do",
" comment 'changed_files'",
" changed_files 'file1'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### changed_files",
]
end
end
#-----------------------------------
def test_FAILED_changed_files
create_CMDTEST_foo [
"file_open('file1', 'w') {}",
"file_open('file2', 'w') {}",
"",
"cmd 'true.rb' do",
" comment 'FAILED changed_files'",
" changed_files 'file1'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### FAILED changed_files",
"--- ERROR: changed files",
"--- actual: []",
'--- expect: ["file1"]',
]
exit_nonzero
end
end
#-----------------------------------
def test_created_files
create_CMDTEST_foo [
"file_open('file1', 'w') {}",
"file_open('file2', 'w') {}",
"",
"cmd 'touch.rb file3' do",
" comment 'created_files'",
" created_files 'file3'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### created_files",
]
end
end
#-----------------------------------
def test_FAILED_created_files
create_CMDTEST_foo [
"file_open('file1', 'w') {}",
"file_open('file2', 'w') {}",
"",
"cmd 'true.rb' do",
" comment 'FAILED created_files'",
" created_files 'file3'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### FAILED created_files",
"--- ERROR: created files",
"--- actual: []",
'--- expect: ["file3"]',
]
exit_nonzero
end
end
#-----------------------------------
def test_with_comment
create_CMDTEST_foo [
"cmd 'true.rb' do",
" comment 'this-is-the-comment'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### this-is-the-comment",
]
end
end
#-----------------------------------
def test_exit_nonzero
create_CMDTEST_foo [
"cmd 'exit.rb 33' do",
" comment 'exit_nonzero'",
" exit_nonzero",
"end",
]
cmd_cmdtest do
stdout_equal [
"### exit_nonzero",
]
end
end
#-----------------------------------
def test_FAILING_exit_nonzero
create_CMDTEST_foo [
"cmd 'exit.rb 0' do",
" comment 'failing exit_nonzero'",
" exit_nonzero",
"end",
]
cmd_cmdtest do
stdout_equal [
"### failing exit_nonzero",
"--- ERROR: expected nonzero exit status",
]
exit_nonzero
end
end
#-----------------------------------
def test_exit_status
create_CMDTEST_foo [
"cmd 'exit.rb 33' do",
" comment 'exit_status'",
" exit_status 33",
"end",
]
cmd_cmdtest do
stdout_equal [
"### exit_status",
]
end
end
#-----------------------------------
def test_FAILING_exit_status
create_CMDTEST_foo [
"cmd 'exit.rb 44' do",
" comment 'failing exit_status'",
" exit_status 33",
"end",
]
cmd_cmdtest do
stdout_equal [
"### failing exit_status",
"--- ERROR: expected 33 exit status, got 44",
]
exit_nonzero
end
end
#-----------------------------------
def test_stdout_equal_ONE_LINE
create_CMDTEST_foo [
"cmd 'lines.rb 11' do",
" comment 'stdout_equal'",
" stdout_equal '11\n'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_FAILING_stdout_equal_ONE_LINE
create_CMDTEST_foo [
"cmd 'lines.rb 22' do",
" comment 'stdout_equal'",
" stdout_equal '11\n'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 22",
"--- expect: 11",
]
exit_nonzero
end
end
#-----------------------------------
def test_stdout_equal_TWO_LINES
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal '11\n22\n'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_FAILING_stdout_equal_TWO_LINES
create_CMDTEST_foo [
"cmd 'lines.rb 33 44' do",
" comment 'stdout_equal'",
" stdout_equal '11\n22\n'",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 33",
"--- 44",
"--- expect: 11",
"--- 22",
]
exit_nonzero
end
end
#-----------------------------------
def test_stdout_equal_ARR_TWO_LINES
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal ['11', '22']",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_FAILING_stdout_equal_ARR_TWO_LINES
create_CMDTEST_foo [
"cmd 'lines.rb 33 44' do",
" comment 'stdout_equal'",
" stdout_equal ['11', '22']",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 33",
"--- 44",
"--- expect: 11",
"--- 22",
]
exit_nonzero
end
end
#-----------------------------------
def test_FAILING_stdout_equal_ARR_DIFFERENT_NR_LINES
create_CMDTEST_foo [
"cmd 'lines.rb 11 22 33' do",
" comment 'stdout_equal'",
" stdout_equal ['11', '22']",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 11",
"--- 22",
"--- 33",
"--- expect: 11",
"--- 22",
]
exit_nonzero
end
end
#-----------------------------------
def test_stdout_equal_REGEXP_ARGUMENT
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal /^22$/",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_stdout_equal_TWICE_REGEXP_ARGUMENT
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal /^22$/",
" stdout_equal /^11$/",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_FAILING_first_stdout_equal_twice_regexp_argument
create_CMDTEST_foo [
"cmd 'lines.rb 99 22' do",
" comment 'stdout_equal'",
" stdout_equal /^22$/",
" stdout_equal /^11$/",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 99",
"--- 22",
"--- expect: /^11$/",
]
exit_nonzero
end
end
#-----------------------------------
def test_FAILING_second_stdout_equal_twice_regexp_argument
create_CMDTEST_foo [
"cmd 'lines.rb 11 99' do",
" comment 'stdout_equal'",
" stdout_equal /^22$/",
" stdout_equal /^11$/",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 11",
"--- 99",
"--- expect: /^22$/",
]
exit_nonzero
end
end
#-----------------------------------
def test_FAILING_stdout_equal_REGEXP_ARGUMENT
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal /^\d+ \d+$/",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 11",
"--- 22",
"--- expect: /^\d+ \d+$/",
]
exit_nonzero
end
end
#-----------------------------------
def test_stdout_equal_ARR_REGEXP_ARGUMENT
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal ['11', /^22$/]",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_stdout_equal_ARR_REGEXP_ARGUMENT_II
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal ['11', /^\\d+$/]",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
]
end
end
#-----------------------------------
def test_FAILING_stdout_equal_ARR_REGEXP_ARGUMENT
create_CMDTEST_foo [
"cmd 'lines.rb 11 22' do",
" comment 'stdout_equal'",
" stdout_equal ['11', /^\d+ \d+$/]",
"end",
]
cmd_cmdtest do
stdout_equal [
"### stdout_equal",
"--- ERROR: wrong stdout",
"--- actual: 11",
"--- 22",
"--- expect: 11",
"--- /^\d+ \d+$/",
]
exit_nonzero
end
end
#======================================================================
#-----------------------------------
# symlinks in tree -- should work
# TODO: this test should be improved to actually trigger the difference
# between lstat/stat in "_update_hardlinks".
#
def test_symlinks_in_tree
return unless ! windows?
create_CMDTEST_foo [
"File.symlink 'non-existing', 'non-existing-link'",
"",
"file_open('existing', 'w') {}",
"file_symlink 'existing', 'existing-link'",
"",
"cmd 'true.rb' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### true.rb",
]
end
end
#-----------------------------------
def test_file_with_mtime_in_future
create_CMDTEST_foo [
"file_open('future-file', 'w') {}",
"future = Time.now + 86400",
"file_utime future, future, 'future-file'",
"",
"cmd 'true.rb' do",
"end",
]
cmd_cmdtest do
stdout_equal [
"### true.rb",
]
end
end
end