~bzr-pqm/bzr/bzr.dev

2255.2.71 by John Arbash Meinel
Add a test for list_files, and implement it for DirStateRevisionTree
1
# Copyright (C) 2007 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2255.2.71 by John Arbash Meinel
Add a test for list_files, and implement it for DirStateRevisionTree
16
17
"""Test that all trees support Tree.list_files()"""
18
4523.1.4 by Martin Pool
Rename remaining *_implementations tests
19
from bzrlib.tests.per_tree import TestCaseWithTree
2255.2.71 by John Arbash Meinel
Add a test for list_files, and implement it for DirStateRevisionTree
20
21
22
class TestListFiles(TestCaseWithTree):
23
24
    def test_list_files_with_root(self):
25
        work_tree = self.make_branch_and_tree('wt')
26
        tree = self.get_tree_no_parents_abc_content(work_tree)
27
        expected = [('', 'V', 'directory', 'root-id'),
28
                    ('a', 'V', 'file', 'a-id'),
29
                    ('b', 'V', 'directory', 'b-id'),
30
                    ('b/c', 'V', 'file', 'c-id'),
31
                   ]
32
        tree.lock_read()
33
        try:
34
            actual = [(path, status, kind, file_id)
35
                      for path, status, kind, file_id, ie in
36
                          tree.list_files(include_root=True)]
37
        finally:
38
            tree.unlock()
39
        self.assertEqual(expected, actual)
40
41
    def test_list_files_no_root(self):
42
        work_tree = self.make_branch_and_tree('wt')
43
        tree = self.get_tree_no_parents_abc_content(work_tree)
44
        expected = [('a', 'V', 'file', 'a-id'),
45
                    ('b', 'V', 'directory', 'b-id'),
46
                    ('b/c', 'V', 'file', 'c-id'),
47
                   ]
48
        tree.lock_read()
49
        try:
50
            actual = [(path, status, kind, file_id)
51
                      for path, status, kind, file_id, ie in
4370.5.2 by Ian Clatworthy
extend list_files() with from_dir and recursive parameters
52
                          tree.list_files()]
53
        finally:
54
            tree.unlock()
55
        self.assertEqual(expected, actual)
56
57
    def test_list_files_with_root_no_recurse(self):
58
        work_tree = self.make_branch_and_tree('wt')
59
        tree = self.get_tree_no_parents_abc_content(work_tree)
60
        expected = [('', 'V', 'directory', 'root-id'),
61
                    ('a', 'V', 'file', 'a-id'),
62
                    ('b', 'V', 'directory', 'b-id'),
63
                   ]
64
        tree.lock_read()
65
        try:
66
            actual = [(path, status, kind, file_id)
67
                for path, status, kind, file_id, ie in
68
                    tree.list_files(include_root=True, recursive=False)]
69
        finally:
70
            tree.unlock()
71
        self.assertEqual(expected, actual)
72
73
    def test_list_files_no_root_no_recurse(self):
74
        work_tree = self.make_branch_and_tree('wt')
75
        tree = self.get_tree_no_parents_abc_content(work_tree)
76
        expected = [('a', 'V', 'file', 'a-id'),
77
                    ('b', 'V', 'directory', 'b-id'),
78
                   ]
79
        tree.lock_read()
80
        try:
81
            actual = [(path, status, kind, file_id)
82
                for path, status, kind, file_id, ie in
83
                    tree.list_files(recursive=False)]
84
        finally:
85
            tree.unlock()
86
        self.assertEqual(expected, actual)
87
88
    def test_list_files_from_dir(self):
89
        work_tree = self.make_branch_and_tree('wt')
90
        tree = self.get_tree_no_parents_abc_content(work_tree)
91
        expected = [('c', 'V', 'file', 'c-id'),
92
                   ]
93
        tree.lock_read()
94
        try:
95
            actual = [(path, status, kind, file_id)
96
                      for path, status, kind, file_id, ie in
97
                          tree.list_files(from_dir='b')]
98
        finally:
99
            tree.unlock()
100
        self.assertEqual(expected, actual)
101
102
    def test_list_files_from_dir_no_recurse(self):
103
        # The test trees don't have much nesting so test with an explicit root
104
        work_tree = self.make_branch_and_tree('wt')
105
        tree = self.get_tree_no_parents_abc_content(work_tree)
106
        expected = [('a', 'V', 'file', 'a-id'),
107
                    ('b', 'V', 'directory', 'b-id'),
108
                   ]
109
        tree.lock_read()
110
        try:
111
            actual = [(path, status, kind, file_id)
112
                      for path, status, kind, file_id, ie in
113
                          tree.list_files(from_dir='', recursive=False)]
2255.2.71 by John Arbash Meinel
Add a test for list_files, and implement it for DirStateRevisionTree
114
        finally:
115
            tree.unlock()
116
        self.assertEqual(expected, actual)