| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  | require 'test_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-15 23:23:48 +08:00
										 |  |  | class ZipFileExtractTest < MiniTest::Test | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   include CommonZipFileFixture | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |   EXTRACTED_FILENAME = 'test/data/generated/extEntry' | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   ENTRY_TO_EXTRACT, *REMAINING_ENTRIES = TEST_ZIP.entry_names.reverse | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def setup | 
					
						
							|  |  |  |     super | 
					
						
							| 
									
										
										
										
											2014-02-07 07:00:38 +08:00
										 |  |  |     ::File.delete(EXTRACTED_FILENAME) if ::File.exist?(EXTRACTED_FILENAME) | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_extract | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     ::Zip::File.open(TEST_ZIP.zip_name) do |zf| | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |       zf.extract(ENTRY_TO_EXTRACT, EXTRACTED_FILENAME) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 07:00:38 +08:00
										 |  |  |       assert(File.exist?(EXTRACTED_FILENAME)) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:16:06 +08:00
										 |  |  |       AssertEntry.assert_contents(EXTRACTED_FILENAME, | 
					
						
							|  |  |  |                                   zf.get_input_stream(ENTRY_TO_EXTRACT) { |is| is.read }) | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       ::File.unlink(EXTRACTED_FILENAME) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       entry = zf.get_entry(ENTRY_TO_EXTRACT) | 
					
						
							|  |  |  |       entry.extract(EXTRACTED_FILENAME) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-07 07:00:38 +08:00
										 |  |  |       assert(File.exist?(EXTRACTED_FILENAME)) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:16:06 +08:00
										 |  |  |       AssertEntry.assert_contents(EXTRACTED_FILENAME, | 
					
						
							|  |  |  |                                   entry.get_input_stream() { |is| is.read }) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_extractExists | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |     writtenText = 'written text' | 
					
						
							|  |  |  |     ::File.open(EXTRACTED_FILENAME, 'w') { |f| f.write(writtenText) } | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     assert_raises(::Zip::DestinationFileExistsError) do | 
					
						
							|  |  |  |       ::Zip::File.open(TEST_ZIP.zip_name) do |zf| | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |         zf.extract(zf.entries.first, EXTRACTED_FILENAME) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |     File.open(EXTRACTED_FILENAME, 'r') do |f| | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |       assert_equal(writtenText, f.read) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_extractExistsOverwrite | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |     writtenText = 'written text' | 
					
						
							|  |  |  |     ::File.open(EXTRACTED_FILENAME, 'w') { |f| f.write(writtenText) } | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     gotCalledCorrectly = false | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     ::Zip::File.open(TEST_ZIP.zip_name) do |zf| | 
					
						
							|  |  |  |       zf.extract(zf.entries.first, EXTRACTED_FILENAME) do |entry, extractLoc| | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |         gotCalledCorrectly = zf.entries.first == entry && | 
					
						
							|  |  |  |             extractLoc == EXTRACTED_FILENAME | 
					
						
							|  |  |  |         true | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     assert(gotCalledCorrectly) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |     ::File.open(EXTRACTED_FILENAME, 'r') do |f| | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |       assert(writtenText != f.read) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_extractNonEntry | 
					
						
							|  |  |  |     zf = ::Zip::File.new(TEST_ZIP.zip_name) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |     assert_raises(Errno::ENOENT) { zf.extract('nonExistingEntry', 'nonExistingEntry') } | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   ensure | 
					
						
							|  |  |  |     zf.close if zf | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_extractNonEntry2 | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |     outFile = 'outfile' | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     assert_raises(Errno::ENOENT) do | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |       zf = ::Zip::File.new(TEST_ZIP.zip_name) | 
					
						
							| 
									
										
										
										
											2015-03-21 16:27:44 +08:00
										 |  |  |       nonEntry = 'hotdog-diddelidoo' | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |       assert(!zf.entries.include?(nonEntry)) | 
					
						
							|  |  |  |       zf.extract(nonEntry, outFile) | 
					
						
							|  |  |  |       zf.close | 
					
						
							| 
									
										
										
										
											2015-03-21 16:10:37 +08:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-02-07 07:00:38 +08:00
										 |  |  |     assert(!File.exist?(outFile)) | 
					
						
							| 
									
										
										
										
											2014-01-21 05:31:06 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | end |