From c9c703cc3cd8a3214a06b096e05ac626e5106bac Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Mon, 7 Mar 2016 15:28:27 +0200 Subject: [PATCH] Multiple headers with the same fixed --- apps/tests/http-tests.ts | 21 +++++++++++++++++++++ http/http-request.android.ts | 5 +++-- http/http-request.ios.ts | 8 +++++--- http/http.d.ts | 4 +++- http/http.ts | 13 +++++++++++++ 5 files changed, 45 insertions(+), 6 deletions(-) diff --git a/apps/tests/http-tests.ts b/apps/tests/http-tests.ts index 6f0a92846..76afefead 100644 --- a/apps/tests/http-tests.ts +++ b/apps/tests/http-tests.ts @@ -535,6 +535,27 @@ export var test_request_headersSentAndReceivedProperly = function (done) { }); }; +export var test_request_headersWithSameKeyAddedProperly = function (done) { + var keyName = "key"; + var value1 = "value1"; + var value2 = "value2"; + + var headers = {}; + + (http).addHeader(headers, keyName, value1); + (http).addHeader(headers, keyName, value2); + + try { + TKUnit.assertTrue(Array.isArray(headers[keyName])); + TKUnit.assertEqual(headers[keyName][0], value1); + TKUnit.assertEqual(headers[keyName][1], value2); + done(null); + } + catch (err) { + done(err); + } +}; + export var test_request_contentSentAndReceivedProperly = function (done) { var result; diff --git a/http/http-request.android.ts b/http/http-request.android.ts index ef0966a11..bc3b9bd8e 100644 --- a/http/http-request.android.ts +++ b/http/http-request.android.ts @@ -58,7 +58,7 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request } // read the headers - var headers = {}; + var headers: http.Headers = {}; if (result.headers) { var jHeaders = result.headers; var length = jHeaders.size(); @@ -66,7 +66,8 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request var pair: com.tns.Async.Http.KeyValuePair; for (i = 0; i < length; i++) { pair = jHeaders.get(i); - headers[pair.key] = pair.value; + + (http).addHeader(headers, pair.key, pair.value); } } diff --git a/http/http-request.ios.ts b/http/http-request.ios.ts index ac1cbcde4..60df5f1cb 100644 --- a/http/http-request.ios.ts +++ b/http/http-request.ios.ts @@ -60,14 +60,16 @@ export function request(options: http.HttpRequestOptions): Promisehttp).addHeader(headers, key, value); } } diff --git a/http/http.d.ts b/http/http.d.ts index 7fcd259c6..d56beecb5 100644 --- a/http/http.d.ts +++ b/http/http.d.ts @@ -103,13 +103,15 @@ declare module "http" { /** * Gets the response headers. */ - headers: any; + headers: Headers; /** * Gets the response content. */ content?: HttpContent; } + + export type Headers = { [key: string]: string | string[] }; /** * Encapsulates the content of an HttpResponse. diff --git a/http/http.ts b/http/http.ts index 9178bb7e0..5923c7514 100644 --- a/http/http.ts +++ b/http/http.ts @@ -1,5 +1,6 @@ import image = require("image-source"); import httpRequest = require("http/http-request"); +import dts = require("http"); global.moduleMerge(httpRequest, exports); @@ -52,4 +53,16 @@ export function getFile(arg: any, destinationFilePath?: string): Promise { } }, e => reject(e)); }); +} + +export function addHeader(headers: dts.Headers, key: string, value: string): void{ + if(!headers[key]) { + headers[key] = value; + } else if (Array.isArray(headers[key])){ + (headers[key]).push(value); + } else { + let values: string[] = [headers[key]]; + values.push(value); + headers[key] = values; + } } \ No newline at end of file