Skip to content

Commit

Permalink
Merge pull request rubyzip#124 from rubyzip/minitest-refactoring
Browse files Browse the repository at this point in the history
Tests refactoring
  • Loading branch information
simonoff committed Jan 20, 2014
2 parents 9455281 + 1e03c13 commit 4f9b642
Show file tree
Hide file tree
Showing 39 changed files with 3,370 additions and 3,418 deletions.
7 changes: 0 additions & 7 deletions test/alltests.rb → .simplecov
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#!/usr/bin/env ruby
require 'simplecov'
require 'coveralls'

SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
Expand All @@ -9,8 +7,3 @@
SimpleCov.start do
add_filter '/test'
end
::Dir.chdir File.join(File.dirname(__FILE__))

require 'ioextrastest'
require 'ziptest'
require 'zipfilesystemtest'
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ gemspec
gem 'rake'
gem 'coveralls', :require => false
gem 'pry'
gem 'minitest'
18 changes: 9 additions & 9 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ require 'rake/testtask'
task :default => :test

Rake::TestTask.new(:test) do |test|
test.libs << File.join(File.dirname(__FILE__), 'lib')
test.libs << File.join(File.dirname(__FILE__), 'test')
test.pattern = File.join(File.dirname(__FILE__), 'test/alltests.rb')
test.libs << 'lib'
test.libs << 'test'
test.pattern = 'test/**/*_test.rb'
test.verbose = true
end

Rake::TestTask.new(:zip64_full_test) do |test|
test.libs << File.join(File.dirname(__FILE__), 'lib')
test.libs << File.join(File.dirname(__FILE__), 'test')
test.pattern = File.join(File.dirname(__FILE__), 'test/zip64_full_test.rb')
test.verbose = true
end
#Rake::TestTask.new(:zip64_full_test) do |test|
# test.libs << File.join(File.dirname(__FILE__), 'lib')
# test.libs << File.join(File.dirname(__FILE__), 'test')
# test.pattern = File.join(File.dirname(__FILE__), 'test/zip64_full_test.rb')
# test.verbose = true
#end

11 changes: 0 additions & 11 deletions test/.cvsignore

This file was deleted.

64 changes: 64 additions & 0 deletions test/basic_zip_file_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
require 'test_helper'

class BasicZipFileTest < MiniTest::Unit::TestCase
include AssertEntry

def setup
@zip_file = ::Zip::File.new(TestZipFile::TEST_ZIP2.zip_name)
@testEntryNameIndex=0
end

def test_entries
assert_equal(TestZipFile::TEST_ZIP2.entry_names.sort,
@zip_file.entries.entries.sort.map { |e| e.name })
end

def test_each
count = 0
visited = {}
@zip_file.each {
|entry|
assert(TestZipFile::TEST_ZIP2.entry_names.include?(entry.name))
assert(!visited.include?(entry.name))
visited[entry.name] = nil
count = count.succ
}
assert_equal(TestZipFile::TEST_ZIP2.entry_names.length, count)
end

def test_foreach
count = 0
visited = {}
::Zip::File.foreach(TestZipFile::TEST_ZIP2.zip_name) {
|entry|
assert(TestZipFile::TEST_ZIP2.entry_names.include?(entry.name))
assert(!visited.include?(entry.name))
visited[entry.name] = nil
count = count.succ
}
assert_equal(TestZipFile::TEST_ZIP2.entry_names.length, count)
end

def test_get_input_stream
count = 0
visited = {}
@zip_file.each do |entry|
assert_entry(entry.name, @zip_file.get_input_stream(entry), entry.name)
assert(!visited.include?(entry.name))
visited[entry.name] = nil
count = count.succ
end
assert_equal(TestZipFile::TEST_ZIP2.entry_names.length, count)
end

def test_get_input_streamBlock
fileAndEntryName = @zip_file.entries.first.name
@zip_file.get_input_stream(fileAndEntryName) {
|zis|
assert_entryContentsForStream(fileAndEntryName,
zis,
fileAndEntryName)
}
end

end
73 changes: 73 additions & 0 deletions test/central_directory_entry_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
require 'test_helper'

class ZipCentralDirectoryEntryTest < MiniTest::Unit::TestCase

def test_read_from_stream
File.open("test/data/testDirectory.bin", "rb") {
|file|
entry = ::Zip::Entry.read_c_dir_entry(file)

assert_equal("longAscii.txt", entry.name)
assert_equal(::Zip::Entry::DEFLATED, entry.compression_method)
assert_equal(106490, entry.size)
assert_equal(3784, entry.compressed_size)
assert_equal(0xfcd1799c, entry.crc)
assert_equal("", entry.comment)

entry = ::Zip::Entry.read_c_dir_entry(file)
assert_equal("empty.txt", entry.name)
assert_equal(::Zip::Entry::STORED, entry.compression_method)
assert_equal(0, entry.size)
assert_equal(0, entry.compressed_size)
assert_equal(0x0, entry.crc)
assert_equal("", entry.comment)

entry = ::Zip::Entry.read_c_dir_entry(file)
assert_equal("short.txt", entry.name)
assert_equal(::Zip::Entry::STORED, entry.compression_method)
assert_equal(6, entry.size)
assert_equal(6, entry.compressed_size)
assert_equal(0xbb76fe69, entry.crc)
assert_equal("", entry.comment)

entry = ::Zip::Entry.read_c_dir_entry(file)
assert_equal("longBinary.bin", entry.name)
assert_equal(::Zip::Entry::DEFLATED, entry.compression_method)
assert_equal(1000024, entry.size)
assert_equal(70847, entry.compressed_size)
assert_equal(0x10da7d59, entry.crc)
assert_equal('', entry.comment)

entry = ::Zip::Entry.read_c_dir_entry(file)
assert_equal(nil, entry)
# Fields that are not check by this test:
# version made by 2 bytes
# version needed to extract 2 bytes
# general purpose bit flag 2 bytes
# last mod file time 2 bytes
# last mod file date 2 bytes
# compressed size 4 bytes
# uncompressed size 4 bytes
# disk number start 2 bytes
# internal file attributes 2 bytes
# external file attributes 4 bytes
# relative offset of local header 4 bytes

# file name (variable size)
# extra field (variable size)
# file comment (variable size)

}
end

def test_ReadEntryFromTruncatedZipFile
fragment=""
File.open("test/data/testDirectory.bin") { |f| fragment = f.read(12) } # cdir entry header is at least 46 bytes
fragment.extend(IOizeString)
entry = ::Zip::Entry.new
entry.read_c_dir_entry(fragment)
fail "ZipError expected"
rescue ::Zip::ZipError
end

end
99 changes: 99 additions & 0 deletions test/central_directory_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
require 'test_helper'

class ZipCentralDirectoryTest < MiniTest::Unit::TestCase

def test_read_from_stream
::File.open(TestZipFile::TEST_ZIP2.zip_name, "rb") {
|zipFile|
cdir = ::Zip::CentralDirectory.read_from_stream(zipFile)

assert_equal(TestZipFile::TEST_ZIP2.entry_names.size, cdir.size)
assert(cdir.entries.sort.compare_enumerables(TestZipFile::TEST_ZIP2.entry_names.sort) {
|cdirEntry, testEntryName|
cdirEntry.name == testEntryName
})
assert_equal(TestZipFile::TEST_ZIP2.comment, cdir.comment)
}
end

def test_readFromInvalidStream
File.open("test/data/file2.txt", "rb") {
|zipFile|
cdir = ::Zip::CentralDirectory.new
cdir.read_from_stream(zipFile)
}
fail "ZipError expected!"
rescue ::Zip::ZipError
end

def test_ReadFromTruncatedZipFile
fragment=""
File.open("test/data/testDirectory.bin", "rb") { |f| fragment = f.read }
fragment.slice!(12) # removed part of first cdir entry. eocd structure still complete
fragment.extend(IOizeString)
entry = ::Zip::CentralDirectory.new
entry.read_from_stream(fragment)
fail "ZipError expected"
rescue ::Zip::ZipError
end

def test_write_to_stream
entries = [::Zip::Entry.new("file.zip", "flimse", "myComment", "somethingExtra"),
::Zip::Entry.new("file.zip", "secondEntryName"),
::Zip::Entry.new("file.zip", "lastEntry.txt", "Has a comment too")]
cdir = ::Zip::CentralDirectory.new(entries, "my zip comment")
File.open("test/data/generated/cdirtest.bin", "wb") { |f| cdir.write_to_stream(f) }
cdirReadback = ::Zip::CentralDirectory.new
File.open("test/data/generated/cdirtest.bin", "rb") { |f| cdirReadback.read_from_stream(f) }

assert_equal(cdir.entries.sort, cdirReadback.entries.sort)
end

def test_write64_to_stream
entries = [::Zip::Entry.new("file.zip", "file1-little", "comment1", "", 200, 101, ::Zip::Entry::STORED, 200),
::Zip::Entry.new("file.zip", "file2-big", "comment2", "", 18000000000, 102, ::Zip::Entry::DEFLATED, 20000000000),
::Zip::Entry.new("file.zip", "file3-alsobig", "comment3", "", 15000000000, 103, ::Zip::Entry::DEFLATED, 21000000000),
::Zip::Entry.new("file.zip", "file4-little", "comment4", "", 100, 104, ::Zip::Entry::DEFLATED, 121)]
[0, 250, 18000000300, 33000000350].each_with_index do |offset, index|
entries[index].local_header_offset = offset
end
cdir = ::Zip::CentralDirectory.new(entries, "zip comment")
File.open("test/data/generated/cdir64test.bin", "wb") { |f| cdir.write_to_stream(f) }
cdirReadback = ::Zip::CentralDirectory.new
File.open("test/data/generated/cdir64test.bin", "rb") { |f| cdirReadback.read_from_stream(f) }

assert_equal(cdir.entries.sort, cdirReadback.entries.sort)
assert_equal(::Zip::VERSION_NEEDED_TO_EXTRACT_ZIP64, cdirReadback.instance_variable_get(:@version_needed_for_extract))
end

def test_equality
cdir1 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
"somethingExtra"),
::Zip::Entry.new("file.zip", "secondEntryName"),
::Zip::Entry.new("file.zip", "lastEntry.txt")],
"my zip comment")
cdir2 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
"somethingExtra"),
::Zip::Entry.new("file.zip", "secondEntryName"),
::Zip::Entry.new("file.zip", "lastEntry.txt")],
"my zip comment")
cdir3 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
"somethingExtra"),
::Zip::Entry.new("file.zip", "secondEntryName"),
::Zip::Entry.new("file.zip", "lastEntry.txt")],
"comment?")
cdir4 = ::Zip::CentralDirectory.new([::Zip::Entry.new("file.zip", "flimse", nil,
"somethingExtra"),
::Zip::Entry.new("file.zip", "lastEntry.txt")],
"comment?")
assert_equal(cdir1, cdir1)
assert_equal(cdir1, cdir2)

assert(cdir1 != cdir3)
assert(cdir2 != cdir3)
assert(cdir2 != cdir3)
assert(cdir3 != cdir4)

assert(cdir3 != "hello")
end
end
1 change: 0 additions & 1 deletion test/data/.cvsignore

This file was deleted.

62 changes: 62 additions & 0 deletions test/deflater_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
require 'test_helper'

class DeflaterTest < MiniTest::Unit::TestCase
include CrcTest

def test_outputOperator
txt = load_file("test/data/file2.txt")
deflate(txt, "deflatertest.bin")
inflatedTxt = inflate("deflatertest.bin")
assert_equal(txt, inflatedTxt)
end

def test_default_compression
txt = load_file("test/data/file2.txt")

Zip.default_compression = ::Zlib::BEST_COMPRESSION
deflate(txt, "compressiontest_best_compression.bin")
Zip.default_compression = ::Zlib::DEFAULT_COMPRESSION
deflate(txt, "compressiontest_default_compression.bin")
Zip.default_compression = ::Zlib::NO_COMPRESSION
deflate(txt, "compressiontest_no_compression.bin")

best = File.size("compressiontest_best_compression.bin")
default = File.size("compressiontest_default_compression.bin")
no = File.size("compressiontest_no_compression.bin")

assert(best < default)
assert(best < no)
assert(default < no)
end


private
def load_file(fileName)
txt = nil
File.open(fileName, "rb") { |f| txt = f.read }
end

def deflate(data, fileName)
File.open(fileName, "wb") {
|file|
deflater = ::Zip::Deflater.new(file)
deflater << data
deflater.finish
assert_equal(deflater.size, data.size)
file << "trailing data for zlib with -MAX_WBITS"
}
end

def inflate(fileName)
txt = nil
File.open(fileName, "rb") {
|file|
inflater = ::Zip::Inflater.new(file)
txt = inflater.sysread
}
end

def test_crc
run_crc_test(::Zip::Deflater)
end
end
Loading

0 comments on commit 4f9b642

Please sign in to comment.