Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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'
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
# 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

Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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')))