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