// 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); }); }