~bzr-pqm/bzr/bzr.dev

2617.5.4 by Kuno Meyer
Included feedback on initial patch.
1
# Copyright (C) 2007 Canonical Ltd
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
17
import sys
18
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
19
from bzrlib import osutils
2617.5.6 by Kuno Meyer
Incorporated feedback from the mailinglist.
20
from bzrlib.tests import TestCase, TestCaseInTempDir, Feature
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
21
from bzrlib.win32utils import glob_expand
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
22
23
24
# Features
25
# --------
26
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
27
class _NeedsGlobExpansionFeature(Feature):
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
28
29
    def _probe(self):
2617.5.5 by Kuno Meyer
Just a typo remained from testing.
30
        return sys.platform == 'win32'
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
31
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
32
    def feature_name(self):
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
33
        return 'Internally performed glob expansion'
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
34
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
35
NeedsGlobExpansionFeature = _NeedsGlobExpansionFeature()
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
36
37
38
# Tests
39
# -----
2617.5.6 by Kuno Meyer
Incorporated feedback from the mailinglist.
40
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
41
class TestNeedsGlobExpansionFeature(TestCase):
2617.5.6 by Kuno Meyer
Incorporated feedback from the mailinglist.
42
    
43
    def test_available(self):
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
44
        self.assertEqual(sys.platform == 'win32', 
45
                         NeedsGlobExpansionFeature.available())
2617.5.6 by Kuno Meyer
Incorporated feedback from the mailinglist.
46
        
47
    def test_str(self):
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
48
        self.assertTrue("performed" in str(NeedsGlobExpansionFeature))
2617.5.6 by Kuno Meyer
Incorporated feedback from the mailinglist.
49
50
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
51
class TestWin32UtilsGlobExpand(TestCaseInTempDir):
2617.5.2 by Kuno Meyer
just reformatting
52
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
53
    _test_needs_features = [NeedsGlobExpansionFeature]
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
54
   
55
    def test_empty_tree(self):
56
        self.build_tree([])
2617.5.2 by Kuno Meyer
just reformatting
57
        self._run_testset([
58
            [['a'], ['a']],
59
            [['?'], ['?']],
60
            [['*'], ['*']],
61
            [['a', 'a'], ['a', 'a']]])
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
62
        
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
63
    def test_tree_ascii(self):
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
64
        """Checks the glob expansion and path separation char
65
        normalization"""
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
66
        self.build_tree(['a', 'a1', 'a2', 'a11', 'a.1',
67
                         'b', 'b1', 'b2', 'b3',
68
                         'c/', 'c/c1', 'c/c2', 
2617.5.4 by Kuno Meyer
Included feedback on initial patch.
69
                         'd/', 'd/d1', 'd/d2', 'd/e/', 'd/e/e1'])
2617.5.2 by Kuno Meyer
just reformatting
70
        self._run_testset([
71
            # no wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
72
            [[u'a'], [u'a']],
73
            [[u'a', u'a' ], [u'a', u'a']],
74
            [[u'A'], [u'A']],
2617.5.2 by Kuno Meyer
just reformatting
75
                
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
76
            [[u'd'], [u'd']],
77
            [[u'd/'], [u'd/']],
78
            [[u'd\\'], [u'd/']],
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
79
            
2617.5.2 by Kuno Meyer
just reformatting
80
            # wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
81
            [[u'a*'], [u'a', u'a1', u'a2', u'a11', u'a.1']],
82
            [[u'?'], [u'a', u'b', u'c', u'd']],
83
            [[u'a?'], [u'a1', u'a2']],
84
            [[u'a??'], [u'a11', u'a.1']],
85
            [[u'b[1-2]'], [u'b1', u'b2']],
86
            [[u'A?'], [u'a1', u'a2']],
2617.5.2 by Kuno Meyer
just reformatting
87
               
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
88
            [[u'd/*'], [u'd/d1', u'd/d2', u'd/e']],
89
            [[u'd\\*'], [u'd/d1', u'd/d2', u'd/e']],
90
            [[u'?\\*'], [u'c/c1', u'c/c2', u'd/d1', u'd/d2', u'd/e']],
91
            [[u'*\\*'], [u'c/c1', u'c/c2', u'd/d1', u'd/d2', u'd/e']],
92
            [[u'*/'], [u'c/', u'd/']],
93
            [[u'*\\'], [u'c/', u'd/']]])
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
94
        
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
95
    def test_tree_unicode(self):
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
96
        """Checks behaviour with non-ascii filenames"""
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
97
        self.build_tree([u'\u1234', u'\u1234\u1234', u'\u1235/', u'\u1235/\u1235'])
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
98
        self._run_testset([
99
            # no wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
100
            [[u'\u1234'], [u'\u1234']],
101
            [[u'\u1235'], [u'\u1235']],
102
         
103
            [[u'\u1235/'], [u'\u1235/']],
104
            [[u'\u1235/\u1235'], [u'\u1235/\u1235']],
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
105
            
106
            # wildcards
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
107
            [[u'?'], [u'\u1234', u'\u1235']],
108
            [[u'*'], [u'\u1234', u'\u1234\u1234', u'\u1235']],
109
            [[u'\u1234*'], [u'\u1234', u'\u1234\u1234']],
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
110
            
2617.5.8 by Kuno Meyer
Extended tests for unicode chars outside of the iso-8859-* range
111
            [[u'\u1235/?'], [u'\u1235/\u1235']],
112
            [[u'\u1235/*'], [u'\u1235/\u1235']],
113
            [[u'\u1235\\?'], [u'\u1235/\u1235']],
114
            [[u'\u1235\\*'], [u'\u1235/\u1235']],
115
            [[u'?/'], [u'\u1235/']],
116
            [[u'*/'], [u'\u1235/']],
117
            [[u'?\\'], [u'\u1235/']],
118
            [[u'*\\'], [u'\u1235/']],
119
            [[u'?/?'], [u'\u1235/\u1235']],
120
            [[u'*/*'], [u'\u1235/\u1235']],
121
            [[u'?\\?'], [u'\u1235/\u1235']],
122
            [[u'*\\*'], [u'\u1235/\u1235']]])
2617.5.7 by Kuno Meyer
Fix for non-ASCII filenames
123
2617.5.1 by Kuno Meyer
Added direct unit tests for win32utils.glob_expand().
124
    def _run_testset(self, testset):
125
        for pattern, expected in testset:
126
            result = glob_expand(pattern)
127
            expected.sort()
128
            result.sort()
129
            self.assertEqual(expected, result, 'pattern %s' % pattern)
2617.5.2 by Kuno Meyer
just reformatting
130