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