blob: 5a075e72bec40eda7e4c98c912704ae98e29d483 [file] [log] [blame]
// 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);
});
}