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