File: C:/Users/fred/anaconda3/Lib/site-packages/anaconda_project/internal/test/test_ziputils.py
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Copyright (c) 2016, Anaconda, Inc. All rights reserved.
#
# Licensed under the terms of the BSD 3-Clause License.
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------
from __future__ import absolute_import, print_function
import codecs
import os
from anaconda_project.internal.ziputils import unpack_zip
from anaconda_project.internal.test.tmpfile_utils import (with_directory_contents, with_tmp_zipfile)
def test_unzip_single_file_different_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo') # different name from what's in the zip
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert codecs.open(os.path.join(target_path, 'foo'), 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile(dict(foo="hello world\n"), do_test)
def test_unzip_single_file_same_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'foo') # same name as what's in the zip
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isfile(target_path)
assert codecs.open(target_path, 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile(dict(foo="hello world\n"), do_test)
def test_unzip_two_files():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo')
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert codecs.open(os.path.join(target_path, 'foo'), 'r', 'utf-8').read() == "hello world\n"
assert codecs.open(os.path.join(target_path, 'bar'), 'r', 'utf-8').read() == "goodbye world\n"
with_tmp_zipfile(dict(foo="hello world\n", bar="goodbye world\n"), do_test)
def test_unzip_one_directory_different_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo') # different name from what's in the zip
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert os.path.isdir(os.path.join(target_path, 'foo'))
assert codecs.open(os.path.join(target_path, 'foo', 'bar'), 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile({'foo/bar': "hello world\n"}, do_test)
def test_unzip_one_directory_same_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'foo') # same name as what's in the zip
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert codecs.open(os.path.join(target_path, 'bar'), 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile({'foo/bar': "hello world\n"}, do_test)
def test_unzip_empty_zip():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo')
errors = []
unpack_zip(zipname, target_path, errors)
assert ['Zip archive was empty.'] == errors
assert not os.path.isdir(target_path)
with_tmp_zipfile(dict(), do_test)
# we do rename directories over directories
def test_unzip_target_already_exists_and_is_directory():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo')
os.makedirs(target_path)
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert codecs.open(os.path.join(target_path, 'foo'), 'r', 'utf-8').read() == "hello world\n"
assert codecs.open(os.path.join(target_path, 'bar'), 'r', 'utf-8').read() == "goodbye world\n"
with_tmp_zipfile(dict(foo="hello world\n", bar="goodbye world\n"), do_test)
# we do rename directories over directories even if the dir is inside the zip
def test_unzip_target_already_exists_and_is_directory_and_single_dir_in_zip():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo') # different name from dir in zip
os.makedirs(target_path)
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert os.path.isdir(os.path.join(target_path, 'foo'))
assert codecs.open(os.path.join(target_path, 'foo', 'bar'), 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile({'foo/bar': "hello world\n"}, do_test)
# we do rename directories over directories even if we strip the toplevel dir from the zip
def test_unzip_target_already_exists_and_is_directory_and_single_dir_in_zip_same_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'foo') # same name as dir in zip
os.makedirs(target_path)
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert codecs.open(os.path.join(target_path, 'bar'), 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile({'foo/bar': "hello world\n"}, do_test)
# we don't rename a file over a directory when we discard the zip's dir due to same name
def test_unzip_target_already_exists_and_is_directory_and_single_file_in_zip_same_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'foo') # same name as file in zip
os.makedirs(target_path)
errors = []
unpack_zip(zipname, target_path, errors)
assert os.path.isdir(target_path)
assert ["%s exists and is a directory, not unzipping a plain file over it." % target_path] == errors
with_tmp_zipfile(dict(foo="hello world\n"), do_test)
# we do rename a directory over a directory if we keep the dir since the file has a different name
def test_unzip_target_already_exists_and_is_directory_and_single_file_in_zip_different_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo') # different name from file in zip
os.makedirs(target_path)
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isdir(target_path)
assert codecs.open(os.path.join(target_path, 'foo'), 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile(dict(foo="hello world\n"), do_test)
# we don't rename directories over files even if the dirs are inside the zip
def test_unzip_target_already_exists_and_is_file_and_single_dir_in_zip():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo') # different name so we should keep "foo"
with codecs.open(target_path, 'w', 'utf-8') as f:
f.write("\n")
errors = []
unpack_zip(zipname, target_path, errors)
assert os.path.isfile(target_path)
assert [("%s exists and isn't a directory, not unzipping a directory over it." % target_path)] == errors
with_tmp_zipfile({'foo/bar': "hello world\n"}, do_test)
# we don't rename directories over files if the zip has no root dir
def test_unzip_target_already_exists_and_is_file():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo')
with codecs.open(target_path, 'w', 'utf-8') as f:
f.write("\n")
errors = []
unpack_zip(zipname, target_path, errors)
assert [("%s exists and isn't a directory, not unzipping a directory over it." % target_path)] == errors
with_tmp_zipfile(dict(foo="hello world\n", bar="goodbye world\n"), do_test)
# we do rename files over files if they have the same name
def test_unzip_target_already_exists_and_is_file_and_single_file_in_zip_same_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'foo') # same name
with codecs.open(target_path, 'w', 'utf-8') as f:
f.write("\n")
errors = []
unpack_zip(zipname, target_path, errors)
assert [] == errors
assert os.path.isfile(target_path)
assert codecs.open(target_path, 'r', 'utf-8').read() == "hello world\n"
with_tmp_zipfile(dict(foo="hello world\n"), do_test)
# we don't rename files over files if the name is different
def test_unzip_target_already_exists_and_is_file_and_single_file_in_zip_different_name():
def do_test(zipname, workingdir):
target_path = os.path.join(workingdir, 'boo') # different from the file in the zip
with codecs.open(target_path, 'w', 'utf-8') as f:
f.write("original\n")
errors = []
unpack_zip(zipname, target_path, errors)
assert [("%s exists and isn't a directory, not unzipping a directory over it." % target_path)] == errors
assert os.path.isfile(target_path)
assert codecs.open(target_path, 'r', 'utf-8').read() == "original\n"
with_tmp_zipfile(dict(foo="hello world\n"), do_test)
def test_unzip_bad_zipfile():
def do_test(workingdir):
zipname = os.path.join(workingdir, 'foo')
target_path = os.path.join(workingdir, 'boo')
errors = []
unpack_zip(zipname, target_path, errors)
assert [('Failed to unzip %s: File is not a zip file' % zipname)] == errors
with_directory_contents(dict(foo="not a zip file\n"), do_test)