84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| require 'test_helper'
 | |
| 
 | |
| class ZipFileExtractTest < MiniTest::Test
 | |
|   include CommonZipFileFixture
 | |
|   EXTRACTED_FILENAME = 'test/data/generated/extEntry'
 | |
|   ENTRY_TO_EXTRACT, *REMAINING_ENTRIES = TEST_ZIP.entry_names.reverse
 | |
| 
 | |
|   def setup
 | |
|     super
 | |
|     ::File.delete(EXTRACTED_FILENAME) if ::File.exist?(EXTRACTED_FILENAME)
 | |
|   end
 | |
| 
 | |
|   def test_extract
 | |
|     ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
 | |
|       zf.extract(ENTRY_TO_EXTRACT, EXTRACTED_FILENAME)
 | |
| 
 | |
|       assert(File.exist?(EXTRACTED_FILENAME))
 | |
|       AssertEntry.assert_contents(EXTRACTED_FILENAME,
 | |
|                                   zf.get_input_stream(ENTRY_TO_EXTRACT) { |is| is.read })
 | |
| 
 | |
|       ::File.unlink(EXTRACTED_FILENAME)
 | |
| 
 | |
|       entry = zf.get_entry(ENTRY_TO_EXTRACT)
 | |
|       entry.extract(EXTRACTED_FILENAME)
 | |
| 
 | |
|       assert(File.exist?(EXTRACTED_FILENAME))
 | |
|       AssertEntry.assert_contents(EXTRACTED_FILENAME,
 | |
|                                   entry.get_input_stream() { |is| is.read })
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_extractExists
 | |
|     writtenText = 'written text'
 | |
|     ::File.open(EXTRACTED_FILENAME, 'w') { |f| f.write(writtenText) }
 | |
| 
 | |
|     assert_raises(::Zip::DestinationFileExistsError) do
 | |
|       ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
 | |
|         zf.extract(zf.entries.first, EXTRACTED_FILENAME)
 | |
|       end
 | |
|     end
 | |
|     File.open(EXTRACTED_FILENAME, 'r') do |f|
 | |
|       assert_equal(writtenText, f.read)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_extractExistsOverwrite
 | |
|     writtenText = 'written text'
 | |
|     ::File.open(EXTRACTED_FILENAME, 'w') { |f| f.write(writtenText) }
 | |
| 
 | |
|     gotCalledCorrectly = false
 | |
|     ::Zip::File.open(TEST_ZIP.zip_name) do |zf|
 | |
|       zf.extract(zf.entries.first, EXTRACTED_FILENAME) do |entry, extractLoc|
 | |
|         gotCalledCorrectly = zf.entries.first == entry &&
 | |
|             extractLoc == EXTRACTED_FILENAME
 | |
|         true
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     assert(gotCalledCorrectly)
 | |
|     ::File.open(EXTRACTED_FILENAME, 'r') do |f|
 | |
|       assert(writtenText != f.read)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_extractNonEntry
 | |
|     zf = ::Zip::File.new(TEST_ZIP.zip_name)
 | |
|     assert_raises(Errno::ENOENT) { zf.extract('nonExistingEntry', 'nonExistingEntry') }
 | |
|   ensure
 | |
|     zf.close if zf
 | |
|   end
 | |
| 
 | |
|   def test_extractNonEntry2
 | |
|     outFile = 'outfile'
 | |
|     assert_raises(Errno::ENOENT) do
 | |
|       zf = ::Zip::File.new(TEST_ZIP.zip_name)
 | |
|       nonEntry = 'hotdog-diddelidoo'
 | |
|       assert(!zf.entries.include?(nonEntry))
 | |
|       zf.extract(nonEntry, outFile)
 | |
|       zf.close
 | |
|     end
 | |
|     assert(!File.exist?(outFile))
 | |
|   end
 | |
| end
 |