summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rake/test_rake_file_utils.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/rake/test_rake_file_utils.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/rake/test_rake_file_utils.rb')
-rw-r--r--jni/ruby/test/rake/test_rake_file_utils.rb309
1 files changed, 309 insertions, 0 deletions
diff --git a/jni/ruby/test/rake/test_rake_file_utils.rb b/jni/ruby/test/rake/test_rake_file_utils.rb
new file mode 100644
index 0000000..37d33dc
--- /dev/null
+++ b/jni/ruby/test/rake/test_rake_file_utils.rb
@@ -0,0 +1,309 @@
+require File.expand_path('../helper', __FILE__)
+require 'fileutils'
+require 'stringio'
+
+class TestRakeFileUtils < Rake::TestCase
+
+ def teardown
+ FileUtils::LN_SUPPORTED[0] = true
+ RakeFileUtils.verbose_flag = Rake::FileUtilsExt::DEFAULT
+
+ super
+ end
+
+ def test_rm_one_file
+ create_file("a")
+ FileUtils.rm_rf "a"
+ refute File.exist?("a")
+ end
+
+ def test_rm_two_files
+ create_file("a")
+ create_file("b")
+ FileUtils.rm_rf ["a", "b"]
+ refute File.exist?("a")
+ refute File.exist?("b")
+ end
+
+ def test_rm_filelist
+ list = Rake::FileList.new << "a" << "b"
+ list.each { |fn| create_file(fn) }
+ FileUtils.rm_r list
+ refute File.exist?("a")
+ refute File.exist?("b")
+ end
+
+ def test_ln
+ open("a", "w") { |f| f.puts "TEST_LN" }
+
+ Rake::FileUtilsExt.safe_ln("a", "b", :verbose => false)
+
+ assert_equal "TEST_LN\n", File.read('b')
+ end
+
+ class BadLink
+ include Rake::FileUtilsExt
+ attr_reader :cp_args
+
+ def initialize(klass)
+ @failure_class = klass
+ end
+
+ def cp(*args)
+ @cp_args = args
+ end
+
+ def ln(*args)
+ fail @failure_class, "ln not supported"
+ end
+
+ public :safe_ln
+ end
+
+ def test_safe_ln_failover_to_cp_on_standard_error
+ FileUtils::LN_SUPPORTED[0] = true
+ c = BadLink.new(StandardError)
+ c.safe_ln "a", "b"
+ assert_equal ['a', 'b'], c.cp_args
+ c.safe_ln "x", "y"
+ assert_equal ['x', 'y'], c.cp_args
+ end
+
+ def test_safe_ln_failover_to_cp_on_not_implemented_error
+ FileUtils::LN_SUPPORTED[0] = true
+ c = BadLink.new(NotImplementedError)
+ c.safe_ln "a", "b"
+ assert_equal ['a', 'b'], c.cp_args
+ end
+
+ def test_safe_ln_fails_on_script_error
+ FileUtils::LN_SUPPORTED[0] = true
+ c = BadLink.new(ScriptError)
+ assert_raises(ScriptError) do c.safe_ln "a", "b" end
+ end
+
+ def test_verbose
+ verbose true
+ assert_equal true, verbose
+ verbose false
+ assert_equal false, verbose
+ verbose(true) {
+ assert_equal true, verbose
+ }
+ assert_equal false, verbose
+ end
+
+ def test_nowrite
+ nowrite true
+ assert_equal true, nowrite
+ nowrite false
+ assert_equal false, nowrite
+ nowrite(true) {
+ assert_equal true, nowrite
+ }
+ assert_equal false, nowrite
+ end
+
+ def test_file_utils_methods_are_available_at_top_level
+ create_file("a")
+
+ capture_io do
+ rm_rf "a"
+ end
+
+ refute File.exist?("a")
+ end
+
+ def test_fileutils_methods_dont_leak
+ obj = Object.new
+ assert_raises(NoMethodError) { obj.copy } # from FileUtils
+ assert_raises(NoMethodError) { obj.ruby "-v" } # from RubyFileUtils
+ end
+
+ def test_sh
+ shellcommand
+
+ verbose(false) { sh %{#{Rake::TestCase::RUBY} shellcommand.rb} }
+ assert true, "should not fail"
+ end
+
+ def test_sh_with_a_single_string_argument
+ check_expansion
+
+ ENV['RAKE_TEST_SH'] = 'someval'
+ verbose(false) {
+ sh %{#{RUBY} check_expansion.rb #{env_var} someval}
+ }
+ end
+
+ def test_sh_with_multiple_arguments
+ check_no_expansion
+ ENV['RAKE_TEST_SH'] = 'someval'
+
+ verbose(false) {
+ sh RUBY, 'check_no_expansion.rb', env_var, 'someval'
+ }
+ end
+
+ def test_sh_failure
+ shellcommand
+
+ assert_raises(RuntimeError) {
+ verbose(false) { sh %{#{RUBY} shellcommand.rb 1} }
+ }
+ end
+
+ def test_sh_special_handling
+ shellcommand
+
+ count = 0
+ verbose(false) {
+ sh(%{#{RUBY} shellcommand.rb}) do |ok, res|
+ assert(ok)
+ assert_equal 0, res.exitstatus
+ count += 1
+ end
+ sh(%{#{RUBY} shellcommand.rb 1}) do |ok, res|
+ assert(!ok)
+ assert_equal 1, res.exitstatus
+ count += 1
+ end
+ }
+ assert_equal 2, count, "Block count should be 2"
+ end
+
+ def test_sh_noop
+ shellcommand
+
+ verbose(false) { sh %{shellcommand.rb 1}, :noop=>true }
+ assert true, "should not fail"
+ end
+
+ def test_sh_bad_option
+ shellcommand
+
+ ex = assert_raises(ArgumentError) {
+ verbose(false) { sh %{shellcommand.rb}, :bad_option=>true }
+ }
+ assert_match(/bad_option/, ex.message)
+ end
+
+ def test_sh_verbose
+ shellcommand
+
+ _, err = capture_io do
+ verbose(true) {
+ sh %{shellcommand.rb}, :noop=>true
+ }
+ end
+
+ assert_equal "shellcommand.rb\n", err
+ end
+
+ def test_sh_verbose_false
+ shellcommand
+
+ _, err = capture_io do
+ verbose(false) {
+ sh %{shellcommand.rb}, :noop=>true
+ }
+ end
+
+ assert_equal '', err
+ end
+
+ def test_sh_verbose_flag_nil
+ shellcommand
+
+ RakeFileUtils.verbose_flag = nil
+
+ assert_silent do
+ sh %{shellcommand.rb}, :noop=>true
+ end
+ end
+
+ def test_ruby_with_a_single_string_argument
+ check_expansion
+
+ ENV['RAKE_TEST_SH'] = 'someval'
+
+ verbose(false) {
+ replace_ruby {
+ ruby %{check_expansion.rb #{env_var} someval}
+ }
+ }
+ end
+
+ def test_ruby_with_multiple_arguments
+ check_no_expansion
+
+ ENV['RAKE_TEST_SH'] = 'someval'
+ verbose(false) {
+ replace_ruby {
+ ruby 'check_no_expansion.rb', env_var, 'someval'
+ }
+ }
+ end
+
+ def test_split_all
+ assert_equal ['a'], Rake::FileUtilsExt.split_all('a')
+ assert_equal ['..'], Rake::FileUtilsExt.split_all('..')
+ assert_equal ['/'], Rake::FileUtilsExt.split_all('/')
+ assert_equal ['a', 'b'], Rake::FileUtilsExt.split_all('a/b')
+ assert_equal ['/', 'a', 'b'], Rake::FileUtilsExt.split_all('/a/b')
+ assert_equal ['..', 'a', 'b'], Rake::FileUtilsExt.split_all('../a/b')
+ end
+
+ def command(name, text)
+ open name, 'w', 0750 do |io|
+ io << text
+ end
+ end
+
+ def check_no_expansion
+ command 'check_no_expansion.rb', <<-CHECK_EXPANSION
+if ARGV[0] != ARGV[1]
+ exit 0
+else
+ exit 1
+end
+ CHECK_EXPANSION
+ end
+
+ def check_expansion
+ command 'check_expansion.rb', <<-CHECK_EXPANSION
+if ARGV[0] != ARGV[1]
+ exit 1
+else
+ exit 0
+end
+ CHECK_EXPANSION
+ end
+
+ def replace_ruby
+ ruby = FileUtils::RUBY
+ FileUtils.send :remove_const, :RUBY
+ FileUtils.const_set :RUBY, RUBY
+ yield
+ ensure
+ FileUtils.send :remove_const, :RUBY
+ FileUtils.const_set:RUBY, ruby
+ end
+
+ def shellcommand
+ command 'shellcommand.rb', <<-SHELLCOMMAND
+#!/usr/bin/env ruby
+
+exit((ARGV[0] || "0").to_i)
+ SHELLCOMMAND
+ end
+
+ def env_var
+ windows? ? '%RAKE_TEST_SH%' : '$RAKE_TEST_SH'
+ end
+
+ def windows?
+ ! File::ALT_SEPARATOR.nil?
+ end
+
+end