THRIFT-1202 Malformed JSON for map<string,type> services parameters
Patch: Henrique Mendonca
git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1135763 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/java/test/org/apache/thrift/server/ServerTestBase.java b/lib/java/test/org/apache/thrift/server/ServerTestBase.java
index 802aed9..13a8be6 100644
--- a/lib/java/test/org/apache/thrift/server/ServerTestBase.java
+++ b/lib/java/test/org/apache/thrift/server/ServerTestBase.java
@@ -38,13 +38,7 @@
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
-import thrift.test.Insanity;
-import thrift.test.Numberz;
-import thrift.test.ThriftTest;
-import thrift.test.Xception;
-import thrift.test.Xception2;
-import thrift.test.Xtruct;
-import thrift.test.Xtruct2;
+import thrift.test.*;
public abstract class ServerTestBase extends TestCase {
@@ -104,15 +98,14 @@
public Map<Integer,Integer> testMap(Map<Integer,Integer> thing) {
System.out.print("testMap({");
- boolean first = true;
- for (int key : thing.keySet()) {
- if (first) {
- first = false;
- } else {
- System.out.print(", ");
- }
- System.out.print(key + " => " + thing.get(key));
- }
+ System.out.print(thing);
+ System.out.print("})\n");
+ return thing;
+ }
+
+ public Map<String,String> testStringMap(Map<String,String> thing) {
+ System.out.print("testStringMap({");
+ System.out.print(thing);
System.out.print("})\n");
return thing;
}
diff --git a/lib/js/test/test.html b/lib/js/test/test.html
index 505991f..bd124af 100644
--- a/lib/js/test/test.html
+++ b/lib/js/test/test.html
@@ -43,15 +43,16 @@
var protocol = new Thrift.Protocol(transport);
var client = new ThriftTest.ThriftTestClient(protocol);
+ // all Languages in UTF-8
+ var stringTest = "Afrikaans, Alemannisch, Aragonés, العربية, مصرى, Asturianu, Aymar aru, Azərbaycan, Башҡорт, Boarisch, Žemaitėška, Беларуская, Беларуская (тарашкевіца), Български, Bamanankan, বাংলা, Brezhoneg, Bosanski, Català, Mìng-dĕ̤ng-ngṳ̄, Нохчийн, Cebuano, ᏣᎳᎩ, Česky, Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ, Чӑвашла, Cymraeg, Dansk, Zazaki, ދިވެހިބަސް, Ελληνικά, Emiliàn e rumagnòl, English, Esperanto, Español, Eesti, Euskara, فارسی, Suomi, Võro, Føroyskt, Français, Arpetan, Furlan, Frysk, Gaeilge, 贛語, Gàidhlig, Galego, Avañe'ẽ, ગુજરાતી, Gaelg, עברית, हिन्दी, Fiji Hindi, Hrvatski, Kreyòl ayisyen, Magyar, Հայերեն, Interlingua, Bahasa Indonesia, Ilokano, Ido, Íslenska, Italiano, 日本語, Lojban, Basa Jawa, ქართული, Kongo, Kalaallisut, ಕನ್ನಡ, 한국어, Къарачай-Малкъар, Ripoarisch, Kurdî, Коми, Kernewek, Кыргызча, Latina, Ladino, Lëtzebuergesch, Limburgs, Lingála, ລາວ, Lietuvių, Latviešu, Basa Banyumasan, Malagasy, Македонски, മലയാളം, मराठी, Bahasa Melayu, مازِرونی, Nnapulitano, Nedersaksisch, नेपाल भाषा, Nederlands, Norsk (nynorsk), Norsk (bokmål), Nouormand, Diné bizaad, Occitan, Иронау, Papiamentu, Deitsch, Norfuk / Pitkern, Polski, پنجابی, پښتو, Português, Runa Simi, Rumantsch, Romani, Română, Русский, Саха тыла, Sardu, Sicilianu, Scots, Sámegiella, Simple English, Slovenčina, Slovenščina, Српски / Srpski, Seeltersk, Svenska, Kiswahili, தமிழ், తెలుగు, Тоҷикӣ, ไทย, Türkmençe, Tagalog, Türkçe, Татарча/Tatarça, Українська, اردو, Tiếng Việt, Volapük, Walon, Winaray, 吴语, isiXhosa, ייִדיש, Yorùbá, Zeêuws, 中文, Bân-lâm-gú, 粵語";
+
module("Base Types");
-
+
test("Void", function() {
equals(client.testVoid(), undefined);
});
test("String", function() {
- // all Languages in UTF-8
- var stringTest = "Afrikaans, Alemannisch, Aragonés, العربية, مصرى, Asturianu, Aymar aru, Azərbaycan, Башҡорт, Boarisch, Žemaitėška, Беларуская, Беларуская (тарашкевіца), Български, Bamanankan, বাংলা, Brezhoneg, Bosanski, Català, Mìng-dĕ̤ng-ngṳ̄, Нохчийн, Cebuano, ᏣᎳᎩ, Česky, Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ, Чӑвашла, Cymraeg, Dansk, Zazaki, ދިވެހިބަސް, Ελληνικά, Emiliàn e rumagnòl, English, Esperanto, Español, Eesti, Euskara, فارسی, Suomi, Võro, Føroyskt, Français, Arpetan, Furlan, Frysk, Gaeilge, 贛語, Gàidhlig, Galego, Avañe'ẽ, ગુજરાતી, Gaelg, עברית, हिन्दी, Fiji Hindi, Hrvatski, Kreyòl ayisyen, Magyar, Հայերեն, Interlingua, Bahasa Indonesia, Ilokano, Ido, Íslenska, Italiano, 日本語, Lojban, Basa Jawa, ქართული, Kongo, Kalaallisut, ಕನ್ನಡ, 한국어, Къарачай-Малкъар, Ripoarisch, Kurdî, Коми, Kernewek, Кыргызча, Latina, Ladino, Lëtzebuergesch, Limburgs, Lingála, ລາວ, Lietuvių, Latviešu, Basa Banyumasan, Malagasy, Македонски, മലയാളം, मराठी, Bahasa Melayu, مازِرونی, Nnapulitano, Nedersaksisch, नेपाल भाषा, Nederlands, Norsk (nynorsk), Norsk (bokmål), Nouormand, Diné bizaad, Occitan, Иронау, Papiamentu, Deitsch, Norfuk / Pitkern, Polski, پنجابی, پښتو, Português, Runa Simi, Rumantsch, Romani, Română, Русский, Саха тыла, Sardu, Sicilianu, Scots, Sámegiella, Simple English, Slovenčina, Slovenščina, Српски / Srpski, Seeltersk, Svenska, Kiswahili, தமிழ், తెలుగు, Тоҷикӣ, ไทย, Türkmençe, Tagalog, Türkçe, Татарча/Tatarça, Українська, اردو, Tiếng Việt, Volapük, Walon, Winaray, 吴语, isiXhosa, ייִדיש, Yorùbá, Zeêuws, 中文, Bân-lâm-gú, 粵語";
equals(client.testString(stringTest), stringTest);
var specialCharacters = 'quote: \" backslash:' +
@@ -117,20 +118,30 @@
equals(JSON.stringify(nestTestOutput), JSON.stringify(nestTestInput))
});
-
+
test("Map", function() {
var mapTestInput = {7:77, 8:88, 9:99};
var mapTestOutput = client.testMap(mapTestInput)
-
+
for (var key in mapTestOutput) {
equals(mapTestOutput[key], mapTestInput[key]);
}
-
- //HACK: content is OK but Java server returns JSON items in the wrong order {"8":88,"9":99,"7":77}
- //equals(JSON.stringify(mapTestOutput), JSON.stringify(mapTestInput))
});
-
+
+ test("StringMap", function() {
+ var mapTestInput = {
+ "a":"123", "a b":"with spaces ", "same":"same", "0":"numeric key",
+ "longValue":stringTest, stringTest:"long key"
+ };
+
+ var mapTestOutput = client.testStringMap(mapTestInput)
+
+ for (var key in mapTestOutput) {
+ equals(mapTestOutput[key], mapTestInput[key]);
+ }
+ });
+
test("Set", function() {
var setTestInput = new Array(1,2,3)
ok(client.testSet(setTestInput), setTestInput);
diff --git a/lib/js/thrift.js b/lib/js/thrift.js
index c7a46fd..f4e7235 100644
--- a/lib/js/thrift.js
+++ b/lib/js/thrift.js
@@ -460,7 +460,8 @@
map = ',' + map;
}
- map = '"' + k + '":' + v + map;
+ if ( ! isNaN(k)) { k = '"' + k + '"'; } //json "keys" need to be strings
+ map = k + ':' + v + map;
}
map = '{' + map;
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index da2aaf7..b6cd939 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -129,6 +129,7 @@
Xtruct testStruct(1: Xtruct thing),
Xtruct2 testNest(1: Xtruct2 thing),
map<i32,i32> testMap(1: map<i32,i32> thing),
+ map<string,string> testStringMap(1: map<string,string> thing),
set<i32> testSet(1: set<i32> thing),
list<i32> testList(1: list<i32> thing),
Numberz testEnum(1: Numberz thing),