112 lines
3.6 KiB
Dart
112 lines
3.6 KiB
Dart
|
|
// 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() {
|
||
|
|
group('Glob.quote()', () {
|
||
|
|
test('quotes all active characters', () {
|
||
|
|
expect(Glob.quote('*{[?\\}],-'), equals(r'\*\{\[\?\\\}\]\,\-'));
|
||
|
|
});
|
||
|
|
|
||
|
|
test("doesn't quote inactive characters", () {
|
||
|
|
expect(Glob.quote('abc~`_+='), equals('abc~`_+='));
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
group('Glob.matches()', () {
|
||
|
|
test('returns whether the path matches the glob', () {
|
||
|
|
var glob = Glob('foo*');
|
||
|
|
expect(glob.matches('foobar'), isTrue);
|
||
|
|
expect(glob.matches('baz'), isFalse);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('only matches the entire path', () {
|
||
|
|
var glob = Glob('foo');
|
||
|
|
expect(glob.matches('foo/bar'), isFalse);
|
||
|
|
expect(glob.matches('bar/foo'), isFalse);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
group('Glob.matchAsPrefix()', () {
|
||
|
|
test('returns a match if the path matches the glob', () {
|
||
|
|
var glob = Glob('foo*');
|
||
|
|
expect(glob.matchAsPrefix('foobar'), isA<Match>());
|
||
|
|
expect(glob.matchAsPrefix('baz'), isNull);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('returns null for start > 0', () {
|
||
|
|
var glob = Glob('*');
|
||
|
|
expect(glob.matchAsPrefix('foobar', 1), isNull);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
group('Glob.allMatches()', () {
|
||
|
|
test('returns a single match if the path matches the glob', () {
|
||
|
|
var matches = Glob('foo*').allMatches('foobar');
|
||
|
|
expect(matches, hasLength(1));
|
||
|
|
expect(matches.first, isA<Match>());
|
||
|
|
});
|
||
|
|
|
||
|
|
test("returns an empty list if the path doesn't match the glob", () {
|
||
|
|
expect(Glob('foo*').allMatches('baz'), isEmpty);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('returns no matches for start > 0', () {
|
||
|
|
var glob = Glob('*');
|
||
|
|
expect(glob.allMatches('foobar', 1), isEmpty);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
group('GlobMatch', () {
|
||
|
|
var glob = Glob('foo*');
|
||
|
|
var match = glob.matchAsPrefix('foobar')!;
|
||
|
|
|
||
|
|
test('returns the string as input', () {
|
||
|
|
expect(match.input, equals('foobar'));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('returns the glob as the pattern', () {
|
||
|
|
expect(match.pattern, equals(glob));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('returns the span of the string for start and end', () {
|
||
|
|
expect(match.start, equals(0));
|
||
|
|
expect(match.end, equals('foobar'.length));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('has a single group that contains the whole string', () {
|
||
|
|
expect(match.groupCount, equals(0));
|
||
|
|
expect(match[0], equals('foobar'));
|
||
|
|
expect(match.group(0), equals('foobar'));
|
||
|
|
expect(match.groups([0]), equals(['foobar']));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('throws a range error for an invalid group', () {
|
||
|
|
expect(() => match[1], throwsRangeError);
|
||
|
|
expect(() => match[-1], throwsRangeError);
|
||
|
|
expect(() => match.group(1), throwsRangeError);
|
||
|
|
expect(() => match.groups([1]), throwsRangeError);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
test('globs are case-sensitive by default for Posix and URL contexts', () {
|
||
|
|
expect('foo', contains(Glob('foo', context: p.posix)));
|
||
|
|
expect('FOO', isNot(contains(Glob('foo', context: p.posix))));
|
||
|
|
expect('foo', isNot(contains(Glob('FOO', context: p.posix))));
|
||
|
|
|
||
|
|
expect('foo', contains(Glob('foo', context: p.url)));
|
||
|
|
expect('FOO', isNot(contains(Glob('foo', context: p.url))));
|
||
|
|
expect('foo', isNot(contains(Glob('FOO', context: p.url))));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('globs are case-insensitive by default for Windows contexts', () {
|
||
|
|
expect('foo', contains(Glob('foo', context: p.windows)));
|
||
|
|
expect('FOO', contains(Glob('foo', context: p.windows)));
|
||
|
|
expect('foo', contains(Glob('FOO', context: p.windows)));
|
||
|
|
});
|
||
|
|
}
|