Prepare for release, remove deprecated constants, support Dart 2 gold
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2372584..85a3c27 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.2.8
+
+* Update SDK constraint to `>=2.0.0-dev.61 <3.0.0`.
+
+* Directory listings are now sorted.
+
 ## 0.2.7+1
 
 * Updated SDK version to 2.0.0-dev.17.0
diff --git a/analysis_options.yaml b/analysis_options.yaml
deleted file mode 100644
index a10d4c5..0000000
--- a/analysis_options.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-analyzer:
-  strong-mode: true
diff --git a/lib/src/directory_listing.dart b/lib/src/directory_listing.dart
index 3e9e877..a598243 100644
--- a/lib/src/directory_listing.dart
+++ b/lib/src/directory_listing.dart
@@ -94,5 +94,6 @@
   });
 
   return new Response.ok(controller.stream,
-      encoding: encoding, headers: {HttpHeaders.CONTENT_TYPE: 'text/html'});
+      encoding: encoding,
+      headers: {HttpHeaders.contentTypeHeader: 'text/html'});
 }
diff --git a/lib/src/static_handler.dart b/lib/src/static_handler.dart
index afd42c8..b6131ea 100644
--- a/lib/src/static_handler.dart
+++ b/lib/src/static_handler.dart
@@ -189,12 +189,12 @@
   }
 
   var headers = {
-    HttpHeaders.CONTENT_LENGTH: stat.size.toString(),
-    HttpHeaders.LAST_MODIFIED: formatHttpDate(stat.changed)
+    HttpHeaders.contentLengthHeader: stat.size.toString(),
+    HttpHeaders.lastModifiedHeader: formatHttpDate(stat.changed)
   };
 
   var contentType = await getContentType();
-  if (contentType != null) headers[HttpHeaders.CONTENT_TYPE] = contentType;
+  if (contentType != null) headers[HttpHeaders.contentTypeHeader] = contentType;
 
   return new Response.ok(file.openRead(), headers: headers);
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index 8a8ec3b..b105264 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,10 +1,10 @@
 name: shelf_static
-version: 0.2.7+1
+version: 0.2.8
 author: Dart Team <misc@dartlang.org>
 description: Static file server support for Shelf
 homepage: https://github.com/dart-lang/shelf_static
 environment:
-  sdk: '>=2.0.0-dev.55.0 <2.0.0'
+  sdk: '>=2.0.0-dev.61.0 <3.0.0'
 dependencies:
   convert: '>=1.0.0 <3.0.0'
   http_parser: '>=0.0.2+2 <4.0.0'
@@ -13,6 +13,6 @@
   shelf: '>=0.5.7 <0.8.0'
 dev_dependencies:
   args: '^1.0.0'
-  test: '>=0.12.0 <0.13.0'
+  test: '^1.2.0'
   test_descriptor: '^1.0.0'
 
diff --git a/test/alternative_root_test.dart b/test/alternative_root_test.dart
index a1095a1..5f882aa 100644
--- a/test/alternative_root_test.dart
+++ b/test/alternative_root_test.dart
@@ -23,7 +23,7 @@
 
     var response =
         await makeRequest(handler, '/static/root.txt', handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 8);
     expect(response.readAsString(), completion('root txt'));
   });
@@ -33,7 +33,7 @@
 
     var response = await makeRequest(handler, '/static/files/with%20space.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -43,7 +43,7 @@
 
     var response = await makeRequest(handler, '/static/files/with%20space.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -53,7 +53,7 @@
 
     var response = await makeRequest(handler, '/static/files/test.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 16);
     expect(response.readAsString(), completion('test txt content'));
   });
@@ -63,6 +63,6 @@
 
     var response = await makeRequest(handler, '/static/not_here.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.NOT_FOUND);
+    expect(response.statusCode, HttpStatus.notFound);
   });
 }
diff --git a/test/basic_file_test.dart b/test/basic_file_test.dart
index 6b5e005..2b31dd6 100644
--- a/test/basic_file_test.dart
+++ b/test/basic_file_test.dart
@@ -43,7 +43,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/root.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 8);
     expect(response.readAsString(), completion('root txt'));
   });
@@ -52,7 +52,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/files/with%20space.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -61,7 +61,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/files/with%20space.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -70,7 +70,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/files/test.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 16);
     expect(response.readAsString(), completion('test txt content'));
   });
@@ -79,7 +79,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/not_here.txt');
-    expect(response.statusCode, HttpStatus.NOT_FOUND);
+    expect(response.statusCode, HttpStatus.notFound);
   });
 
   test('last modified', () async {
@@ -99,10 +99,12 @@
       var rootPath = p.join(d.sandbox, 'root.txt');
       var modified = new File(rootPath).statSync().changed.toUtc();
 
-      var headers = {HttpHeaders.IF_MODIFIED_SINCE: formatHttpDate(modified)};
+      var headers = {
+        HttpHeaders.ifModifiedSinceHeader: formatHttpDate(modified)
+      };
 
       var response = await makeRequest(handler, '/root.txt', headers: headers);
-      expect(response.statusCode, HttpStatus.NOT_MODIFIED);
+      expect(response.statusCode, HttpStatus.notModified);
       expect(response.contentLength, 0);
     });
 
@@ -113,12 +115,12 @@
       var modified = new File(rootPath).statSync().changed.toUtc();
 
       var headers = {
-        HttpHeaders.IF_MODIFIED_SINCE:
+        HttpHeaders.ifModifiedSinceHeader:
             formatHttpDate(modified.subtract(const Duration(seconds: 1)))
       };
 
       var response = await makeRequest(handler, '/root.txt', headers: headers);
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.lastModified, atSameTimeToSecond(modified));
     });
 
@@ -129,12 +131,12 @@
       var modified = new File(rootPath).statSync().changed.toUtc();
 
       var headers = {
-        HttpHeaders.IF_MODIFIED_SINCE:
+        HttpHeaders.ifModifiedSinceHeader:
             formatHttpDate(modified.add(const Duration(seconds: 1)))
       };
 
       var response = await makeRequest(handler, '/root.txt', headers: headers);
-      expect(response.statusCode, HttpStatus.NOT_MODIFIED);
+      expect(response.statusCode, HttpStatus.notModified);
       expect(response.contentLength, 0);
     });
   });
diff --git a/test/create_file_handler_test.dart b/test/create_file_handler_test.dart
index 26a6da9..251f08f 100644
--- a/test/create_file_handler_test.dart
+++ b/test/create_file_handler_test.dart
@@ -20,7 +20,7 @@
   test('serves the file contents', () async {
     var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
     var response = await makeRequest(handler, '/file.txt');
-    expect(response.statusCode, equals(HttpStatus.OK));
+    expect(response.statusCode, equals(HttpStatus.ok));
     expect(response.contentLength, equals(8));
     expect(response.readAsString(), completion(equals('contents')));
   });
@@ -28,14 +28,14 @@
   test('serves a 404 for a non-matching URL', () async {
     var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
     var response = await makeRequest(handler, '/foo/file.txt');
-    expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
+    expect(response.statusCode, equals(HttpStatus.notFound));
   });
 
   test('serves the file contents under a custom URL', () async {
     var handler =
         createFileHandler(p.join(d.sandbox, 'file.txt'), url: 'foo/bar');
     var response = await makeRequest(handler, '/foo/bar');
-    expect(response.statusCode, equals(HttpStatus.OK));
+    expect(response.statusCode, equals(HttpStatus.ok));
     expect(response.contentLength, equals(8));
     expect(response.readAsString(), completion(equals('contents')));
   });
@@ -44,21 +44,21 @@
     var handler =
         createFileHandler(p.join(d.sandbox, 'file.txt'), url: 'foo/bar');
     var response = await makeRequest(handler, '/file.txt');
-    expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
+    expect(response.statusCode, equals(HttpStatus.notFound));
   });
 
   group('the content type header', () {
     test('is inferred from the file path', () async {
       var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
       var response = await makeRequest(handler, '/file.txt');
-      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.statusCode, equals(HttpStatus.ok));
       expect(response.mimeType, equals('text/plain'));
     });
 
     test("is omitted if it can't be inferred", () async {
       var handler = createFileHandler(p.join(d.sandbox, 'random.unknown'));
       var response = await makeRequest(handler, '/random.unknown');
-      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.statusCode, equals(HttpStatus.ok));
       expect(response.mimeType, isNull);
     });
 
@@ -66,7 +66,7 @@
       var handler = createFileHandler(p.join(d.sandbox, 'file.txt'),
           contentType: 'something/weird');
       var response = await makeRequest(handler, '/file.txt');
-      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.statusCode, equals(HttpStatus.ok));
       expect(response.mimeType, equals('something/weird'));
     });
   });
diff --git a/test/default_document_test.dart b/test/default_document_test.dart
index d7e2906..b7382d8 100644
--- a/test/default_document_test.dart
+++ b/test/default_document_test.dart
@@ -43,7 +43,7 @@
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
     });
@@ -52,21 +52,21 @@
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/');
-      expect(response.statusCode, HttpStatus.NOT_FOUND);
+      expect(response.statusCode, HttpStatus.notFound);
     });
 
     test('access "/files"', () async {
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/files');
-      expect(response.statusCode, HttpStatus.NOT_FOUND);
+      expect(response.statusCode, HttpStatus.notFound);
     });
 
     test('access "/files/" dir', () async {
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/files/');
-      expect(response.statusCode, HttpStatus.NOT_FOUND);
+      expect(response.statusCode, HttpStatus.notFound);
     });
   });
 
@@ -76,7 +76,7 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
       expect(response.mimeType, 'text/html');
@@ -87,7 +87,7 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
       expect(response.mimeType, 'text/html');
@@ -98,9 +98,9 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/files');
-      expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+      expect(response.statusCode, HttpStatus.movedPermanently);
       expect(response.headers,
-          containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
+          containsPair(HttpHeaders.locationHeader, 'http://localhost/files/'));
     });
 
     test('access "/files/" dir', () async {
@@ -108,7 +108,7 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/files/');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 31);
       expect(response.readAsString(),
           completion('<html><body>files</body></html>'));
diff --git a/test/directory_listing_test.dart b/test/directory_listing_test.dart
index c939c5f..2d1956b 100644
--- a/test/directory_listing_test.dart
+++ b/test/directory_listing_test.dart
@@ -25,7 +25,7 @@
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.readAsString(), completes);
   });
 
@@ -33,16 +33,16 @@
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files');
-    expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+    expect(response.statusCode, HttpStatus.movedPermanently);
     expect(response.headers,
-        containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
+        containsPair(HttpHeaders.locationHeader, 'http://localhost/files/'));
   });
 
   test('access "/files/"', () async {
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files/');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.readAsString(), completes);
   });
 
@@ -50,18 +50,18 @@
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files/empty subfolder');
-    expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+    expect(response.statusCode, HttpStatus.movedPermanently);
     expect(
         response.headers,
-        containsPair(
-            HttpHeaders.LOCATION, 'http://localhost/files/empty%20subfolder/'));
+        containsPair(HttpHeaders.locationHeader,
+            'http://localhost/files/empty%20subfolder/'));
   });
 
   test('access "/files/empty subfolder/"', () async {
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files/empty subfolder/');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.readAsString(), completes);
   });
 }
diff --git a/test/symbolic_link_test.dart b/test/symbolic_link_test.dart
index 8a95288..4b9d81d 100644
--- a/test/symbolic_link_test.dart
+++ b/test/symbolic_link_test.dart
@@ -37,7 +37,7 @@
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/originals/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
     });
@@ -47,7 +47,7 @@
         var handler = createStaticHandler(d.sandbox);
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -56,7 +56,7 @@
         var handler = createStaticHandler(d.sandbox);
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -67,14 +67,14 @@
         var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'));
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.NOT_FOUND);
+        expect(response.statusCode, HttpStatus.notFound);
       });
 
       test('access file in sym linked dir', () async {
         var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'));
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.NOT_FOUND);
+        expect(response.statusCode, HttpStatus.notFound);
       });
     });
   });
@@ -84,7 +84,7 @@
       var handler = createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
       var response = await makeRequest(handler, '/originals/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
     });
@@ -95,7 +95,7 @@
             createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -105,7 +105,7 @@
             createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -117,7 +117,7 @@
             serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -127,7 +127,7 @@
             serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });