Dartfmt and add travis support. (#11)
* Dartfmt and add travis support.
* Feedback.
* Remove -j=1.
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..45a6c6e
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,27 @@
+language: dart
+
+# Speed up builds by using containerization.
+sudo: false
+
+dart:
+ - dev
+ - stable
+
+# See https://docs.travis-ci.com/user/languages/dart/ for details.
+dart_task:
+ - test: --platform vm,dartium,firefox
+ install_dartium: true
+ - dartanalyzer
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+ only: [master]
+
+matrix:
+ include:
+ - dart: stable
+ dart_task: dartfmt
+
+cache:
+ directories:
+ - $HOME/.pub-cache
diff --git a/lib/glob.dart b/lib/glob.dart
index ca83969..a7d6b4c 100644
--- a/lib/glob.dart
+++ b/lib/glob.dart
@@ -58,6 +58,7 @@
}
return _contextIsAbsoluteCache;
}
+
bool _contextIsAbsoluteCache;
/// Whether [pattern] could match absolute paths.
@@ -67,6 +68,7 @@
}
return _patternCanMatchAbsoluteCache;
}
+
bool _patternCanMatchAbsoluteCache;
/// Whether [pattern] could match relative paths.
@@ -76,6 +78,7 @@
}
return _patternCanMatchRelativeCache;
}
+
bool _patternCanMatchRelativeCache;
/// Returns [contents] with characters that are meaningful in globs
@@ -95,8 +98,8 @@
/// case matches that of the characters in the glob. Otherwise, it matches
/// regardless of case. This defaults to `false` when [context] is Windows and
/// `true` otherwise.
- factory Glob(String pattern, {p.Context context, bool recursive: false,
- bool caseSensitive}) {
+ factory Glob(String pattern,
+ {p.Context context, bool recursive: false, bool caseSensitive}) {
context ??= p.context;
caseSensitive ??= context.style == p.Style.windows ? false : true;
if (recursive) pattern += "{,/**}";
diff --git a/lib/src/ast.dart b/lib/src/ast.dart
index 5e24e2b..c703711 100644
--- a/lib/src/ast.dart
+++ b/lib/src/ast.dart
@@ -38,9 +38,9 @@
///
/// For example, given the glob `{foo,bar}/{click/clack}`, this would return
/// `{foo/click,foo/clack,bar/click,bar/clack}`.
- OptionsNode flattenOptions() => new OptionsNode(
- [new SequenceNode([this], caseSensitive: caseSensitive)],
- caseSensitive: caseSensitive);
+ OptionsNode flattenOptions() => new OptionsNode([
+ new SequenceNode([this], caseSensitive: caseSensitive)
+ ], caseSensitive: caseSensitive);
/// Returns whether this glob matches [string].
bool matches(String string) {
@@ -71,8 +71,8 @@
return new OptionsNode([this], caseSensitive: caseSensitive);
}
- var sequences = nodes.first.flattenOptions().options
- .map((sequence) => sequence.nodes);
+ var sequences =
+ nodes.first.flattenOptions().options.map((sequence) => sequence.nodes);
for (var node in nodes.skip(1)) {
// Concatenate all sequences in the next options node ([nextSequences])
// onto all previous sequences ([sequences]).
@@ -86,18 +86,22 @@
return new OptionsNode(sequences.map((sequence) {
// Combine any adjacent LiteralNodes in [sequence].
- return new SequenceNode(sequence.fold/*<List<AstNode>>*/([], (combined, node) {
- if (combined.isEmpty || combined.last is! LiteralNode ||
- node is! LiteralNode) {
- return combined..add(node);
- }
+ return new SequenceNode(
+ sequence.fold/*<List<AstNode>>*/([], (combined, node) {
+ if (combined.isEmpty ||
+ combined.last is! LiteralNode ||
+ node is! LiteralNode) {
+ return combined..add(node);
+ }
- combined[combined.length - 1] = new LiteralNode(
- // TODO(nweiz): Avoid casting when sdk#25565 is fixed.
- (combined.last as LiteralNode).text + (node as LiteralNode).text,
- caseSensitive: caseSensitive);
- return combined;
- }), caseSensitive: caseSensitive);
+ combined[combined.length - 1] = new LiteralNode(
+ // TODO(nweiz): Avoid casting when sdk#25565 is fixed.
+ (combined.last as LiteralNode).text +
+ (node as LiteralNode).text,
+ caseSensitive: caseSensitive);
+ return combined;
+ }),
+ caseSensitive: caseSensitive);
}), caseSensitive: caseSensitive);
}
@@ -185,7 +189,8 @@
String _toRegExp() => nodes.map((node) => node._toRegExp()).join();
- bool operator==(Object other) => other is SequenceNode &&
+ bool operator ==(Object other) =>
+ other is SequenceNode &&
const IterableEquality().equals(nodes, other.nodes);
int get hashCode => const IterableEquality().hash(nodes);
@@ -199,7 +204,7 @@
String _toRegExp() => '[^/]*';
- bool operator==(Object other) => other is StarNode;
+ bool operator ==(Object other) => other is StarNode;
int get hashCode => 0;
@@ -241,7 +246,7 @@
return buffer.toString();
}
- bool operator==(Object other) => other is DoubleStarNode;
+ bool operator ==(Object other) => other is DoubleStarNode;
int get hashCode => 1;
@@ -254,7 +259,7 @@
String _toRegExp() => '[^/]';
- bool operator==(Object other) => other is AnyCharNode;
+ bool operator ==(Object other) => other is AnyCharNode;
int get hashCode => 2;
@@ -319,7 +324,7 @@
return buffer.toString();
}
- bool operator==(Object other) {
+ bool operator ==(Object other) {
if (other is! RangeNode) return false;
if ((other as RangeNode).negated != negated) return false;
return const SetEquality().equals(ranges, (other as RangeNode).ranges);
@@ -359,7 +364,8 @@
String _toRegExp() =>
'(?:${options.map((option) => option._toRegExp()).join("|")})';
- bool operator==(Object other) => other is OptionsNode &&
+ bool operator ==(Object other) =>
+ other is OptionsNode &&
const UnorderedIterableEquality().equals(options, other.options);
int get hashCode => const UnorderedIterableEquality().hash(options);
@@ -378,8 +384,8 @@
final p.Context _context;
bool get canMatchAbsolute {
- var nativeText = _context.style == p.Style.windows ?
- text.replaceAll('/', '\\') : text;
+ var nativeText =
+ _context.style == p.Style.windows ? text.replaceAll('/', '\\') : text;
return _context.isAbsolute(nativeText);
}
@@ -391,7 +397,7 @@
String _toRegExp() => regExpQuote(text);
- bool operator==(Object other) => other is LiteralNode && other.text == text;
+ bool operator ==(Object other) => other is LiteralNode && other.text == text;
int get hashCode => text.hashCode;
diff --git a/lib/src/list_tree.dart b/lib/src/list_tree.dart
index c886ec7..deffdc9 100644
--- a/lib/src/list_tree.dart
+++ b/lib/src/list_tree.dart
@@ -143,8 +143,8 @@
parent = parent.children[component];
}
} else if (recursive) {
- _trees[root] = new _ListTreeNode.recursive(
- _join(components.sublist(i)));
+ _trees[root] =
+ new _ListTreeNode.recursive(_join(components.sublist(i)));
return;
} else if (complete) {
_trees[root] = new _ListTreeNode()..addOption(component);
@@ -300,8 +300,8 @@
/// Adds [validator] to this node's existing validator.
void addOption(SequenceNode validator) {
if (_validator == null) {
- _validator = new OptionsNode([validator],
- caseSensitive: validator.caseSensitive);
+ _validator =
+ new OptionsNode([validator], caseSensitive: validator.caseSensitive);
} else {
_validator.options.add(validator);
}
@@ -313,7 +313,8 @@
/// [ListTree.list].
Stream<FileSystemEntity> list(String dir, {bool followLinks: true}) {
if (isRecursive) {
- return new Directory(dir).list(recursive: true, followLinks: followLinks)
+ return new Directory(dir)
+ .list(recursive: true, followLinks: followLinks)
.where((entity) => _matches(p.relative(entity.path, from: dir)));
}
@@ -331,8 +332,8 @@
}
return StreamCompleter.fromFuture(() async {
- var entities = await new Directory(dir)
- .list(followLinks: followLinks).toList();
+ var entities =
+ await new Directory(dir).list(followLinks: followLinks).toList();
await _validateIntermediateChildrenAsync(dir, entities);
var resultGroup = new StreamGroup<FileSystemEntity>();
@@ -354,7 +355,7 @@
// succeed if "foo/bar/qux/baz" doesn't exist.
return error is FileSystemException &&
(error.osError.errorCode == _ENOENT ||
- error.osError.errorCode == _ENOENT_WIN);
+ error.osError.errorCode == _ENOENT_WIN);
});
resultGroup.add(stream);
});
@@ -371,15 +372,15 @@
///
/// This ensures that listing "foo/bar/*" fails on case-sensitive systems if
/// "foo/bar" doesn't exist.
- Future _validateIntermediateChildrenAsync(String dir,
- List<FileSystemEntity> entities) async {
+ Future _validateIntermediateChildrenAsync(
+ String dir, List<FileSystemEntity> entities) async {
if (_caseSensitive) return;
for (var sequence in children.keys) {
var child = children[sequence];
if (!child._isIntermediate) continue;
- if (entities.any((entity) =>
- sequence.matches(p.relative(entity.path, from: dir)))) {
+ if (entities.any(
+ (entity) => sequence.matches(p.relative(entity.path, from: dir)))) {
continue;
}
@@ -426,8 +427,9 @@
.where((sequence) => sequence.matches(basename))
.expand((sequence) {
try {
- return children[sequence].listSync(
- p.join(dir, basename), followLinks: followLinks).toList();
+ return children[sequence]
+ .listSync(p.join(dir, basename), followLinks: followLinks)
+ .toList();
} on FileSystemException catch (error) {
// Ignore errors from directories not existing. We do this here so
// that we only ignore warnings below wild cards. For example, the
@@ -452,14 +454,14 @@
///
/// This ensures that listing "foo/bar/*" fails on case-sensitive systems if
/// "foo/bar" doesn't exist.
- void _validateIntermediateChildrenSync(String dir,
- List<FileSystemEntity> entities) {
+ void _validateIntermediateChildrenSync(
+ String dir, List<FileSystemEntity> entities) {
if (_caseSensitive) return;
children.forEach((sequence, child) {
if (!child._isIntermediate) return;
- if (entities.any((entity) =>
- sequence.matches(p.relative(entity.path, from: dir)))) {
+ if (entities.any(
+ (entity) => sequence.matches(p.relative(entity.path, from: dir)))) {
return;
}
@@ -467,8 +469,7 @@
// directory to force `dart:io` to throw an error. This allows us to
// ensure that listing "foo/bar/*" fails on case-sensitive systems if
// "foo/bar" doesn't exist.
- child
- .listSync(p.join(dir, (sequence.nodes.single as LiteralNode).text));
+ child.listSync(p.join(dir, (sequence.nodes.single as LiteralNode).text));
});
}
diff --git a/lib/src/parser.dart b/lib/src/parser.dart
index d3c7e1d..a4e840c 100644
--- a/lib/src/parser.dart
+++ b/lib/src/parser.dart
@@ -120,8 +120,7 @@
if (end < char) {
_scanner.error("Range out of order.",
- position: start,
- length: _scanner.position - start);
+ position: start, length: _scanner.position - start);
}
ranges.add(new Range(char, end));
} else {
@@ -156,8 +155,8 @@
AstNode _parseLiteral({bool inOptions: false}) {
// If we're in an options block, we want to stop parsing as soon as we hit a
// comma. Otherwise, commas are fair game for literals.
- var regExp = new RegExp(
- inOptions ? r'[^*{[?\\}\],()]*' : r'[^*{[?\\}\]()]*');
+ var regExp =
+ new RegExp(inOptions ? r'[^*{[?\\}\],()]*' : r'[^*{[?\\}\]()]*');
_scanner.scan(regExp);
var buffer = new StringBuffer()..write(_scanner.lastMatch[0]);
diff --git a/lib/src/stream_pool.dart b/lib/src/stream_pool.dart
index 817d57a..cce94ed 100644
--- a/lib/src/stream_pool.dart
+++ b/lib/src/stream_pool.dart
@@ -46,8 +46,7 @@
void add(Stream<T> stream) {
if (_subscriptions.containsKey(stream)) return;
_subscriptions[stream] = stream.listen(_controller.add,
- onError: _controller.addError,
- onDone: () => remove(stream));
+ onError: _controller.addError, onDone: () => remove(stream));
}
/// Removes [stream] as a member of this pool.
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 94f6a05..13c0b99 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -18,14 +18,13 @@
Range(this.min, this.max);
/// Returns a range that covers only [value].
- Range.singleton(int value)
- : this(value, value);
+ Range.singleton(int value) : this(value, value);
/// Whether [this] contains [value].
bool contains(int value) => value >= min && value <= max;
- bool operator==(Object other) => other is Range &&
- other.min == min && other.max == max;
+ bool operator ==(Object other) =>
+ other is Range && other.min == min && other.max == max;
int get hashCode => 3 * min + 7 * max;
}
diff --git a/test/list_test.dart b/test/list_test.dart
index 9a389e8..8729a38 100644
--- a/test/list_test.dart
+++ b/test/list_test.dart
@@ -2,6 +2,7 @@
// 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.
+@TestOn('vm')
import 'dart:async';
import 'dart:io';
@@ -10,6 +11,7 @@
import 'package:path/path.dart' as p;
import 'package:scheduled_test/descriptor.dart' as d;
import 'package:scheduled_test/scheduled_test.dart';
+import 'package:test/test.dart' show TestOn;
String sandbox;
@@ -19,10 +21,7 @@
d.dir("foo", [
d.file("bar"),
- d.dir("baz", [
- d.file("bang"),
- d.file("qux")
- ])
+ d.dir("baz", [d.file("bang"), d.file("qux")])
]).create();
});
@@ -41,7 +40,8 @@
test("reports exceptions for non-existent case-insensitive directories",
() {
schedule(() {
- expect(new Glob("non/existent/**", caseSensitive: false).list().toList(),
+ expect(
+ new Glob("non/existent/**", caseSensitive: false).list().toList(),
throwsA(new isInstanceOf<FileSystemException>()));
});
});
@@ -105,10 +105,10 @@
group("star", () {
test("lists within filenames but not across directories", () {
- expect(list("foo/b*"), completion(unorderedEquals([
- p.join("foo", "bar"),
- p.join("foo", "baz")
- ])));
+ expect(
+ list("foo/b*"),
+ completion(
+ unorderedEquals([p.join("foo", "bar"), p.join("foo", "baz")])));
});
test("lists the empy string", () {
@@ -118,10 +118,10 @@
group("double star", () {
test("lists within filenames", () {
- expect(list("foo/baz/**"), completion(unorderedEquals([
- p.join("foo", "baz", "qux"),
- p.join("foo", "baz", "bang")
- ])));
+ expect(
+ list("foo/baz/**"),
+ completion(unorderedEquals(
+ [p.join("foo", "baz", "qux"), p.join("foo", "baz", "bang")])));
});
test("lists the empty string", () {
@@ -129,49 +129,52 @@
});
test("lists recursively", () {
- expect(list("foo/**"), completion(unorderedEquals([
- p.join("foo", "bar"),
- p.join("foo", "baz"),
- p.join("foo", "baz", "qux"),
- p.join("foo", "baz", "bang")
- ])));
+ expect(
+ list("foo/**"),
+ completion(unorderedEquals([
+ p.join("foo", "bar"),
+ p.join("foo", "baz"),
+ p.join("foo", "baz", "qux"),
+ p.join("foo", "baz", "bang")
+ ])));
});
test("combines with literals", () {
- expect(list("foo/ba**"), completion(unorderedEquals([
- p.join("foo", "bar"),
- p.join("foo", "baz"),
- p.join("foo", "baz", "qux"),
- p.join("foo", "baz", "bang")
- ])));
+ expect(
+ list("foo/ba**"),
+ completion(unorderedEquals([
+ p.join("foo", "bar"),
+ p.join("foo", "baz"),
+ p.join("foo", "baz", "qux"),
+ p.join("foo", "baz", "bang")
+ ])));
});
test("lists recursively in the middle of a glob", () {
d.dir("deep", [
d.dir("a", [
d.dir("b", [
- d.dir("c", [
- d.file("d"),
- d.file("long-file")
- ]),
+ d.dir("c", [d.file("d"), d.file("long-file")]),
d.dir("long-dir", [d.file("x")])
])
])
]).create();
- expect(list("deep/**/?/?"), completion(unorderedEquals([
- p.join("deep", "a", "b", "c"),
- p.join("deep", "a", "b", "c", "d")
- ])));
+ expect(
+ list("deep/**/?/?"),
+ completion(unorderedEquals([
+ p.join("deep", "a", "b", "c"),
+ p.join("deep", "a", "b", "c", "d")
+ ])));
});
});
group("any char", () {
test("matches a character", () {
- expect(list("foo/ba?"), completion(unorderedEquals([
- p.join("foo", "bar"),
- p.join("foo", "baz")
- ])));
+ expect(
+ list("foo/ba?"),
+ completion(
+ unorderedEquals([p.join("foo", "bar"), p.join("foo", "baz")])));
});
test("doesn't match a separator", () {
@@ -181,17 +184,17 @@
group("range", () {
test("matches a range of characters", () {
- expect(list("foo/ba[a-z]"), completion(unorderedEquals([
- p.join("foo", "bar"),
- p.join("foo", "baz")
- ])));
+ expect(
+ list("foo/ba[a-z]"),
+ completion(
+ unorderedEquals([p.join("foo", "bar"), p.join("foo", "baz")])));
});
test("matches a specific list of characters", () {
- expect(list("foo/ba[rz]"), completion(unorderedEquals([
- p.join("foo", "bar"),
- p.join("foo", "baz")
- ])));
+ expect(
+ list("foo/ba[rz]"),
+ completion(
+ unorderedEquals([p.join("foo", "bar"), p.join("foo", "baz")])));
});
test("doesn't match outside its range", () {
@@ -220,23 +223,21 @@
d.dir("a", [
d.dir("b", [
d.file("file"),
- d.dir("c", [
- d.file("file")
- ])
+ d.dir("c", [d.file("file")])
]),
d.dir("x", [
- d.dir("y", [
- d.file("file")
- ])
+ d.dir("y", [d.file("file")])
])
])
]).create();
- expect(list("multi/{*/*/*/file,a/**/file}"), completion(unorderedEquals([
- p.join("multi", "a", "b", "file"),
- p.join("multi", "a", "b", "c", "file"),
- p.join("multi", "a", "x", "y", "file")
- ])));
+ expect(
+ list("multi/{*/*/*/file,a/**/file}"),
+ completion(unorderedEquals([
+ p.join("multi", "a", "b", "file"),
+ p.join("multi", "a", "b", "c", "file"),
+ p.join("multi", "a", "x", "y", "file")
+ ])));
});
group("with symlinks", () {
@@ -248,11 +249,13 @@
});
test("follows symlinks by default", () {
- expect(list("dir/**"), completion(unorderedEquals([
- p.join("dir", "link"),
- p.join("dir", "link", "bang"),
- p.join("dir", "link", "qux")
- ])));
+ expect(
+ list("dir/**"),
+ completion(unorderedEquals([
+ p.join("dir", "link"),
+ p.join("dir", "link", "bang"),
+ p.join("dir", "link", "qux")
+ ])));
});
test("doesn't follow symlinks with followLinks: false", () {
@@ -270,38 +273,38 @@
});
test("always lists recursively with recursive: true", () {
- expect(list("foo", recursive: true), completion(unorderedEquals([
- "foo",
- p.join("foo", "bar"),
- p.join("foo", "baz"),
- p.join("foo", "baz", "qux"),
- p.join("foo", "baz", "bang")
- ])));
+ expect(
+ list("foo", recursive: true),
+ completion(unorderedEquals([
+ "foo",
+ p.join("foo", "bar"),
+ p.join("foo", "baz"),
+ p.join("foo", "baz", "qux"),
+ p.join("foo", "baz", "bang")
+ ])));
});
test("lists an absolute glob", () {
expect(schedule(() {
- var pattern = separatorToForwardSlash(
- p.absolute(p.join(sandbox, 'foo/baz/**')));
+ var pattern =
+ separatorToForwardSlash(p.absolute(p.join(sandbox, 'foo/baz/**')));
return list(pattern);
- }), completion(unorderedEquals([
- p.join("foo", "baz", "bang"),
- p.join("foo", "baz", "qux")
- ])));
+ }),
+ completion(unorderedEquals(
+ [p.join("foo", "baz", "bang"), p.join("foo", "baz", "qux")])));
});
// Regression test for #4.
test("lists an absolute case-insensitive glob", () {
expect(schedule(() {
- var pattern = separatorToForwardSlash(
- p.absolute(p.join(sandbox, 'foo/Baz/**')));
+ var pattern =
+ separatorToForwardSlash(p.absolute(p.join(sandbox, 'foo/Baz/**')));
return list(pattern, caseSensitive: false);
- }), completion(unorderedEquals([
- p.join("foo", "baz", "bang"),
- p.join("foo", "baz", "qux")
- ])));
+ }),
+ completion(unorderedEquals(
+ [p.join("foo", "baz", "bang"), p.join("foo", "baz", "qux")])));
}, skip: "Broken by sdk#28015.");
test("lists a subdirectory that sometimes exists", () {
diff --git a/test/match_test.dart b/test/match_test.dart
index 13dc7d6..50d6f13 100644
--- a/test/match_test.dart
+++ b/test/match_test.dart
@@ -11,8 +11,9 @@
"GHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~";
// URL-encode the path for a URL context.
-final asciiWithoutSlash = p.style == p.Style.url ?
- Uri.encodeFull(RAW_ASCII_WITHOUT_SLASH) : RAW_ASCII_WITHOUT_SLASH;
+final asciiWithoutSlash = p.style == p.Style.url
+ ? Uri.encodeFull(RAW_ASCII_WITHOUT_SLASH)
+ : RAW_ASCII_WITHOUT_SLASH;
void main() {
test("literals match exactly", () {
@@ -22,8 +23,8 @@
});
test("backslashes match nothing on Windows", () {
- expect(r"foo\bar",
- isNot(contains(new Glob(r"foo\\bar", context: p.windows))));
+ expect(
+ r"foo\bar", isNot(contains(new Glob(r"foo\\bar", context: p.windows))));
});
group("star", () {
@@ -237,7 +238,7 @@
test("a relative path can be matched by an absolute glob", () {
var pattern = separatorToForwardSlash(p.absolute('foo/bar'));
expect('foo/bar', contains(new Glob(pattern)));
- });
+ }, testOn: 'vm');
group("with recursive: true", () {
var glob = new Glob("foo/bar", recursive: true);
@@ -270,20 +271,20 @@
expect(r"\\foo\bar\baz",
contains(new Glob("//foo/bar/baz", context: p.windows)));
- expect(r"\\foo\bar\baz",
- isNot(contains(new Glob("**", context: p.windows))));
+ expect(
+ r"\\foo\bar\baz", isNot(contains(new Glob("**", context: p.windows))));
expect(r"\\foo\bar\baz", contains(new Glob("//**", context: p.windows)));
- expect(r"\\foo\bar\baz",
- contains(new Glob("//foo/**", context: p.windows)));
+ expect(
+ r"\\foo\bar\baz", contains(new Glob("//foo/**", context: p.windows)));
});
test("absolute URL paths", () {
expect(r"http://foo.com/bar",
contains(new Glob("http://foo.com/bar", context: p.url)));
- expect(r"http://foo.com/bar",
- isNot(contains(new Glob("**", context: p.url))));
- expect(r"http://foo.com/bar",
- contains(new Glob("http://**", context: p.url)));
+ expect(
+ r"http://foo.com/bar", isNot(contains(new Glob("**", context: p.url))));
+ expect(
+ r"http://foo.com/bar", contains(new Glob("http://**", context: p.url)));
expect(r"http://foo.com/bar",
contains(new Glob("http://foo.com/**", context: p.url)));
@@ -301,26 +302,26 @@
test("ranges match case-sensitively", () {
expect("foo", contains(new Glob("[fx][a-z]o", caseSensitive: true)));
- expect("FOO",
- isNot(contains(new Glob("[fx][a-z]o", caseSensitive: true))));
- expect("foo",
- isNot(contains(new Glob("[FX][A-Z]O", caseSensitive: true))));
+ expect(
+ "FOO", isNot(contains(new Glob("[fx][a-z]o", caseSensitive: true))));
+ expect(
+ "foo", isNot(contains(new Glob("[FX][A-Z]O", caseSensitive: true))));
});
test("sequences preserve case-sensitivity", () {
expect("foo/bar", contains(new Glob("foo/bar", caseSensitive: true)));
- expect("FOO/BAR",
- isNot(contains(new Glob("foo/bar", caseSensitive: true))));
- expect("foo/bar",
- isNot(contains(new Glob("FOO/BAR", caseSensitive: true))));
+ expect(
+ "FOO/BAR", isNot(contains(new Glob("foo/bar", caseSensitive: true))));
+ expect(
+ "foo/bar", isNot(contains(new Glob("FOO/BAR", caseSensitive: true))));
});
test("options preserve case-sensitivity", () {
expect("foo", contains(new Glob("{foo,bar}", caseSensitive: true)));
- expect("FOO",
- isNot(contains(new Glob("{foo,bar}", caseSensitive: true))));
- expect("foo",
- isNot(contains(new Glob("{FOO,BAR}", caseSensitive: true))));
+ expect(
+ "FOO", isNot(contains(new Glob("{foo,bar}", caseSensitive: true))));
+ expect(
+ "foo", isNot(contains(new Glob("{FOO,BAR}", caseSensitive: true))));
});
});