Beispiel #1
0
    def test_key_not_in_base_revision(self):
        r1, r2, r3 = 1, 2, 3

        d1 = {"A": {"B": {"C": 1, "D": [2, 3]}}}
        d2 = {"A": {"B": {"C": 1, "D": [2, 3], "E": 4, "F": 5}}}
        d3 = {"A": {"B": {"C": 1, "D": [2, 3, 4]}}}

        td1 = TraceableDict(d1)
        td1.commit(revision=r1)

        td1 = td1 | d2
        td1.commit(revision=r2)

        td1 = td1 | d3
        td1.commit(revision=r3)

        log = td1.log(path=("A", "B", "E"))
        self.assertEquals(log.keys(), [r2, r3])
        self.assertEquals(log[r2], {'E': 4})
        self.assertEquals(log[r3], {'E': {}})

        log = td1.log(path=("A", "B", "F"))
        self.assertEquals(log.keys(), [r2, r3])
        self.assertEquals(log[r2], {'F': 5})
        self.assertEquals(log[r3], {'F': {}})
Beispiel #2
0
    def test_key_not_changing_in_revision(self):
        r1, r2, r3, r4 = 1, 2, 3, 4

        d1 = {"A": {"B": {"C": 1}}}
        d2 = {"A": {"B": {"C": 2}}}
        d3 = {"A": {"B": {"C": 2, "D": 1}}}
        d4 = {"A": {"B": {"C": 3, "D": 1}}}

        td1 = TraceableDict(d1)
        td1.commit(revision=r1)

        td1 = td1 | d2
        td1.commit(revision=r2)

        td1 = td1 | d3
        td1.commit(revision=r3)

        td1 = td1 | d4
        td1.commit(revision=r4)

        log = td1.log(path=("A", "B", "C"))
        self.assertEquals(log.keys(), [r1, r2, r4])
        self.assertEquals(log[r1], {'C': 1})
        self.assertEquals(log[r2], {'C': 2})
        self.assertEquals(log[r4], {'C': 3})

        d1 = {"A": {"B": {"D": 1}}}
        d2 = {"A": {"B": {"C": 2}}}
        d3 = {"A": {"B": {"C": 2, "D": 1}}}
        d4 = {"A": {"B": {"C": 3, "D": 1}}}

        td1 = TraceableDict(d1)
        td1.commit(revision=r1)

        td1 = td1 | d2
        td1.commit(revision=r2)

        td1 = td1 | d3
        td1.commit(revision=r3)

        td1 = td1 | d4
        td1.commit(revision=r4)

        log = td1.log(path=("A", "B", "C"))
        self.assertEquals(log.keys(), [r2, r4])
        self.assertEquals(log[r2], {'C': 2})
        self.assertEquals(log[r4], {'C': 3})
Beispiel #3
0
    def test_log_invalid_path(self):
        r1 = 1

        d1 = {"A": 1, "B": 2}
        d2 = {"B": 1}

        td1 = TraceableDict(d1)
        td2 = TraceableDict(d2)

        td1 = td1 | td2
        td1.commit(revision=r1)

        invalid_path = None
        with self.assertRaises(TypeError) as err:
            td1.log(path=invalid_path)
        self.assertTrue('path must be tuple' in err.exception)

        invalid_path = 'A'
        with self.assertRaises(TypeError) as err:
            td1.log(path=invalid_path)
        self.assertTrue('path must be tuple' in err.exception)

        invalid_path = ()
        with self.assertRaises(ValueError) as err:
            td1.log(path=invalid_path)
        self.assertTrue('path cannot be empty' in err.exception)

        unknown_path = ('A', 'B')
        log = td1.log(path=unknown_path)
        self.assertEquals(log.keys(), [])
        self.assertEquals(log, {})
Beispiel #4
0
    def test_log_uncommitted_changes(self):
        r1, r2 = 1, 2
        d1 = {"A": {"B": {"C": 1, "D": [2, 3], "E": 4}}}
        d2 = {"A": {"B": {"C": 1, "D": [2], "F": 5}}}

        td1 = TraceableDict(d1)
        td1.commit(revision=r1)

        td1 = td1 | d2
        self.assertTrue(td1.has_uncommitted_changes)

        log = td1.log(path=('A', ))
        self.assertEquals(log.keys(), [r1])
        self.assertEquals(log[r1], d1)

        td1.commit(revision=r2)
        self.assertFalse(td1.has_uncommitted_changes)

        log = td1.log(path=('A', ))
        self.assertEquals(log.keys(), [r1, r2])
        self.assertEquals(log[r1], d1)
        self.assertEquals(log[r2], d2)
Beispiel #5
0
    def test_basic(self):
        r1, r2, r3 = 1, 2, 3

        d1 = {"A": {"B": {"C": 1, "D": [2, 3]}}}
        d2 = {"A": {"B": {"C": 1, "D": [2, 3], "E": 4, "F": 5}}}
        d3 = {"A": {"B": {"C": 1, "D": [2, 3, 4]}}}

        td1 = TraceableDict(d1)
        td1.commit(revision=r1)

        td1 = td1 | d2
        td1.commit(revision=r2)

        td1 = td1 | d3
        td1["a"] = 1
        td1.commit(revision=r3)

        log = td1.log(path=("A", ))
        self.assertEquals(log.keys(), [r1, r2, r3])
        self.assertEquals(log[r1], d1)
        self.assertEquals(log[r2], d2)
        self.assertEquals(log[r3], d3)

        log = td1.log(path=("A", "B"))
        self.assertEquals(log.keys(), [r1, r2, r3])
        self.assertEquals(log[r1], d1["A"])
        self.assertEquals(log[r2], d2["A"])
        self.assertEquals(log[r3], d3["A"])

        log = td1.log(path=("A", "B", "C"))
        self.assertEquals(log.keys(), [r1])
        self.assertEquals(log[r1], {"C": 1})

        log = td1.log(path=("A", "B", "D"))
        self.assertEquals(log.keys(), [r1, r3])
        self.assertEquals(log[r1], {"D": [2, 3]})
        self.assertEquals(log[r3], {"D": [2, 3, 4]})

        log = td1.log(path=("A", "B", "E"))
        self.assertEquals(log.keys(), [r2, r3])
        self.assertEquals(log[r2], {'E': 4})
        self.assertEquals(log[r3], {'E': {}})

        log = td1.log(path=("A", "B", "F"))
        self.assertEquals(log.keys(), [r2, r3])
        self.assertEquals(log[r2], {'F': 5})
        self.assertEquals(log[r3], {'F': {}})

        log = td1.log(path=('a', ))
        self.assertEquals(log.keys(), [r3])
        self.assertEquals(log[r3], {'a': 1})
Beispiel #6
0
    def test_key_removed_and_returns(self):
        r1, r2, r3 = 1, 2, 3

        d1 = {"A": {"B": {"C": 1, "D": [2, 3]}}}
        d2 = {"A": {"B": {"D": [2, 3], "E": 4, "F": 5}}}
        d3 = {"A": {"B": {"C": 1, "D": [2, 3, 4]}}}

        td1 = TraceableDict(d1)
        td1.commit(revision=r1)

        td1 = td1 | d2
        td1.commit(revision=r2)

        td1 = td1 | d3
        td1.commit(revision=r3)

        log = td1.log(path=("A", "B", "C"))
        self.assertEquals(log.keys(), [r1, r2, r3])
        self.assertEquals(log[r1], {'C': 1})
        self.assertEquals(log[r2], {'C': {}})
        self.assertEquals(log[r3], {'C': 1})
Beispiel #7
0
    def test_log_no_revisions(self):
        d1 = {"A": {"B": {"C": 1, "D": [2, 3]}}}
        td1 = TraceableDict(d1)

        log = td1.log(path=("A", ))
        self.assertEquals(log, {})