~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_glob.py

  • Committer: Kent Gibson
  • Date: 2006-11-28 17:01:36 UTC
  • mto: (2178.1.1 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 2179.
  • Revision ID: warthog618@gmail.com-20061128170136-b11d15f1de7992af
Ignore pattern matcher (glob.py) patches:
 - '*' now matches leading '.' as per fnmatch.
 - Support '**' extension as per zsh.  
 - fixed case-insensitive match on case-insensitive platforms.
 - Updated NEWS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
             [u' ', u'\t', u'\n', u'\xa0', u'\u2000', u'\u2002'],
51
51
             [u'a', u'-', u'\u8336', u'.']),
52
52
            (u'[^[:space:]]',
53
 
             [u'a', u'-', u'\u8336'],
54
 
             [u' ', u'\t', u'\n', u'\xa0', u'\u2000', u'\u2002', u'.']),
 
53
             [u'a', u'-', u'\u8336', u'.'],
 
54
             [u' ', u'\t', u'\n', u'\xa0', u'\u2000', u'\u2002']),
55
55
            (u'[[:alnum:]]',
56
56
             [u'a', u'Z', u'\u017e', u'\u8336'],
57
57
             [u':', u'-', u'\u25cf', u'.']),
58
58
            (u'[^[:alnum:]]',
59
 
             [u':', u'-', u'\u25cf'],
60
 
             [u'a', u'.']),
 
59
             [u':', u'-', u'\u25cf', u'.'],
 
60
             [u'a']),
61
61
            (u'[[:ascii:]]',
62
 
             [u'a', u'Q', u'^'],
63
 
             [u'\xcc', u'\u8336', u'.']),
 
62
             [u'a', u'Q', u'^', u'.'],
 
63
             [u'\xcc', u'\u8336']),
64
64
            (u'[^[:ascii:]]',
65
65
             [u'\xcc', u'\u8336'],
66
66
             [u'a', u'Q', u'^', u'.']),
68
68
             [u'\t'],
69
69
             [u'x', u'y', u'z', u'.']),
70
70
            (u'[^[:blank:]]',
71
 
             [u'x', u'y', u'z'],
72
 
             [u'\t', u'.']),
 
71
             [u'x', u'y', u'z', u'.'],
 
72
             [u'\t']),
73
73
            (u'[[:cntrl:]]',
74
74
             [u'\b', u'\t', '\x7f'],
75
75
             [u'a', u'Q', u'\u8336', u'.']),
80
80
             [u'A', u'Q', u'F'],
81
81
             [u'a', u'q', u'f']),
82
82
            (u'[!a-z]foo',
83
 
             [u'Afoo'],
84
 
             [u'.foo']),
 
83
             [u'Afoo', u'.foo'],
 
84
             [u'afoo', u'ABfoo']),
85
85
            (ur'foo[!a-z]bar',
86
86
             [u'fooAbar', u'foo.bar'],
87
87
             [u'foojbar']),
111
111
    def test_question_mark(self):
112
112
        self.assertMatch([
113
113
            (u'?foo',
114
 
             [u'xfoo', u'bar/xfoo', u'bar/\u8336foo'],
115
 
             [u'.foo', u'bar/.foo', u'bar/foo', u'foo']),
 
114
             [u'xfoo', u'bar/xfoo', u'bar/\u8336foo', u'.foo', u'bar/.foo'],
 
115
             [u'bar/foo', u'foo']),
116
116
            (u'foo?bar',
117
117
             [u'fooxbar', u'foo.bar', u'foo\u8336bar', u'qyzzy/foo.bar'],
118
118
             [u'foo/bar']),
119
119
            (u'foo/?bar',
120
 
             [u'foo/xbar', u'foo/\u8336bar'],
121
 
             [u'foo/.bar', u'foo/bar', u'bar/foo/xbar']),
 
120
             [u'foo/xbar', u'foo/\u8336bar', u'foo/.bar'],
 
121
             [u'foo/bar', u'bar/foo/xbar']),
122
122
            ])
123
123
 
124
124
    def test_asterisk(self):
127
127
             [u'xx', u'x.x', u'x\u8336..x', u'\u8336/x.x', u'x.y.x'],
128
128
             [u'x/x', u'bar/x/bar/x', u'bax/abaxab']),
129
129
            (u'foo/*x',
130
 
             [u'foo/x', u'foo/bax', u'foo/a.x'],
131
 
             [u'foo/.x', u'foo/.q.x', u'foo/bar/bax']),
 
130
             [u'foo/x', u'foo/bax', u'foo/a.x', u'foo/.x', u'foo/.q.x'],
 
131
             [u'foo/bar/bax']),
132
132
            (u'*/*x',
133
 
             [u'\u8336/x', u'foo/x', u'foo/bax', u'x/a.x'],
134
 
             [u'.foo/x', u'\u8336/.x', u'foo/.q.x', u'foo/bar/bax']),
 
133
             [u'\u8336/x', u'foo/x', u'foo/bax', u'x/a.x', u'.foo/x', 
 
134
              u'\u8336/.x', u'foo/.q.x'],
 
135
             [u'foo/bar/bax']),
135
136
            (u'f*',
136
137
             [u'foo', u'foo.bar'],
137
138
             [u'.foo', u'foo/bar', u'foo/.bar']),
138
139
            (u'*bar',
139
140
             [u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar', 
140
 
              u'foo/foobar', u'foo/f.bar'],
141
 
             [u'.bar', u'foo/.bar']),
142
 
            ])
143
 
 
144
 
    def test_leading_dotslash(self):
 
141
              u'foo/foobar', u'foo/f.bar', u'.bar', u'foo/.bar'],
 
142
             []),
 
143
            ])
 
144
 
 
145
    def test_double_asterisk(self):
 
146
        self.assertMatch([
 
147
            # expected uses of double asterisk
 
148
            (u'foo/**/x',
 
149
             [u'foo/x', u'foo/bar/x'],
 
150
             [u'foox', u'foo/bax', u'foo/.x', u'foo/bar/bax']),
 
151
            (u'**/bar',
 
152
             [u'bar', u'foo/bar'],
 
153
             [u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar', 
 
154
              u'.bar', u'foo/.bar']),
 
155
            # check that we ignore extra *s, so *** is treated like ** not *.
 
156
            (u'foo/***/x',
 
157
             [u'foo/x', u'foo/bar/x'],
 
158
             [u'foox', u'foo/bax', u'foo/.x', u'foo/bar/bax']),
 
159
            (u'***/bar',
 
160
             [u'bar', u'foo/bar'],
 
161
             [u'foobar', u'foo.bar', u'foo/foobar', u'foo/f.bar', 
 
162
              u'.bar', u'foo/.bar']),
 
163
            # the remaining tests check that ** is interpreted as *
 
164
            # unless it is a whole path component
 
165
            (u'x**/x',
 
166
             [u'x\u8336/x', u'x/x'],
 
167
             [u'xx', u'x.x', u'bar/x/bar/x', u'x.y.x', u'x/y/x']),
 
168
            (u'x**x',
 
169
             [u'xx', u'x.x', u'x\u8336..x', u'foo/x.x', u'x.y.x'],
 
170
             [u'bar/x/bar/x', u'xfoo/bar/x', u'x/x', u'bax/abaxab']),
 
171
            (u'foo/**x',
 
172
             [u'foo/x', u'foo/bax', u'foo/a.x', u'foo/.x', u'foo/.q.x'],
 
173
             [u'foo/bar/bax']),
 
174
            (u'f**',
 
175
             [u'foo', u'foo.bar'],
 
176
             [u'.foo', u'foo/bar', u'foo/.bar']),
 
177
            (u'**bar',
 
178
             [u'bar', u'foobar', ur'foo\nbar', u'foo.bar', u'foo/bar', 
 
179
              u'foo/foobar', u'foo/f.bar', u'.bar', u'foo/.bar'],
 
180
             []),
 
181
            ])
 
182
 
 
183
    def test_leading_dot_slash(self):
145
184
        self.assertMatch([
146
185
            (u'./foo',
147
186
             [u'foo'],
151
190
             [u'foo/bar', u'foo/.bar', u'x/foo/y']),
152
191
            ])
153
192
 
154
 
    def test_leading_stardot(self):
 
193
    def test_leading_asterisk_dot(self):
155
194
        self.assertMatch([
156
195
            (u'*.x',
157
 
             [u'foo/bar/baz.x', u'\u8336/Q.x', u'foo.y.x'],
158
 
             [ u'.foo.x', u'bar/.foo.x', u'.x']),
 
196
             [u'foo/bar/baz.x', u'\u8336/Q.x', u'foo.y.x', u'.foo.x', 
 
197
              u'bar/.foo.x', u'.x',],
 
198
             [u'foo.x.y']),
159
199
            (u'foo/*.bar',
160
 
             [u'foo/b.bar', u'foo/a.b.bar'],
161
 
             [u'foo/.bar', u'foo/bar']),
 
200
             [u'foo/b.bar', u'foo/a.b.bar', u'foo/.bar'],
 
201
             [u'foo/bar']),
162
202
            (u'*.~*',
163
 
             [u'foo.py.~1~'],
164
 
             [u'.foo.py.~1~']),
 
203
             [u'foo.py.~1~', u'.foo.py.~1~'],
 
204
             []),
165
205
            ])
166
206
 
167
207
    def test_end_anchor(self):