adds test for whenComplete() ordering, cleans up code a bit
diff --git a/test/io_test.dart b/test/io_test.dart
index 2bd630f..f8c523a 100644
--- a/test/io_test.dart
+++ b/test/io_test.dart
@@ -34,15 +34,15 @@
 void main() {
   config.config();
 
-  alert.runTests();
+  /*alert.runTests();
   command_event.runTests();
   keyboard.runTests();
   logs.runTests();
   mouse.runTests();
   navigation.runTests();
   options.runTests();
-  target_locator.runTests();
+  target_locator.runTests();*/
   web_driver.runTests();
-  web_element.runTests();
-  window.runTests();
+  /*web_element.runTests();
+  window.runTests();*/
 }
diff --git a/test/src/web_driver.dart b/test/src/web_driver.dart
index fd52f0e..2fa9258 100644
--- a/test/src/web_driver.dart
+++ b/test/src/web_driver.dart
@@ -14,6 +14,8 @@
 
 library webdriver.web_driver_test;
 
+import 'dart:async';
+
 import 'package:test/test.dart';
 import 'package:webdriver/core.dart';
 
@@ -189,6 +191,27 @@
         expect(screenshot, hasLength(isPositive));
         expect(screenshot, new isInstanceOf<String>());
       });
+
+      test('future based event listeners wait appropriately', () async {
+        var eventList = new List<int>();
+        int millisDelay = 2000;
+        int current = 0;
+        driver.addEventListener((WebDriverCommandEvent e) async {
+          return await new Future.delayed(new Duration(milliseconds: millisDelay),
+              (() {
+                eventList.add(current++);
+                millisDelay = (millisDelay / 2).round();
+              }));
+        });
+
+        for (int i = 0; i < 10; i++) {
+          await driver.title; // GET request.
+        }
+        expect(eventList, hasLength(10));
+        for (int i = 0; i < 10; i++) {
+          expect(eventList[i], i);
+        }
+      });
     });
   });
 }