def test_fallback_comparisons(monkeypatch): manager = ComparatorManager() monkeypatch.setattr(manager, 'COMPARATORS', ( ('debian_fallback.DotChangesFile',), ('debian_fallback.DotDscFile',), ('debian_fallback.DotBuildinfoFile',), )) manager.reload() for a, b, expected_diff in ( ( 'test1.changes', 'test2.changes', 'dot_changes_fallback_expected_diff', ), ( 'test1.dsc', 'test2.dsc', 'dot_dsc_fallback_expected_diff' ), ( 'test1.buildinfo', 'test2.buildinfo', 'dot_buildinfo_fallback_expected_diff', ), ): # Re-specialize after reloading our Comparators file1 = specialize(FilesystemFile(data(a))) file2 = specialize(FilesystemFile(data(b))) assert file1.compare(file1) is None assert file2.compare(file2) is None assert file1.compare(file2).unified_diff == get_data(expected_diff)
def test_fallback_comparison(monkeypatch): manager = ComparatorManager() monkeypatch.setattr(manager, 'COMPARATORS', (('rpm_fallback.RpmFile', ), )) manager.reload() # Re-specialize after reloading our Comparators rpm1 = specialize(FilesystemFile(data('test1.rpm'))) rpm2 = specialize(FilesystemFile(data('test2.rpm'))) assert rpm1.compare(rpm1) is None assert rpm2.compare(rpm2) is None expected_diff = get_data('rpm_fallback_expected_diff') assert normalize_zeros(rpm1.compare(rpm2).unified_diff) == expected_diff
def test_fuzzy_matching(fuzzy_tar1, fuzzy_tar2): differences = fuzzy_tar1.compare(fuzzy_tar2).details expected_diff = codecs.open(data('text_iso8859_expected_diff'), encoding='utf-8').read() assert differences[1].source1 == './matching' assert differences[1].source2 == './fuzzy' assert 'similar' in differences[1].comment assert differences[1].unified_diff == expected_diff
def test_difference_between_iso88591_and_unicode_only(iso8859, tmpdir): utf8_path = str(tmpdir.join('utf8')) with open(utf8_path, 'wb') as f: f.write( codecs.open(data('text_iso8859'), encoding='iso8859-1').read().encode('utf-8')) utf8 = specialize(FilesystemFile(utf8_path)) difference = iso8859.compare(utf8) assert difference.unified_diff is None assert difference.details[0].source1 == 'encoding'
def test_charsets(mo_no_charset, mo_iso8859_1): difference = mo_no_charset.compare(mo_iso8859_1) expected_diff = codecs.open(data('mo_charsets_expected_diff'), encoding='utf-8').read() assert difference.details[0].unified_diff == expected_diff
def test_difference_between_iso88591_and_unicode(iso8859, unicode1): difference = iso8859.compare(unicode1) expected_diff = codecs.open(data('text_iso8859_expected_diff'), encoding='utf-8').read() assert difference.unified_diff == expected_diff
def test_difference_in_unicode(unicode1, unicode2): difference = unicode1.compare(unicode2) expected_diff = codecs.open(data('text_unicode_expected_diff'), encoding='utf-8').read() assert difference.unified_diff == expected_diff
from os import mkdir, symlink from tempfile import TemporaryDirectory from diffoscope.tools import tool_required from diffoscope.exc import RequiredToolNotFound from diffoscope.difference import Difference from diffoscope.comparators.binary import FilesystemFile from diffoscope.comparators.utils.file import File from diffoscope.comparators.missing_file import MissingFile from diffoscope.comparators.utils.compare import Xxd from utils.data import data, init_fixture, get_data, normalize_zeros from utils.tools import skip_unless_tools_exist TEST_FILE1_PATH = data('binary1') TEST_FILE2_PATH = data('binary2') TEST_ASCII_PATH = data('text_ascii1') TEST_UNICODE_PATH = data('text_unicode1') TEST_ISO8859_PATH = data('text_iso8859') binary1 = init_fixture(TEST_FILE1_PATH) binary2 = init_fixture(TEST_FILE2_PATH) def test_same_content(binary1): assert binary1.has_same_content_as(binary1) is True def test_not_same_content(binary1, binary2): assert binary1.has_same_content_as(binary2) is False
# GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with diffoscope. If not, see <https://www.gnu.org/licenses/>. import os import shutil import pytest from diffoscope.comparators.binary import FilesystemFile from diffoscope.comparators.directory import compare_directories from diffoscope.comparators.utils.specialize import specialize from utils.data import data, get_data TEST_FILE1_PATH = data('text_ascii1') TEST_FILE2_PATH = data('text_ascii2') def test_no_differences(): difference = compare_directories(os.path.dirname(__file__), os.path.dirname(__file__)) assert difference is None def test_no_differences_with_extra_slash(): difference = compare_directories( os.path.dirname(__file__) + '/', os.path.dirname(__file__)) assert difference is None
def test_obj_compare_non_existing(monkeypatch, obj1): monkeypatch.setattr(Config(), 'new_file', True) difference = obj1.compare(MissingFile('/nonexisting', obj1)) assert difference.source2 == '/nonexisting' assert len(difference.details) > 0 @skip_unless_tools_exist('readelf') @skip_if_binutils_does_not_support_x86() def test_diff(obj_differences): assert len(obj_differences) == 1 expected_diff = get_data('elf_obj_expected_diff') assert obj_differences[0].unified_diff == expected_diff TEST_LIB1_PATH = data('test1.a') TEST_LIB2_PATH = data('test2.a') @pytest.fixture def lib1(): return specialize(FilesystemFile(TEST_LIB1_PATH)) @pytest.fixture def lib2(): return specialize(FilesystemFile(TEST_LIB2_PATH)) def test_lib_identification(lib1): assert isinstance(lib1, StaticLibFile)
from diffoscope.comparators.missing_file import MissingFile from diffoscope.comparators.utils.specialize import specialize from utils.data import data, get_data from utils.tools import skip_unless_module_exists from utils.nonexisting import assert_non_existing try: from diffoscope.comparators.debian import DotChangesFile, DotDscFile, \ DotBuildinfoFile except ImportError: from diffoscope.comparators.debian_fallback import DotChangesFile, DotDscFile, \ DotBuildinfoFile TEST_DOT_CHANGES_FILE1_PATH = data('test1.changes') TEST_DOT_CHANGES_FILE2_PATH = data('test2.changes') TEST_DOT_CHANGES_FILE3_PATH = data('test3.changes') TEST_DOT_CHANGES_FILE4_PATH = data('test4.changes') TEST_DOT_BUILDINFO_FILE1_PATH = data('test1.buildinfo') TEST_DOT_BUILDINFO_FILE2_PATH = data('test2.buildinfo') TEST_DEB_FILE1_PATH = data('test1.deb') TEST_DEB_FILE2_PATH = data('test2.deb') @pytest.fixture def dot_changes1(tmpdir): tmpdir.mkdir('a') dot_changes_path = str(tmpdir.join('a/test_1.changes')) shutil.copy(TEST_DOT_CHANGES_FILE1_PATH, dot_changes_path) shutil.copy(TEST_DEB_FILE1_PATH, str(tmpdir.join('a/test_1_all.deb'))) shutil.copy(TEST_DOT_BUILDINFO_FILE1_PATH, str(tmpdir.join('a/test_1.buildinfo')))