File: test_conflict.py

package info (click to toggle)
dictdiffer 0.9.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 292 kB
  • sloc: python: 1,519; makefile: 153; sh: 6
file content (92 lines) | stat: -rw-r--r-- 2,420 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# This file is part of Dictdiffer.
#
# Copyright (C) 2015 CERN.
#
# Dictdiffer is free software; you can redistribute it and/or modify
# it under the terms of the MIT License; see LICENSE file for more
# details.

import unittest

from dictdiffer.conflict import Conflict, ConflictFinder


class ConflictTest(unittest.TestCase):
    def test_init(self):
        p1 = ('add', '', [(0, 0)])
        p2 = ('add', '', [(1, 2)])

        c = Conflict(p1, p2)

        self.assertEqual(c.first_patch, p1)
        self.assertEqual(c.second_patch, p2)
        self.assertEqual(c.take, None)

    def test_take_patch(self):
        p1 = ('add', '', [(1, 1)])
        p2 = ('add', '', [(1, -1)])

        c = Conflict(p1, p2)

        self.assertRaises(Exception, c.take_patch)

        c.take = 'f'
        self.assertEqual(c.take_patch(), p1)

        c.take = 's'
        self.assertEqual(c.take_patch(), p2)


class ConflictFinderTest(unittest.TestCase):
    def test_is_conflict(self):
        # SAME LENGTH NO CONFLICT
        p1 = ('add', 'foo', [(0, 0)])
        p2 = ('add', 'foo', [(2, 0)])

        c = ConflictFinder()
        self.assertFalse(c._is_conflict(p1, p2))

        p1 = ('add', 'foo.bar', [(0, 0)])
        p2 = ('add', 'foo.bar', [(2, 0)])

        c = ConflictFinder()
        self.assertFalse(c._is_conflict(p1, p2))

        # SAME LENGTH CONFLICT
        p1 = ('add', 'foo', [(0, 0)])
        p2 = ('add', 'foo', [(0, 0)])

        c = ConflictFinder()
        self.assertTrue(c._is_conflict(p1, p2))

        p1 = ('add', 'foo.bar', [(0, 0)])
        p2 = ('add', 'foo.bar', [(0, 0)])

        c = ConflictFinder()
        self.assertTrue(c._is_conflict(p1, p2))

        # SUPER PATH
        p1 = ('remove', '', [('foo', [])])
        p2 = ('add', 'foo.bar', [(0, 0)])

        c = ConflictFinder()
        self.assertTrue(c._is_conflict(p1, p2))

        p1 = ('add', 'foo.bar', [(0, 0)])
        p2 = ('remove', '', [('foo', [])])

        c = ConflictFinder()
        self.assertTrue(c._is_conflict(p1, p2))

    def test_find_conflicts(self):
        p11 = ('add', 'foo.bar', [(0, 0)])
        p12 = ('add', 'foo', [(0, 0)])

        p21 = ('add', 'foo.bar', [(0, 0)])
        p22 = ('add', 'foo', [(1, 0)])

        conflicts = [Conflict(p11, p21)]

        c = ConflictFinder()
        self.assertEqual(repr(c.find_conflicts([p11, p12], [p21, p22])),
                         repr(conflicts))