Pass RpcException error data through if it's not a map.

R=nweiz@google.com

Review URL: https://codereview.chromium.org//224903010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/json_rpc_2@34748 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..3b0694e
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.0.2+2
+
+* Fix error response to include data from `RpcException` when not a map.
diff --git a/lib/src/exception.dart b/lib/src/exception.dart
index fb1cd2f..be9c2d3 100644
--- a/lib/src/exception.dart
+++ b/lib/src/exception.dart
@@ -52,6 +52,8 @@
       modifiedData['request'] = request;
     } else if (data == null) {
       modifiedData = {'request': request};
+    } else {
+      modifiedData = data;
     }
 
     var id = request is Map ? request['id'] : null;
diff --git a/pubspec.yaml b/pubspec.yaml
index 6d059f8..b340db3 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: json_rpc_2
-version: 0.0.2+1
+version: 0.0.2+2
 author: Dart Team <misc@dartlang.org>
 description: An implementation of the JSON-RPC 2.0 spec.
 homepage: http://www.dartlang.org
diff --git a/test/server/parameters_test.dart b/test/server/parameters_test.dart
index 8bd126a..49e4573 100644
--- a/test/server/parameters_test.dart
+++ b/test/server/parameters_test.dart
@@ -5,7 +5,6 @@
 library json_rpc_2.test.server.parameters_test;
 
 import 'package:unittest/unittest.dart';
-import 'package:json_rpc_2/error_code.dart' as error_code;
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
 
 import 'utils.dart';
diff --git a/test/server/server_test.dart b/test/server/server_test.dart
index fc3adb5..c18a8ca 100644
--- a/test/server/server_test.dart
+++ b/test/server/server_test.dart
@@ -92,6 +92,22 @@
     }), completion(isNull));
   });
 
+  test("includes the error data in the response", () {
+    server.registerMethod('foo', (params) {
+      throw new json_rpc.RpcException(5, 'Error message.', data: 'data value');
+    });
+
+    expectErrorResponse(server, {
+      'jsonrpc': '2.0',
+      'method': 'foo',
+      'params': {},
+      'id': 1234
+    },
+        5,
+        'Error message.',
+        data: 'data value');
+  });
+
   group("JSON", () {
     test("handles a request parsed from JSON", () {
       server.registerMethod('foo', (params) {
diff --git a/test/server/utils.dart b/test/server/utils.dart
index 07f571c..6f92c0a 100644
--- a/test/server/utils.dart
+++ b/test/server/utils.dart
@@ -8,9 +8,10 @@
 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
 
 void expectErrorResponse(json_rpc.Server server, request, int errorCode,
-    String message) {
+    String message, {data}) {
   var id;
   if (request is Map) id = request['id'];
+  if (data == null) data = {'request': request};
 
   expect(server.handleRequest(request), completion(equals({
     'jsonrpc': '2.0',
@@ -18,7 +19,7 @@
     'error': {
       'code': errorCode,
       'message': message,
-      'data': {'request': request}
+      'data': data
     }
   })));
 }