blob: 85c3fac6114ca4894ddb7b422ab5669d32582eeb [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() {
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)));
});
}