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