blob: 3923031de73a059b58c8494ea758488d78ae7e40 [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)));
});
}