2
# Copyright (C) 2019 Jelmer Vernooij
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU General Public License for more details.
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
"""Tests for lintian_brush.dirty_tracker."""
22
from breezy.tests import (
23
TestCaseWithTransport,
27
class DirtyTrackerTests(TestCaseWithTransport):
30
super(DirtyTrackerTests, self).setUp()
31
self.tree = self.make_branch_and_tree('tree')
33
from lintian_brush.dirty_tracker import DirtyTracker
35
self.skipTest('pyinotify not available')
36
self.tracker = DirtyTracker(self.tree)
38
def test_nothing_changes(self):
39
self.assertFalse(self.tracker.is_dirty())
41
def test_regular_file_added(self):
42
self.build_tree_contents([('tree/foo', 'bar')])
43
self.assertTrue(self.tracker.is_dirty())
44
self.assertEqual(self.tracker.relpaths(), set(['foo']))
46
def test_many_added(self):
47
self.build_tree_contents(
48
[('tree/f%d' % d, 'content') for d in range(100)])
49
self.assertTrue(self.tracker.is_dirty())
51
self.tracker.relpaths(), set(['f%d' % d for d in range(100)]))
53
def test_regular_file_in_subdir_added(self):
54
self.build_tree_contents([('tree/foo/', ), ('tree/foo/blah', 'bar')])
55
self.assertTrue(self.tracker.is_dirty())
56
self.assertEqual(self.tracker.relpaths(), set(['foo', 'foo/blah']))
58
def test_directory_added(self):
59
self.build_tree_contents([('tree/foo/', )])
60
self.assertTrue(self.tracker.is_dirty())
61
self.assertEqual(self.tracker.relpaths(), set(['foo']))
63
def test_file_removed(self):
64
self.build_tree_contents([('tree/foo', 'foo')])
65
self.assertTrue(self.tracker.is_dirty())
66
self.tracker.mark_clean()
67
self.build_tree_contents([('tree/foo', 'bar')])
68
self.assertTrue(self.tracker.is_dirty())
69
self.assertEqual(self.tracker.relpaths(), set(['foo']))
71
def test_control_file(self):
72
self.tree.commit('Some change')
73
self.assertFalse(self.tracker.is_dirty())
74
self.assertEqual(self.tracker.relpaths(), set([]))
76
def test_renamed(self):
77
self.build_tree_contents([('tree/foo', 'bar')])
78
self.tracker.mark_clean()
79
self.assertFalse(self.tracker.is_dirty())
80
os.rename('tree/foo', 'tree/bar')
81
self.assertTrue(self.tracker.is_dirty())
82
self.assertEqual(self.tracker.relpaths(), set(['foo', 'bar']))
84
def test_deleted(self):
85
self.build_tree_contents([('tree/foo', 'bar')])
86
self.tracker.mark_clean()
87
self.assertFalse(self.tracker.is_dirty())
89
self.assertTrue(self.tracker.is_dirty(), self.tracker._process.paths)
90
self.assertEqual(self.tracker.relpaths(), set(['foo']))
92
def test_added_then_deleted(self):
93
self.tracker.mark_clean()
94
self.assertFalse(self.tracker.is_dirty())
95
self.build_tree_contents([('tree/foo', 'bar')])
97
self.assertFalse(self.tracker.is_dirty())
98
self.assertEqual(self.tracker.relpaths(), set([]))