Remove uppercase constants, fix tests for Dart 2 (#28)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8b892ad..bfcde49 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+#### 3.0.2
+
+* Remove upper case constants.
+* Update SDK constraint to 2.0.0-dev.54.0.
+* Fix tests for Dart 2.
+
 #### 3.0.1
 
 * General cleanup
diff --git a/lib/src/interface/common.dart b/lib/src/interface/common.dart
index 26fcf74..7918f1d 100644
--- a/lib/src/interface/common.dart
+++ b/lib/src/interface/common.dart
@@ -86,5 +86,6 @@
       .map((String path) =>
           withExtensions.map((String command) => context.join(path, command)))
       .expand((Iterable<String> e) => e)
-      .toList();
+      .toList()
+      .cast<String>();
 }
diff --git a/lib/src/interface/local_process_manager.dart b/lib/src/interface/local_process_manager.dart
index e840316..a297967 100644
--- a/lib/src/interface/local_process_manager.dart
+++ b/lib/src/interface/local_process_manager.dart
@@ -10,7 +10,7 @@
         ProcessResult,
         ProcessSignal,
         ProcessStartMode,
-        SYSTEM_ENCODING;
+        systemEncoding;
 
 import 'common.dart';
 import 'process_manager.dart';
@@ -35,7 +35,7 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    ProcessStartMode mode: ProcessStartMode.NORMAL,
+    ProcessStartMode mode: ProcessStartMode.normal,
   }) {
     return Process.start(
       _getExecutable(command, workingDirectory, runInShell),
@@ -55,8 +55,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: SYSTEM_ENCODING,
-    Encoding stderrEncoding: SYSTEM_ENCODING,
+    Encoding stdoutEncoding: systemEncoding,
+    Encoding stderrEncoding: systemEncoding,
   }) {
     return Process.run(
       _getExecutable(command, workingDirectory, runInShell),
@@ -77,8 +77,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: SYSTEM_ENCODING,
-    Encoding stderrEncoding: SYSTEM_ENCODING,
+    Encoding stdoutEncoding: systemEncoding,
+    Encoding stderrEncoding: systemEncoding,
   }) {
     return Process.runSync(
       _getExecutable(command, workingDirectory, runInShell),
@@ -97,7 +97,7 @@
       getExecutablePath(executable, workingDirectory) != null;
 
   @override
-  bool killPid(int pid, [ProcessSignal signal = ProcessSignal.SIGTERM]) {
+  bool killPid(int pid, [ProcessSignal signal = ProcessSignal.sigterm]) {
     return Process.killPid(pid, signal);
   }
 }
diff --git a/lib/src/interface/process_manager.dart b/lib/src/interface/process_manager.dart
index 8375970..8c53cdc 100644
--- a/lib/src/interface/process_manager.dart
+++ b/lib/src/interface/process_manager.dart
@@ -10,7 +10,7 @@
         ProcessResult,
         ProcessSignal,
         ProcessStartMode,
-        SYSTEM_ENCODING;
+        systemEncoding;
 
 /// Manages the creation of abstract processes.
 ///
@@ -64,18 +64,18 @@
   ///       stderr.addStream(process.stderr);
   ///     });
   ///
-  /// If [mode] is [ProcessStartMode.NORMAL] (the default) a child
+  /// If [mode] is [ProcessStartMode.normal] (the default) a child
   /// process will be started with `stdin`, `stdout` and `stderr`
   /// connected.
   ///
-  /// If `mode` is [ProcessStartMode.DETACHED] a detached process will
+  /// If `mode` is [ProcessStartMode.detached] a detached process will
   /// be created. A detached process has no connection to its parent,
   /// and can keep running on its own when the parent dies. The only
   /// information available from a detached process is its `pid`. There
   /// is no connection to its `stdin`, `stdout` or `stderr`, nor will
   /// the process' exit code become available when it terminates.
   ///
-  /// If `mode` is [ProcessStartMode.DETACHED_WITH_STDIO] a detached
+  /// If `mode` is [ProcessStartMode.detachedWithStdio] a detached
   /// process will be created where the `stdin`, `stdout` and `stderr`
   /// are connected. The creator can communicate with the child through
   /// these. The detached process will keep running even if these
@@ -89,7 +89,7 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    ProcessStartMode mode: ProcessStartMode.NORMAL,
+    ProcessStartMode mode: ProcessStartMode.normal,
   });
 
   /// Starts a process and runs it non-interactively to completion.
@@ -120,7 +120,7 @@
   ///
   /// The encoding used for decoding `stdout` and `stderr` into text is
   /// controlled through [stdoutEncoding] and [stderrEncoding]. The
-  /// default encoding is [SYSTEM_ENCODING]. If `null` is used no
+  /// default encoding is [systemEncoding]. If `null` is used no
   /// decoding will happen and the [ProcessResult] will hold binary
   /// data.
   ///
@@ -142,8 +142,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: SYSTEM_ENCODING,
-    Encoding stderrEncoding: SYSTEM_ENCODING,
+    Encoding stdoutEncoding: systemEncoding,
+    Encoding stderrEncoding: systemEncoding,
   });
 
   /// Starts a process and runs it to completion. This is a synchronous
@@ -159,8 +159,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: SYSTEM_ENCODING,
-    Encoding stderrEncoding: SYSTEM_ENCODING,
+    Encoding stdoutEncoding: systemEncoding,
+    Encoding stderrEncoding: systemEncoding,
   });
 
   /// Returns `true` if the [executable] exists and if it can be executed.
@@ -170,7 +170,7 @@
   ///
   /// Where possible, sends the [signal] to the process with id
   /// `pid`. This includes Linux and OS X. The default signal is
-  /// [ProcessSignal.SIGTERM] which will normally terminate the
+  /// [ProcessSignal.sigterm] which will normally terminate the
   /// process.
   ///
   /// On platforms without signal support, including Windows, the call
@@ -180,5 +180,5 @@
   /// Returns `true` if the signal is successfully delivered to the
   /// process. Otherwise the signal could not be sent, usually meaning
   /// that the process is already dead.
-  bool killPid(int pid, [ProcessSignal signal = ProcessSignal.SIGTERM]);
+  bool killPid(int pid, [ProcessSignal signal = ProcessSignal.sigterm]);
 }
diff --git a/lib/src/record_replay/common.dart b/lib/src/record_replay/common.dart
index ee2e1e3..fae84a4 100644
--- a/lib/src/record_replay/common.dart
+++ b/lib/src/record_replay/common.dart
@@ -7,10 +7,13 @@
 /// Sanitizes the specified [command] by running any non-deterministic
 /// segments through a [sanitizer](CommandSanitizer) if possible.
 List<String> sanitize(List<dynamic> command) {
-  return command.map((dynamic element) {
-    if (element is CommandElement) {
-      return element.sanitized;
-    }
-    return element.toString();
-  }).toList();
+  return command
+      .map((dynamic element) {
+        if (element is CommandElement) {
+          return element.sanitized;
+        }
+        return element.toString();
+      })
+      .toList()
+      .cast<String>();
 }
diff --git a/lib/src/record_replay/recording_process_manager.dart b/lib/src/record_replay/recording_process_manager.dart
index e839485..92b44bd 100644
--- a/lib/src/record_replay/recording_process_manager.dart
+++ b/lib/src/record_replay/recording_process_manager.dart
@@ -11,7 +11,7 @@
         ProcessResult,
         ProcessSignal,
         ProcessStartMode,
-        SYSTEM_ENCODING;
+        systemEncoding;
 
 import 'package:file/file.dart';
 import 'package:intl/intl.dart';
@@ -85,7 +85,7 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    io.ProcessStartMode mode: io.ProcessStartMode.NORMAL,
+    io.ProcessStartMode mode: io.ProcessStartMode.normal,
   }) async {
     io.Process process = await delegate.start(
       command,
@@ -131,8 +131,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: io.SYSTEM_ENCODING,
-    Encoding stderrEncoding: io.SYSTEM_ENCODING,
+    Encoding stdoutEncoding: io.systemEncoding,
+    Encoding stderrEncoding: io.systemEncoding,
   }) async {
     io.ProcessResult result = await delegate.run(
       command,
@@ -187,8 +187,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: io.SYSTEM_ENCODING,
-    Encoding stderrEncoding: io.SYSTEM_ENCODING,
+    Encoding stdoutEncoding: io.systemEncoding,
+    Encoding stderrEncoding: io.systemEncoding,
   }) {
     io.ProcessResult result = delegate.runSync(
       command,
@@ -239,7 +239,7 @@
   }
 
   @override
-  bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) {
+  bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.sigterm]) {
     return delegate.killPid(pid, signal);
   }
 
@@ -363,7 +363,7 @@
   ) async {
     String path = '${manager.destination.path}/$basename.$suffix';
     File file = await manager.fs.file(path).create();
-    RandomAccessFile recording = await file.open(mode: FileMode.WRITE);
+    RandomAccessFile recording = await file.open(mode: FileMode.write);
     stream.listen(
       (List<int> data) {
         // Write synchronously to guarantee that the order of data
@@ -410,6 +410,6 @@
   int get pid => delegate.pid;
 
   @override
-  bool kill([io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) =>
+  bool kill([io.ProcessSignal signal = io.ProcessSignal.sigterm]) =>
       delegate.kill(signal);
 }
diff --git a/lib/src/record_replay/replay_process_manager.dart b/lib/src/record_replay/replay_process_manager.dart
index 1e157ab..36aaf7a 100644
--- a/lib/src/record_replay/replay_process_manager.dart
+++ b/lib/src/record_replay/replay_process_manager.dart
@@ -12,7 +12,7 @@
         ProcessResult,
         ProcessSignal,
         ProcessStartMode,
-        SYSTEM_ENCODING;
+        systemEncoding;
 
 import 'package:file/file.dart';
 import 'package:path/path.dart' as path;
@@ -94,7 +94,7 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    io.ProcessStartMode mode: io.ProcessStartMode.NORMAL,
+    io.ProcessStartMode mode: io.ProcessStartMode.normal,
   }) async {
     RunManifestEntry entry = _popRunEntry(command, mode: mode);
     _ReplayResult result = await _ReplayResult.create(this, entry);
@@ -108,8 +108,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: io.SYSTEM_ENCODING,
-    Encoding stderrEncoding: io.SYSTEM_ENCODING,
+    Encoding stdoutEncoding: io.systemEncoding,
+    Encoding stderrEncoding: io.systemEncoding,
   }) async {
     RunManifestEntry entry = _popRunEntry(command,
         stdoutEncoding: stdoutEncoding, stderrEncoding: stderrEncoding);
@@ -123,8 +123,8 @@
     Map<String, String> environment,
     bool includeParentEnvironment: true,
     bool runInShell: false,
-    Encoding stdoutEncoding: io.SYSTEM_ENCODING,
-    Encoding stderrEncoding: io.SYSTEM_ENCODING,
+    Encoding stdoutEncoding: io.systemEncoding,
+    Encoding stderrEncoding: io.systemEncoding,
   }) {
     RunManifestEntry entry = _popRunEntry(command,
         stdoutEncoding: stdoutEncoding, stderrEncoding: stderrEncoding);
@@ -170,7 +170,7 @@
   }
 
   @override
-  bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) {
+  bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.sigterm]) {
     throw new UnsupportedError(
         "$runtimeType.killPid() has not been implemented because at the time "
         "of its writing, it wasn't needed. If you're hitting this error, you "
@@ -311,7 +311,7 @@
   io.IOSink get stdin => throw new UnimplementedError();
 
   @override
-  bool kill([io.ProcessSignal signal = io.ProcessSignal.SIGTERM]) {
+  bool kill([io.ProcessSignal signal = io.ProcessSignal.sigterm]) {
     if (!_exitCodeCompleter.isCompleted) {
       _stdoutController.close();
       _stderrController.close();
diff --git a/lib/src/record_replay/run_manifest_entry.dart b/lib/src/record_replay/run_manifest_entry.dart
index c9e3103..2f89c77 100644
--- a/lib/src/record_replay/run_manifest_entry.dart
+++ b/lib/src/record_replay/run_manifest_entry.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:convert';
-import 'dart:io' show ProcessStartMode, SYSTEM_ENCODING;
+import 'dart:io' show ProcessStartMode, systemEncoding;
 
 import 'manifest_entry.dart';
 
@@ -23,7 +23,7 @@
 /// Gets an `Encoding` instance by the encoding name.
 Encoding _getEncoding(String encoding) {
   if (encoding == 'system') {
-    return SYSTEM_ENCODING;
+    return systemEncoding;
   } else if (encoding != null) {
     return Encoding.getByName(encoding);
   }
diff --git a/pubspec.yaml b/pubspec.yaml
index 5c737d0..c6c0b0c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: process
-version: 3.0.1
+version: 3.0.2
 authors:
 - Todd Volkert <tvolkert@google.com>
 - Michael Goderbauer <goderbauer@google.com>
@@ -17,4 +17,4 @@
   test: ^0.12.33
 
 environment:
-  sdk: '>=2.0.0-dev.28.0 <2.0.0'
+  sdk: '>=2.0.0-dev.54.0 <2.0.0'
diff --git a/test/data/replay/MANIFEST.txt b/test/data/replay/MANIFEST.txt
index 978ec3d..ef5eaba 100644
--- a/test/data/replay/MANIFEST.txt
+++ b/test/data/replay/MANIFEST.txt
@@ -8,7 +8,7 @@
         "sing",
         "ppap"
       ],
-      "mode": "ProcessStartMode.NORMAL",
+      "mode": "normal",
       "exitCode": 0
     }
   },
diff --git a/test/record_test.dart b/test/record_test.dart
index a8cbaa2..2bc0e09 100644
--- a/test/record_test.dart
+++ b/test/record_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:convert';
-import 'dart:io' show Platform, Process, ProcessResult, SYSTEM_ENCODING;
+import 'dart:io' show Platform, Process, ProcessResult, systemEncoding;
 
 import 'package:file/file.dart';
 import 'package:file/local.dart';
@@ -54,7 +54,7 @@
       Map<String, dynamic> body = entry['body'];
       expect(body['pid'], pid);
       expect(body['command'], <String>['echo', 'foo']);
-      expect(body['mode'], 'ProcessStartMode.NORMAL');
+      expect(body['mode'], 'normal');
       expect(body['exitCode'], exitCode);
       expect(recording.stdoutForEntryAt(0), stdout);
       expect(recording.stderrForEntryAt(0), stderr);
@@ -143,7 +143,9 @@
   _Recording(this.dir);
 
   List<Map<String, dynamic>> get manifest {
-    return json.decoder.convert(_getFileContent('MANIFEST.txt', utf8));
+    return json.decoder
+        .convert(_getFileContent('MANIFEST.txt', utf8))
+        .cast<Map<String, dynamic>>();
   }
 
   dynamic stdoutForEntryAt(int index) =>
@@ -165,7 +167,7 @@
     Encoding encoding;
     if (encodingName != null)
       encoding = encodingName == 'system'
-          ? SYSTEM_ENCODING
+          ? systemEncoding
           : Encoding.getByName(encodingName);
     return _getFileContent('$basename.$type', encoding);
   }