diff --git a/.gitignore b/.gitignore
index 85beae1..8f859de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 .DS_Store
 packages
+.packages
 pubspec.lock
 .project
 .pub/
diff --git a/lib/core.dart b/lib/core.dart
index 4b71483..e85eeba 100644
--- a/lib/core.dart
+++ b/lib/core.dart
@@ -53,13 +53,15 @@
   }
 
   var response = await processor.post(
-      uri.resolve('session'), {'desiredCapabilities': desired}, value: false);
+      uri.resolve('session'), {'desiredCapabilities': desired},
+      value: false);
   return new WebDriver(processor, uri, response['sessionId'],
       new UnmodifiableMapView(response['value']));
 }
 
 Future<WebDriver> fromExistingSession(
-    CommandProcessor processor, String sessionId, {Uri uri}) async {
+    CommandProcessor processor, String sessionId,
+    {Uri uri}) async {
   if (uri == null) {
     uri = defaultUri;
   }
diff --git a/lib/src/command_event.dart b/lib/src/command_event.dart
index c678b82..490d91e 100644
--- a/lib/src/command_event.dart
+++ b/lib/src/command_event.dart
@@ -23,8 +23,14 @@
   final exception;
   final result;
 
-  WebDriverCommandEvent({this.method, this.endPoint, this.params,
-      this.startTime, this.endTime, this.exception, this.result,
+  WebDriverCommandEvent(
+      {this.method,
+      this.endPoint,
+      this.params,
+      this.startTime,
+      this.endTime,
+      this.exception,
+      this.result,
       this.stackTrace});
 
   String toString() => '[$startTime - $endTime] $method $endPoint($params) => '
diff --git a/lib/src/keyboard.dart b/lib/src/keyboard.dart
index afd7e45..fa211bb 100644
--- a/lib/src/keyboard.dart
+++ b/lib/src/keyboard.dart
@@ -76,7 +76,9 @@
 
   /// Send [keysToSend] to the active element.
   Future sendKeys(String keysToSend) async {
-    await _post('keys', {'value': [keysToSend]});
+    await _post('keys', {
+      'value': [keysToSend]
+    });
   }
 
   @override
diff --git a/lib/src/logs.dart b/lib/src/logs.dart
index 59a1974..46f4e43 100644
--- a/lib/src/logs.dart
+++ b/lib/src/logs.dart
@@ -41,9 +41,12 @@
 
   const LogEntry(this.message, this.timestamp, this.level);
 
-  LogEntry.fromMap(Map map) : this(map['message'],
-          new DateTime.fromMillisecondsSinceEpoch(map['timestamp'].toInt(),
-              isUtc: true), map['level']);
+  LogEntry.fromMap(Map map)
+      : this(
+            map['message'],
+            new DateTime.fromMillisecondsSinceEpoch(map['timestamp'].toInt(),
+                isUtc: true),
+            map['level']);
 
   @override
   String toString() => '$level[$timestamp]: $message';
diff --git a/lib/src/options.dart b/lib/src/options.dart
index 254546f..36b4c39 100644
--- a/lib/src/options.dart
+++ b/lib/src/options.dart
@@ -53,14 +53,19 @@
 class Cookie {
   /// The name of the cookie.
   final String name;
+
   /// The cookie value.
   final String value;
+
   /// (Optional) The cookie path.
   final String path;
+
   /// (Optional) The domain the cookie is visible to.
   final String domain;
+
   /// (Optional) Whether the cookie is a secure cookie.
   final bool secure;
+
   /// (Optional) When the cookie expires.
   final DateTime expiry;
 
@@ -71,7 +76,8 @@
     var expiry;
     if (json['expiry'] is num) {
       expiry = new DateTime.fromMillisecondsSinceEpoch(
-          json['expiry'].toInt() * 1000, isUtc: true);
+          json['expiry'].toInt() * 1000,
+          isUtc: true);
     }
     return new Cookie(json['name'], json['value'],
         path: json['path'],
diff --git a/lib/src/web_driver.dart b/lib/src/web_driver.dart
index 9c79992..6d76839 100644
--- a/lib/src/web_driver.dart
+++ b/lib/src/web_driver.dart
@@ -150,9 +150,9 @@
   /// Arguments may be any JSON-able object. WebElements will be converted to
   /// the corresponding DOM element. Likewise, any DOM Elements in the script
   /// result will be converted to WebElements.
-  Future executeAsync(String script, List args) => postRequest(
-          'execute_async', {'script': script, 'args': args})
-      .then(_recursiveElementify);
+  Future executeAsync(String script, List args) =>
+      postRequest('execute_async', {'script': script, 'args': args})
+          .then(_recursiveElementify);
 
   /// Inject a snippet of JavaScript into the page for execution in the context
   /// of the currently selected frame. The executed script is assumed to be
@@ -166,8 +166,9 @@
   /// Arguments may be any JSON-able object. WebElements will be converted to
   /// the corresponding DOM element. Likewise, any DOM Elements in the script
   /// result will be converted to WebElements.
-  Future execute(String script, List args) => postRequest(
-      'execute', {'script': script, 'args': args}).then(_recursiveElementify);
+  Future execute(String script, List args) =>
+      postRequest('execute', {'script': script, 'args': args})
+          .then(_recursiveElementify);
 
   dynamic _recursiveElementify(result) {
     if (result is Map) {
@@ -188,14 +189,18 @@
   }
 
   Future postRequest(String command, [params]) => _performRequest(
-      () => _commandProcessor.post(_resolve(command), params), 'POST', command,
+      () => _commandProcessor.post(_resolve(command), params),
+      'POST',
+      command,
       params);
 
   Future getRequest(String command) => _performRequest(
       () => _commandProcessor.get(_resolve(command)), 'GET', command, null);
 
   Future deleteRequest(String command) => _performRequest(
-      () => _commandProcessor.delete(_resolve(command)), 'DELETE', command,
+      () => _commandProcessor.delete(_resolve(command)),
+      'DELETE',
+      command,
       null);
 
   Future _performRequest(
@@ -204,7 +209,8 @@
     var trace = new Chain.current();
     if (filterStackTraces) {
       trace = trace.foldFrames(
-          (f) => f.library.startsWith('package:webdriver/'), terse: true);
+          (f) => f.library.startsWith('package:webdriver/'),
+          terse: true);
     }
     var result;
     var exception;
diff --git a/lib/src/web_element.dart b/lib/src/web_element.dart
index 3869348..f732cf8 100644
--- a/lib/src/web_element.dart
+++ b/lib/src/web_element.dart
@@ -19,8 +19,10 @@
 
   /// The context from which this element was found.
   final SearchContext context;
+
   /// How the element was located from the context.
   final dynamic /* String | Finder */ locator;
+
   /// The index of this element in the set of element founds. If the method
   /// used to find this element always returns one element, then this is null.
   final int index;
@@ -41,7 +43,9 @@
 
   /// Send [keysToSend] to this element.
   Future sendKeys(String keysToSend) async {
-    await _post('value', {'value': [keysToSend]});
+    await _post('value', {
+      'value': [keysToSend]
+    });
   }
 
   /// Clear the content of a text element.
diff --git a/lib/support/async.dart b/lib/support/async.dart
index 39d5911..137df94 100644
--- a/lib/support/async.dart
+++ b/lib/support/async.dart
@@ -24,8 +24,11 @@
 
 const clock = const Clock();
 
-Future waitFor(condition(), {matcher: null, Duration timeout: defaultTimeout,
-    Duration interval: defaultInterval}) => clock.waitFor(condition,
+Future waitFor(condition(),
+        {matcher: null,
+        Duration timeout: defaultTimeout,
+        Duration interval: defaultInterval}) =>
+    clock.waitFor(condition,
         matcher: matcher, timeout: timeout, interval: interval);
 
 class Clock {
@@ -46,7 +49,9 @@
   /// is returned. Otherwise, if [condition] throws, then that exception is
   /// rethrown. If [condition] doesn't throw then an [expect] exception is
   /// thrown.
-  Future waitFor(condition(), {matcher: null, Duration timeout: defaultTimeout,
+  Future waitFor(condition(),
+      {matcher: null,
+      Duration timeout: defaultTimeout,
       Duration interval: defaultInterval}) async {
     if (matcher != null && matcher is! ut.Matcher && matcher is! m.Matcher) {
       matcher = m.equals(matcher);
diff --git a/lib/support/forwarder.dart b/lib/support/forwarder.dart
index 651ec8b..c41d84f 100644
--- a/lib/support/forwarder.dart
+++ b/lib/support/forwarder.dart
@@ -58,18 +58,21 @@
 class WebDriverForwarder {
   /// [WebDriver] instance to forward commands to.
   final WebDriver driver;
+
   /// Path prefix that all forwarded commands will have.
   final Pattern prefix;
+
   /// Directory to save screenshots and page source to.
   final Directory outputDir;
+
   /// Search for elements in all shadow doms of the current document.
   bool useDeep;
 
   WebDriverForwarder(this.driver,
       {this.prefix: '/webdriver', Directory outputDir, this.useDeep: false})
       : this.outputDir = outputDir == null
-          ? Directory.systemTemp.createTempSync()
-          : outputDir;
+            ? Directory.systemTemp.createTempSync()
+            : outputDir;
 
   /// Forward [request] to [driver] and respond to the request with the returned
   /// value or any thrown exceptions.
@@ -97,11 +100,15 @@
       request.response
           .add(UTF8.encode(JSON.encode({'status': 0, 'value': value})));
     } on WebDriverException catch (e) {
-      request.response.add(UTF8.encode(JSON
-          .encode({'status': e.statusCode, 'value': {'message': e.message}})));
+      request.response.add(UTF8.encode(JSON.encode({
+        'status': e.statusCode,
+        'value': {'message': e.message}
+      })));
     } catch (e) {
-      request.response.add(UTF8.encode(
-          JSON.encode({'status': 13, 'value': {'message': e.toString()}})));
+      request.response.add(UTF8.encode(JSON.encode({
+        'status': 13,
+        'value': {'message': e.toString()}
+      })));
     } finally {
       await request.response.close();
     }
diff --git a/pubspec.yaml b/pubspec.yaml
index f5746cc..182dfeb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -12,6 +12,7 @@
   matcher: '^0.12.0+1'
   path: '^1.3.6'
   stack_trace: '^1.3.4'
-  unittest: '^0.12.3'
+  unittest: '^0.11.6+1'
 dev_dependencies:
-  test: '^0.12.3+7'
+  test: '^0.12.3+8'
+
diff --git a/test/src/command_event.dart b/test/src/command_event.dart
index aea573f..06004ef 100644
--- a/test/src/command_event.dart
+++ b/test/src/command_event.dart
@@ -22,27 +22,64 @@
 import '../test_util.dart';
 
 void runTests() {
-  group('CommandEvent', () {
-    WebDriver driver;
+  group(
+      'CommandEvent',
+      () {
+        WebDriver driver;
 
-    var events = [];
-    var sub;
+        var events = [];
+        var sub;
 
+<<<<<<< HEAD
+        setUp(() async {
+          driver = await createTestDriver();
+          sub = driver.onCommand.listen(events.add);
+=======
     setUp(() async {
       driver = await createTestDriver();
       sub = driver.onCommand.listen(events.add);
+>>>>>>> cf97653bdf1a5b77bb0246231b9770149f403f16
 
-      await driver.get(testPagePath);
-    });
+          await driver.get(testPagePath);
+        });
 
-    tearDown(() async {
-      sub.cancel();
-      sub = null;
-      events.clear();
-      await driver.quit();
-      driver = null;
-    });
+        tearDown(() async {
+          sub.cancel();
+          sub = null;
+          events.clear();
+          await driver.quit();
+          driver = null;
+        });
 
+<<<<<<< HEAD
+        test('handles exceptions', () async {
+          try {
+            await driver.switchTo.alert;
+          } catch (e) {}
+          await waitFor(() => events, matcher: hasLength(2));
+          expect(events[1].method, 'GET');
+          expect(events[1].endPoint, contains('alert'));
+          expect(events[1].exception, new isInstanceOf<WebDriverException>());
+          expect(events[1].result, isNull);
+          expect(events[1].startTime.isBefore(events[1].endTime), isTrue);
+          expect(events[1].stackTrace, new isInstanceOf<Chain>());
+        });
+
+        test('handles normal operation', () async {
+          await driver
+              .findElements(const By.cssSelector('nosuchelement'))
+              .toList();
+          await waitFor(() => events, matcher: hasLength(2));
+          expect(events[1].method, 'POST');
+          expect(events[1].endPoint, contains('elements'));
+          expect(events[1].exception, isNull);
+          expect(events[1].result, hasLength(0));
+          expect(events[1].startTime.isBefore(events[1].endTime), isTrue);
+          expect(events[1].stackTrace, new isInstanceOf<Chain>());
+        });
+      },
+      testOn: '!js');
+=======
     test('handles exceptions', () async {
       try {
         await driver.switchTo.alert;
@@ -67,4 +104,5 @@
       expect(events[1].stackTrace, new isInstanceOf<Chain>());
     });
   }, testOn: '!js');
+>>>>>>> cf97653bdf1a5b77bb0246231b9770149f403f16
 }
diff --git a/test/src/navigation.dart b/test/src/navigation.dart
index 5739c68..c86bad6 100644
--- a/test/src/navigation.dart
+++ b/test/src/navigation.dart
@@ -31,13 +31,16 @@
 
     tearDown(() => driver.quit());
 
-    test('forward/back', () async {
-      await driver.get('http://www.yahoo.com');
-      await driver.navigate.back();
-      await waitFor(() => driver.title, matcher: contains('Google'));
-      await driver.navigate.forward();
-      await waitFor(() => driver.title, matcher: contains('Yahoo'));
-    }, skip: 'TODO(DrMarcII): fix test');
+    test(
+        'forward/back',
+        () async {
+          await driver.get('http://www.yahoo.com');
+          await driver.navigate.back();
+          await waitFor(() => driver.title, matcher: contains('Google'));
+          await driver.navigate.forward();
+          await waitFor(() => driver.title, matcher: contains('Yahoo'));
+        },
+        skip: 'TODO(DrMarcII): fix test');
 
     test('refresh', () async {
       var element = await driver.findElement(const By.name('q'));
diff --git a/test/src/web_driver.dart b/test/src/web_driver.dart
index 1c2f0d5..57870f8 100644
--- a/test/src/web_driver.dart
+++ b/test/src/web_driver.dart
@@ -38,14 +38,17 @@
         await driver.quit();
       });
 
-      test('firefox', () async {
-        WebDriver driver = await createTestDriver(
-            additionalCapabilities: Capabilities.firefox);
-        await driver.get('http://www.google.com');
-        var element = await driver.findElement(const By.name('q'));
-        expect(await element.name, 'input');
-        await driver.quit();
-      }, skip: runningOnTravis);
+      test(
+          'firefox',
+          () async {
+            WebDriver driver = await createTestDriver(
+                additionalCapabilities: Capabilities.firefox);
+            await driver.get('http://www.google.com');
+            var element = await driver.findElement(const By.name('q'));
+            expect(await element.name, 'input');
+            await driver.quit();
+          },
+          skip: runningOnTravis);
     });
 
     group('methods', () {
diff --git a/test/src/window.dart b/test/src/window.dart
index 0b60fe0..2e547bc 100644
--- a/test/src/window.dart
+++ b/test/src/window.dart
@@ -32,38 +32,47 @@
 
     tearDown(() => driver.quit());
 
-    test('size', () async {
-      var window = await driver.window;
-      var size = const Rectangle<int>(0, 0, 600, 400);
-      await window.setSize(size);
-      expect(await window.size, size);
-    }, skip: true);
+    test(
+        'size',
+        () async {
+          var window = await driver.window;
+          var size = const Rectangle<int>(0, 0, 600, 400);
+          await window.setSize(size);
+          expect(await window.size, size);
+        },
+        skip: true);
 
-    test('location', () async {
-      var window = await driver.window;
-      var position = const Point<int>(100, 200);
-      await window.setLocation(position);
-      expect(await window.location, position);
-    }, skip: true);
+    test(
+        'location',
+        () async {
+          var window = await driver.window;
+          var position = const Point<int>(100, 200);
+          await window.setLocation(position);
+          expect(await window.location, position);
+        },
+        skip: true);
 
     // May not work on some OS/browser combinations (notably Mac OS X).
-    test('maximize', () async {
-      var window = await driver.window;
-      await window.setSize(const Rectangle<int>(0, 0, 300, 200));
-      await window.setLocation(const Point<int>(100, 200));
-      await window.maximize();
+    test(
+        'maximize',
+        () async {
+          var window = await driver.window;
+          await window.setSize(const Rectangle<int>(0, 0, 300, 200));
+          await window.setLocation(const Point<int>(100, 200));
+          await window.maximize();
 
-      // maximizing can take some time
-      await waitFor(() async => (await window.size).height,
-          matcher: greaterThan(200));
+          // maximizing can take some time
+          await waitFor(() async => (await window.size).height,
+              matcher: greaterThan(200));
 
-      var location = await window.location;
-      var size = await window.size;
-      // Changed from `lessThan(100)` to pass the test on Mac.
-      expect(location.x, lessThanOrEqualTo(100));
-      expect(location.y, lessThan(200));
-      expect(size.height, greaterThan(200));
-      expect(size.width, greaterThan(300));
-    }, skip: true);
+          var location = await window.location;
+          var size = await window.size;
+          // Changed from `lessThan(100)` to pass the test on Mac.
+          expect(location.x, lessThanOrEqualTo(100));
+          expect(location.y, lessThan(200));
+          expect(size.height, greaterThan(200));
+          expect(size.width, greaterThan(300));
+        },
+        skip: true);
   });
 }
diff --git a/test/support/forwarder_test.dart b/test/support/forwarder_test.dart
index b6baa0e..e081cb6 100644
--- a/test/support/forwarder_test.dart
+++ b/test/support/forwarder_test.dart
@@ -113,8 +113,11 @@
       expect(await forwardedDriver.getRequest('element/div/text'),
           buttonNotClicked);
 
-      await forwardedDriver.execute(
-          'arguments[0].el.click();', [{'el': {'ELEMENT': 'button'}}]);
+      await forwardedDriver.execute('arguments[0].el.click();', [
+        {
+          'el': {'ELEMENT': 'button'}
+        }
+      ]);
 
       expect(
           await forwardedDriver.getRequest('element/div/text'), buttonClicked);
