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