| // 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() { |
| test("supports backslash-escaped characters", () { |
| expect(r"*[]{,}?()", contains(new Glob(r"\*\[\]\{\,\}\?\(\)"))); |
| if (p.style != p.Style.windows) { |
| expect(r"foo\bar", contains(new Glob(r"foo\\bar"))); |
| } |
| }); |
| |
| test("disallows an empty glob", () { |
| expect(() => new Glob(""), throwsFormatException); |
| }); |
| |
| group("range", () { |
| test("supports either ^ or ! for negated ranges", () { |
| var bang = new Glob("fo[!a-z]"); |
| expect("foo", isNot(contains(bang))); |
| expect("fo2", contains(bang)); |
| |
| var caret = new Glob("fo[^a-z]"); |
| expect("foo", isNot(contains(caret))); |
| expect("fo2", contains(caret)); |
| }); |
| |
| test("supports backslash-escaped characters", () { |
| var glob = new Glob(r"fo[\*\--\]]"); |
| expect("fo]", contains(glob)); |
| expect("fo-", contains(glob)); |
| expect("fo*", contains(glob)); |
| }); |
| |
| test("disallows inverted ranges", () { |
| expect(() => new Glob(r"[z-a]"), throwsFormatException); |
| }); |
| |
| test("disallows empty ranges", () { |
| expect(() => new Glob(r"[]"), throwsFormatException); |
| }); |
| |
| test("disallows unclosed ranges", () { |
| expect(() => new Glob(r"[abc"), throwsFormatException); |
| expect(() => new Glob(r"[-"), throwsFormatException); |
| }); |
| |
| test("disallows dangling ]", () { |
| expect(() => new Glob(r"abc]"), throwsFormatException); |
| }); |
| |
| test("disallows explicit /", () { |
| expect(() => new Glob(r"[/]"), throwsFormatException); |
| expect(() => new Glob(r"[ -/]"), throwsFormatException); |
| expect(() => new Glob(r"[/-~]"), throwsFormatException); |
| }); |
| }); |
| |
| group("options", () { |
| test("allows empty branches", () { |
| var glob = new Glob("foo{,bar}"); |
| expect("foo", contains(glob)); |
| expect("foobar", contains(glob)); |
| }); |
| |
| test("disallows empty options", () { |
| expect(() => new Glob("{}"), throwsFormatException); |
| }); |
| |
| test("disallows single options", () { |
| expect(() => new Glob("{foo}"), throwsFormatException); |
| }); |
| |
| test("disallows unclosed options", () { |
| expect(() => new Glob("{foo,bar"), throwsFormatException); |
| expect(() => new Glob("{foo,"), throwsFormatException); |
| }); |
| |
| test("disallows dangling }", () { |
| expect(() => new Glob("foo}"), throwsFormatException); |
| }); |
| |
| test("disallows dangling ] in options", () { |
| expect(() => new Glob(r"{abc]}"), throwsFormatException); |
| }); |
| }); |
| |
| test("disallows unescaped parens", () { |
| expect(() => new Glob("foo(bar"), throwsFormatException); |
| expect(() => new Glob("foo)bar"), throwsFormatException); |
| }); |
| } |