137 lines
4.0 KiB
Python
Executable File
137 lines
4.0 KiB
Python
Executable File
import os, sys
|
|
|
|
import comicapi.UnRAR2 as UnRAR2
|
|
from comicapi.UnRAR2.rar_exceptions import *
|
|
|
|
|
|
def cleanup(dir='test'):
|
|
for path, dirs, files in os.walk(dir):
|
|
for fn in files:
|
|
os.remove(os.path.join(path, fn))
|
|
for dir in dirs:
|
|
os.removedirs(os.path.join(path, dir))
|
|
|
|
|
|
# basic test
|
|
cleanup()
|
|
rarc = UnRAR2.RarFile('test.rar')
|
|
rarc.infolist()
|
|
assert rarc.comment == "This is a test."
|
|
for info in rarc.infoiter():
|
|
saveinfo = info
|
|
assert (str(info) == """<RarInfo "test" in "test.rar">""")
|
|
break
|
|
rarc.extract()
|
|
assert os.path.exists('test' + os.sep + 'test.txt')
|
|
assert os.path.exists('test' + os.sep + 'this.py')
|
|
del rarc
|
|
assert (
|
|
str(saveinfo) == """<RarInfo "test" in "[ARCHIVE_NO_LONGER_LOADED]">""")
|
|
cleanup()
|
|
|
|
# extract all the files in test.rar
|
|
cleanup()
|
|
UnRAR2.RarFile('test.rar').extract()
|
|
assert os.path.exists('test' + os.sep + 'test.txt')
|
|
assert os.path.exists('test' + os.sep + 'this.py')
|
|
cleanup()
|
|
|
|
# extract all the files in test.rar matching the wildcard *.txt
|
|
cleanup()
|
|
UnRAR2.RarFile('test.rar').extract('*.txt')
|
|
assert os.path.exists('test' + os.sep + 'test.txt')
|
|
assert not os.path.exists('test' + os.sep + 'this.py')
|
|
cleanup()
|
|
|
|
# check the name and size of each file, extracting small ones
|
|
cleanup()
|
|
archive = UnRAR2.RarFile('test.rar')
|
|
assert archive.comment == 'This is a test.'
|
|
archive.extract(lambda rarinfo: rarinfo.size <= 1024)
|
|
for rarinfo in archive.infoiter():
|
|
if rarinfo.size <= 1024 and not rarinfo.isdir:
|
|
assert rarinfo.size == os.stat(rarinfo.filename).st_size
|
|
assert open('test' + os.sep + 'test.txt',
|
|
'rt').read() == 'This is only a test.'
|
|
assert not os.path.exists('test' + os.sep + 'this.py')
|
|
cleanup()
|
|
|
|
# extract this.py, overriding it's destination
|
|
cleanup('test2')
|
|
archive = UnRAR2.RarFile('test.rar')
|
|
archive.extract('*.py', 'test2', False)
|
|
assert os.path.exists('test2' + os.sep + 'this.py')
|
|
cleanup('test2')
|
|
|
|
# extract test.txt to memory
|
|
cleanup()
|
|
archive = UnRAR2.RarFile('test.rar')
|
|
entries = UnRAR2.RarFile('test.rar').read_files('*test.txt')
|
|
assert len(entries) == 1
|
|
assert entries[0][0].filename.endswith('test.txt')
|
|
assert entries[0][1] == 'This is only a test.'
|
|
|
|
# extract all the files in test.rar with overwriting
|
|
cleanup()
|
|
fo = open('test' + os.sep + 'test.txt', "wt")
|
|
fo.write("blah")
|
|
fo.close()
|
|
UnRAR2.RarFile('test.rar').extract('*.txt')
|
|
assert open('test' + os.sep + 'test.txt', "rt").read() != "blah"
|
|
cleanup()
|
|
|
|
# extract all the files in test.rar without overwriting
|
|
cleanup()
|
|
fo = open('test' + os.sep + 'test.txt', "wt")
|
|
fo.write("blahblah")
|
|
fo.close()
|
|
UnRAR2.RarFile('test.rar').extract('*.txt', overwrite=False)
|
|
assert open('test' + os.sep + 'test.txt', "rt").read() == "blahblah"
|
|
cleanup()
|
|
|
|
# list big file in an archive
|
|
list(UnRAR2.RarFile('test_nulls.rar').infoiter())
|
|
|
|
# extract files from an archive with protected files
|
|
cleanup()
|
|
rarc = UnRAR2.RarFile('test_protected_files.rar', password="protected")
|
|
rarc.extract()
|
|
assert os.path.exists('test' + os.sep + 'top_secret_xxx_file.txt')
|
|
cleanup()
|
|
errored = False
|
|
try:
|
|
UnRAR2.RarFile('test_protected_files.rar', password="proteqted").extract()
|
|
except IncorrectRARPassword:
|
|
errored = True
|
|
assert not os.path.exists('test' + os.sep + 'top_secret_xxx_file.txt')
|
|
assert errored
|
|
cleanup()
|
|
|
|
# extract files from an archive with protected headers
|
|
cleanup()
|
|
UnRAR2.RarFile('test_protected_headers.rar', password="secret").extract()
|
|
assert os.path.exists('test' + os.sep + 'top_secret_xxx_file.txt')
|
|
cleanup()
|
|
errored = False
|
|
try:
|
|
UnRAR2.RarFile('test_protected_headers.rar', password="seqret").extract()
|
|
except IncorrectRARPassword:
|
|
errored = True
|
|
assert not os.path.exists('test' + os.sep + 'top_secret_xxx_file.txt')
|
|
assert errored
|
|
cleanup()
|
|
|
|
# make sure docstring examples are working
|
|
import doctest
|
|
doctest.testmod(UnRAR2)
|
|
|
|
# update documentation
|
|
import pydoc
|
|
pydoc.writedoc(UnRAR2)
|
|
|
|
# cleanup
|
|
try:
|
|
os.remove('__init__.pyc')
|
|
except:
|
|
pass
|