tests/tests_extensions.rb
author Jan Vrany <jan.vrany@labware.com>
Tue, 23 Jun 2020 12:16:02 +0100
changeset 294 0f3980335d2b
parent 175 c28460fb4b9d
child 334 eb15c224410b
permissions -rw-r--r--
CI: do not archive (and publish) i686 versions any more 32bit Intel is phasing out already - Microsoft is dropping i686 Windows 10, many Linux distros are dropping i686 architecture too. We still build and test 32bit versions, but no longer archive it nor publish it to save space and bandwidth. We might make it available again upon request.

require File.join(File.dirname(__FILE__), '..' , 'rakelib' , 'extensions')
require 'tmpdir'
require 'test/unit'

include RakeFileUtils

class RakeFileUtilsTests < Test::Unit::TestCase
  def test_which()    
    assert File.executable?( which('ls') )
    assert which('boguscommand').nil?
  end

  # A helper for `test_zip_01()`
  def test_zip_01_fmt(fmt)
    Dir.mktmpdir do | tmp |
      chdir File.join(File.dirname(__FILE__), '..') do
        archive = File.join(tmp, "rakelib#{fmt}")
        zip "rakelib", archive: archive
        assert File.exist? archive
        unzip archive
        assert File.exist? File.join(tmp, 'rakelib')
        assert File.exist? File.join(tmp, 'rakelib', 'extensions.rb')
        assert File.exist? File.join(tmp, 'rakelib', 'support.rb')
      end
    end
  end  

  def test_zip_01()    
    test_zip_01_fmt('.zip') if which 'zip'
    test_zip_01_fmt('.tar.bz2') if which 'tar' and which 'bzip2'
    test_zip_01_fmt('.tar.gz') if which 'tar' and which 'gzip'
  end

  def test_zip_02()     
    chdir File.join(File.dirname(__FILE__), '..') do        
      fmt = win32? ? '.zip' : '.tar.bz2'
      begin
        zip "rakelib"        
        assert(File.exist? "rakelib#{fmt}")
      ensure
        rm_f "rakelib#{fmt}" 
      end
    end
  end

  # A helper for `test_zip_03()`
  def test_zip_03_fmt(fmt)
    Dir.mktmpdir do | tmp |
      chdir File.join(File.dirname(__FILE__), '..') do
        archive = File.join(tmp, "rakelib#{fmt}")
        zip "rakelib", archive: archive, include: [ 'extensions.rb' ]
        assert File.exist? archive
        unzip archive
        assert File.exist? File.join(tmp, 'rakelib')
        assert File.exist? File.join(tmp, 'rakelib', 'extensions.rb')
        assert (not File.exist? File.join(tmp, 'rakelib', 'support.rb'))
      end
    end
  end  

  def test_zip_03()    
    test_zip_03_fmt('.zip') if which 'zip'
    test_zip_03_fmt('.tar.bz2') if which 'tar' and which 'bzip2'
    test_zip_03_fmt('.tar.gz') if which 'tar' and which 'gzip'
  end

  def test_rm_rf_ex() 
    def with_test_dir(&block) 
      Dir.mktmpdir do | tmp |
        chdir tmp do
          mkdir_p File.join("a", "b", "c")
          touch File.join("a", "aaa1.txt")
          touch File.join("a", "aaa2.txt")
          touch File.join("a", "aaa3.txt")
          touch File.join("a", "b", "bbb1.txt")
          touch File.join("a", "b", "bbb2.txt")
          touch File.join("a", "b", "bbb3.txt")
          touch File.join("a", "b", "c", "ccc1.txt")
          touch File.join("a", "b", "c", "ccc2.txt")
          touch File.join("a", "b", "c", "ccc3.txt")          
          yield block
        end
      end
    end    

    with_test_dir do
      rm_rf_ex "a"
      sh 'ls -lr'
      assert (not File.exists? "a")
    end

    with_test_dir do
      rm_rf_ex "a", exceptions: ['aaa1.txt']
      sh 'ls -lr'
      assert (    File.exists? "a")
      assert (    File.exists? (File.join("a", "aaa1.txt")))
      assert (not File.exists? (File.join("a", "aaa2.txt")))
      assert (not File.exists? (File.join("a", "aaa3.txt")))
      assert (not File.exists? (File.join("a", "b")))
    end

    with_test_dir do
      rm_rf_ex "a", exceptions: ['bogus']
      sh 'ls -lr'
      assert (not File.exists? "a")      
    end

    with_test_dir do
      rm_rf_ex "a", exceptions: [File.join('b' 'bogus')]
      sh 'ls -lr'
      assert (not File.exists? "a")      
    end

    with_test_dir do
      rm_rf_ex "a", exceptions: ['b']
      sh 'ls -lr'
      assert (    File.exists? "a")
      assert (not File.exists? (File.join("a", "aaa1.txt")))
      assert (not File.exists? (File.join("a", "aaa2.txt")))
      assert (not File.exists? (File.join("a", "aaa3.txt")))
      assert (    File.exists? (File.join("a", "b")))
      assert (    File.exists? (File.join("a", "b", "bbb1.txt")))
      assert (    File.exists? (File.join("a", "b", "bbb2.txt")))
      assert (    File.exists? (File.join("a", "b", "bbb3.txt")))
      assert (    File.exists? (File.join("a", "b", "c")))
      assert (    File.exists? (File.join("a", "b", "c", "ccc1.txt")))
      assert (    File.exists? (File.join("a", "b", "c", "ccc2.txt")))
      assert (    File.exists? (File.join("a", "b", "c", "ccc3.txt")))
    end

    with_test_dir do
      rm_rf_ex "a", exceptions: [File.join('b', 'bbb1.txt'), File.join('b', 'c', 'ccc3.txt') ]
      sh 'ls -lr'
      assert (    File.exists? "a")
      assert (not File.exists? (File.join("a", "aaa1.txt")))
      assert (not File.exists? (File.join("a", "aaa2.txt")))
      assert (not File.exists? (File.join("a", "aaa3.txt")))
      assert (    File.exists? (File.join("a", "b")))
      assert (    File.exists? (File.join("a", "b", "bbb1.txt")))
      assert (not File.exists? (File.join("a", "b", "bbb2.txt")))
      assert (not File.exists? (File.join("a", "b", "bbb3.txt")))
      assert (    File.exists? (File.join("a", "b", "c")))
      assert (not File.exists? (File.join("a", "b", "c", "ccc1.txt")))
      assert (not File.exists? (File.join("a", "b", "c", "ccc2.txt")))
      assert (    File.exists? (File.join("a", "b", "c", "ccc3.txt")))
    end
  end
end

if __FILE__ == $0
  require 'test/unit/ui/console/testrunner'
  Test::Unit::UI::Console::TestRunner.run(RakeFileUtilsTests)
end