| // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'package:glob/glob.dart'; | |
| import 'package:path/path.dart' as p; | |
| import 'package:test/test.dart'; | |
| void main() { | |
| test('supports backslash-escaped characters', () { | |
| expect(r'*[]{,}?()', contains(Glob(r'\*\[\]\{\,\}\?\(\)'))); | |
| if (p.style != p.Style.windows) { | |
| expect(r'foo\bar', contains(Glob(r'foo\\bar'))); | |
| } | |
| }); | |
| test('disallows an empty glob', () { | |
| expect(() => Glob(''), throwsFormatException); | |
| }); | |
| group('range', () { | |
| test('supports either ^ or ! for negated ranges', () { | |
| var bang = Glob('fo[!a-z]'); | |
| expect('foo', isNot(contains(bang))); | |
| expect('fo2', contains(bang)); | |
| var caret = Glob('fo[^a-z]'); | |
| expect('foo', isNot(contains(caret))); | |
| expect('fo2', contains(caret)); | |
| }); | |
| test('supports backslash-escaped characters', () { | |
| var glob = Glob(r'fo[\*\--\]]'); | |
| expect('fo]', contains(glob)); | |
| expect('fo-', contains(glob)); | |
| expect('fo*', contains(glob)); | |
| }); | |
| test('disallows inverted ranges', () { | |
| expect(() => Glob(r'[z-a]'), throwsFormatException); | |
| }); | |
| test('disallows empty ranges', () { | |
| expect(() => Glob(r'[]'), throwsFormatException); | |
| }); | |
| test('disallows unclosed ranges', () { | |
| expect(() => Glob(r'[abc'), throwsFormatException); | |
| expect(() => Glob(r'[-'), throwsFormatException); | |
| }); | |
| test('disallows dangling ]', () { | |
| expect(() => Glob(r'abc]'), throwsFormatException); | |
| }); | |
| test('disallows explicit /', () { | |
| expect(() => Glob(r'[/]'), throwsFormatException); | |
| expect(() => Glob(r'[ -/]'), throwsFormatException); | |
| expect(() => Glob(r'[/-~]'), throwsFormatException); | |
| }); | |
| }); | |
| group('options', () { | |
| test('allows empty branches', () { | |
| var glob = Glob('foo{,bar}'); | |
| expect('foo', contains(glob)); | |
| expect('foobar', contains(glob)); | |
| }); | |
| test('disallows empty options', () { | |
| expect(() => Glob('{}'), throwsFormatException); | |
| }); | |
| test('disallows single options', () { | |
| expect(() => Glob('{foo}'), throwsFormatException); | |
| }); | |
| test('disallows unclosed options', () { | |
| expect(() => Glob('{foo,bar'), throwsFormatException); | |
| expect(() => Glob('{foo,'), throwsFormatException); | |
| }); | |
| test('disallows dangling }', () { | |
| expect(() => Glob('foo}'), throwsFormatException); | |
| }); | |
| test('disallows dangling ] in options', () { | |
| expect(() => Glob(r'{abc]}'), throwsFormatException); | |
| }); | |
| }); | |
| test('disallows unescaped parens', () { | |
| expect(() => Glob('foo(bar'), throwsFormatException); | |
| expect(() => Glob('foo)bar'), throwsFormatException); | |
| }); | |
| } |