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
}
})));
}