From 63c8ef1b78fd33379bbe27109924166a5aaa8e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20=C4=90oki=C4=87?= Date: Sat, 26 Dec 2015 12:57:44 +0100 Subject: [PATCH 1/4] Initial commit of jquery-mockjax typescript defintion based on work by Laszlo Jakab. --- jquery-mockjax/jquery-mockjax.d.ts | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 jquery-mockjax/jquery-mockjax.d.ts diff --git a/jquery-mockjax/jquery-mockjax.d.ts b/jquery-mockjax/jquery-mockjax.d.ts new file mode 100644 index 0000000000..ea33969bb1 --- /dev/null +++ b/jquery-mockjax/jquery-mockjax.d.ts @@ -0,0 +1,40 @@ +// Type definitions for jQuery Mockjax 2.0.1 +// Project: https://github.com/jakerella/jquery-mockjax +// Definitions by: Laszlo Jakab , Vladimir Đokić +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +interface MockJaxSettings { + url?: string | RegExp; + data?: any; + type?: string; + headers?: any; + status?: number; + statusText?: string; + responseTime?: number; + isTimeout?: boolean; + contentType?: string; + response?: (settings: any) => void; + responseText?: string; + responseXml?: string; + proxy?: string; + lastModified?: string; + etag?: string; + onAfterSuccess?: Function; + onAfterError?: Function; + onAfterComplete?: Function; +} + +interface MockJaxStatic { + (options: MockJaxSettings): number; + handler(id?: number): any; + clear(id?: number): void; + mockedAjaxCalls(): any[]; + unfiredHandlers(): any[]; + unmockedAjaxCalls(): any[]; +} + +interface JQueryStatic { + mockjax: MockJaxStatic; +} From bb2f73735cc6a4cc0c4d39cac5fde35518a78dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20=C4=90oki=C4=87?= Date: Sat, 26 Dec 2015 14:06:58 +0100 Subject: [PATCH 2/4] Add logging, proxyType to MockJaxSettings. Add mockjaxSettings to JQueryStatic. Add several tests. --- jquery-mockjax/jquery-mockjax-tests.ts | 173 +++++++++++++++++++++++++ jquery-mockjax/jquery-mockjax.d.ts | 3 + 2 files changed, 176 insertions(+) create mode 100644 jquery-mockjax/jquery-mockjax-tests.ts diff --git a/jquery-mockjax/jquery-mockjax-tests.ts b/jquery-mockjax/jquery-mockjax-tests.ts new file mode 100644 index 0000000000..3528c0fea5 --- /dev/null +++ b/jquery-mockjax/jquery-mockjax-tests.ts @@ -0,0 +1,173 @@ +/// +/// +/// + +class Tests { + private _noErrorCallbackExpected: (jqXHR: JQueryXHR, textStatus: string, errorThrown: string) => any; + private _defaultMockjaxSettings: MockJaxSettings; + + run(): void { + const self = this; + + var t = QUnit.test; + + QUnit.begin(() => { + + self._noErrorCallbackExpected = (jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any => { + QUnit.assert.ok(false, 'Error callback executed'); + }; + + // Speed up our tests + $.mockjaxSettings.responseTime = 0; + $.mockjaxSettings.logging = false; + self._defaultMockjaxSettings = $.mockjaxSettings; + + }); + + QUnit.testDone(() => { + $.mockjax.clear(); + $.mockjaxSettings = self._defaultMockjaxSettings; + }); + + QUnit.module('Core'); + + t('Return XMLHttpRequest object from $.ajax', (assert) => { + $.mockjax({ + url: '/xmlhttprequest', + responseText: 'Hello Word' + }); + + var xhr = $.ajax({ + url: '/xmlhttprequest', + complete: () => { } + }); + + if (xhr && xhr.abort) { + xhr.abort(); + } + + assert.ok(xhr, 'XHR object is not null or undefined'); + assert.ok(xhr.done && xhr.fail, 'Got Promise methods'); + }); + + t('Intercept synchronized proxy calls and return synchronously', (assert) => { + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); + + $.ajax({ + url: '/proxy', + dataType: 'json', + async: false, + success: (json) => { + assert.ok(json && json.proxy, 'Proxy callback request succeeded'); + }, + error: self._noErrorCallbackExpected + }); + }); + + t('Intercept asynchronized proxy calls', (assert) => { + var done = assert.async(); + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); + + $.ajax({ + url: '/proxy', + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy callback request succeeded'); + done(); + }, + error: self._noErrorCallbackExpected + }); + }); + + t('Intercept and proxy (sub-ajax request)', (assert) => { + var done = assert.async(); + + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); + + $.ajax({ + url: '/proxy', + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy request succeeded'); + }, + error: self._noErrorCallbackExpected, + complete: done + }); + }); + + t('Proxy type specification', (assert) => { + var done = assert.async(); + + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json', + proxyType: 'GET' + }); + + $.ajax({ + url: '/proxy', + error: self._noErrorCallbackExpected, + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy request succeeded'); + }, + complete: done + }); + }); + + t('Support 1.5 $.ajax(url, settings) signature.', (assert) => { + var done = assert.async(); + + $.mockjax({ + url: '/resource', + responseText: 'Hello World' + }); + + $.ajax('/resource', { + success: (response) => { + assert.equal(response, 'Hello World'); + }, + error: self._noErrorCallbackExpected, + complete: done + }); + }); + + t('Dynamic response callback', (assert) => { + var done = assert.async(); + + var settings: MockJaxSettings = { + url: '/response-callback', + response: (settings) => { + settings.responseText = settings.data.response + ' 2'; + } + }; + + $.mockjax(settings); + + $.ajax({ + url: '/response-callback', + dataType: 'text', + data: { + response: 'Hello world' + }, + error: self._noErrorCallbackExpected, + complete: (xhr) => { + assert.equal(xhr.responseText, 'Hello world 2', 'Response Text matches'); + done(); + } + }); + }); + } +} + +var tests = new Tests(); +tests.run(); diff --git a/jquery-mockjax/jquery-mockjax.d.ts b/jquery-mockjax/jquery-mockjax.d.ts index ea33969bb1..a3045b503c 100644 --- a/jquery-mockjax/jquery-mockjax.d.ts +++ b/jquery-mockjax/jquery-mockjax.d.ts @@ -10,6 +10,7 @@ interface MockJaxSettings { data?: any; type?: string; headers?: any; + logging?: boolean; status?: number; statusText?: string; responseTime?: number; @@ -19,6 +20,7 @@ interface MockJaxSettings { responseText?: string; responseXml?: string; proxy?: string; + proxyType?: string; lastModified?: string; etag?: string; onAfterSuccess?: Function; @@ -37,4 +39,5 @@ interface MockJaxStatic { interface JQueryStatic { mockjax: MockJaxStatic; + mockjaxSettings: MockJaxSettings; } From 85e3e60db34dcb87f133f08f861ebbecd7a43b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20=C4=90oki=C4=87?= Date: Sat, 26 Dec 2015 15:14:17 +0100 Subject: [PATCH 3/4] Convert remaining tabs to spaces for jquery-mockjax-tests.ts. --- jquery-mockjax/jquery-mockjax-tests.ts | 243 ++++++++++++------------- 1 file changed, 121 insertions(+), 122 deletions(-) diff --git a/jquery-mockjax/jquery-mockjax-tests.ts b/jquery-mockjax/jquery-mockjax-tests.ts index 3528c0fea5..6fae52eb07 100644 --- a/jquery-mockjax/jquery-mockjax-tests.ts +++ b/jquery-mockjax/jquery-mockjax-tests.ts @@ -11,161 +11,160 @@ class Tests { var t = QUnit.test; - QUnit.begin(() => { + QUnit.begin(() => { - self._noErrorCallbackExpected = (jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any => { - QUnit.assert.ok(false, 'Error callback executed'); - }; + self._noErrorCallbackExpected = (jqXHR: JQueryXHR, textStatus: string, errorThrown: string): any => { + QUnit.assert.ok(false, 'Error callback executed'); + }; - // Speed up our tests - $.mockjaxSettings.responseTime = 0; + // Speed up our tests + $.mockjaxSettings.responseTime = 0; $.mockjaxSettings.logging = false; - self._defaultMockjaxSettings = $.mockjaxSettings; + self._defaultMockjaxSettings = $.mockjaxSettings; + }); - }); - - QUnit.testDone(() => { - $.mockjax.clear(); - $.mockjaxSettings = self._defaultMockjaxSettings; - }); + QUnit.testDone(() => { + $.mockjax.clear(); + $.mockjaxSettings = self._defaultMockjaxSettings; + }); QUnit.module('Core'); t('Return XMLHttpRequest object from $.ajax', (assert) => { - $.mockjax({ - url: '/xmlhttprequest', - responseText: 'Hello Word' - }); + $.mockjax({ + url: '/xmlhttprequest', + responseText: 'Hello Word' + }); - var xhr = $.ajax({ - url: '/xmlhttprequest', - complete: () => { } - }); + var xhr = $.ajax({ + url: '/xmlhttprequest', + complete: () => { } + }); - if (xhr && xhr.abort) { - xhr.abort(); - } + if (xhr && xhr.abort) { + xhr.abort(); + } - assert.ok(xhr, 'XHR object is not null or undefined'); - assert.ok(xhr.done && xhr.fail, 'Got Promise methods'); - }); + assert.ok(xhr, 'XHR object is not null or undefined'); + assert.ok(xhr.done && xhr.fail, 'Got Promise methods'); + }); t('Intercept synchronized proxy calls and return synchronously', (assert) => { - $.mockjax({ - url: '/proxy', - proxy: 'test_proxy.json' - }); + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); - $.ajax({ - url: '/proxy', - dataType: 'json', - async: false, - success: (json) => { - assert.ok(json && json.proxy, 'Proxy callback request succeeded'); - }, - error: self._noErrorCallbackExpected - }); - }); + $.ajax({ + url: '/proxy', + dataType: 'json', + async: false, + success: (json) => { + assert.ok(json && json.proxy, 'Proxy callback request succeeded'); + }, + error: self._noErrorCallbackExpected + }); + }); t('Intercept asynchronized proxy calls', (assert) => { - var done = assert.async(); - $.mockjax({ - url: '/proxy', - proxy: 'test_proxy.json' - }); + var done = assert.async(); + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); - $.ajax({ - url: '/proxy', - dataType: 'json', - success: (json) => { - assert.ok(json && json.proxy, 'Proxy callback request succeeded'); - done(); - }, - error: self._noErrorCallbackExpected - }); - }); + $.ajax({ + url: '/proxy', + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy callback request succeeded'); + done(); + }, + error: self._noErrorCallbackExpected + }); + }); t('Intercept and proxy (sub-ajax request)', (assert) => { - var done = assert.async(); + var done = assert.async(); - $.mockjax({ - url: '/proxy', - proxy: 'test_proxy.json' - }); + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json' + }); - $.ajax({ - url: '/proxy', - dataType: 'json', - success: (json) => { - assert.ok(json && json.proxy, 'Proxy request succeeded'); - }, - error: self._noErrorCallbackExpected, - complete: done - }); - }); + $.ajax({ + url: '/proxy', + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy request succeeded'); + }, + error: self._noErrorCallbackExpected, + complete: done + }); + }); t('Proxy type specification', (assert) => { - var done = assert.async(); + var done = assert.async(); - $.mockjax({ - url: '/proxy', - proxy: 'test_proxy.json', - proxyType: 'GET' - }); + $.mockjax({ + url: '/proxy', + proxy: 'test_proxy.json', + proxyType: 'GET' + }); - $.ajax({ - url: '/proxy', - error: self._noErrorCallbackExpected, - dataType: 'json', - success: (json) => { - assert.ok(json && json.proxy, 'Proxy request succeeded'); - }, - complete: done - }); - }); + $.ajax({ + url: '/proxy', + error: self._noErrorCallbackExpected, + dataType: 'json', + success: (json) => { + assert.ok(json && json.proxy, 'Proxy request succeeded'); + }, + complete: done + }); + }); - t('Support 1.5 $.ajax(url, settings) signature.', (assert) => { - var done = assert.async(); + t('Support 1.5 $.ajax(url, settings) signature.', (assert) => { + var done = assert.async(); - $.mockjax({ - url: '/resource', - responseText: 'Hello World' - }); + $.mockjax({ + url: '/resource', + responseText: 'Hello World' + }); - $.ajax('/resource', { - success: (response) => { - assert.equal(response, 'Hello World'); - }, - error: self._noErrorCallbackExpected, - complete: done - }); - }); + $.ajax('/resource', { + success: (response) => { + assert.equal(response, 'Hello World'); + }, + error: self._noErrorCallbackExpected, + complete: done + }); + }); - t('Dynamic response callback', (assert) => { - var done = assert.async(); + t('Dynamic response callback', (assert) => { + var done = assert.async(); var settings: MockJaxSettings = { - url: '/response-callback', - response: (settings) => { - settings.responseText = settings.data.response + ' 2'; - } - }; + url: '/response-callback', + response: (settings) => { + settings.responseText = settings.data.response + ' 2'; + } + }; - $.mockjax(settings); + $.mockjax(settings); - $.ajax({ - url: '/response-callback', - dataType: 'text', - data: { - response: 'Hello world' - }, - error: self._noErrorCallbackExpected, - complete: (xhr) => { - assert.equal(xhr.responseText, 'Hello world 2', 'Response Text matches'); - done(); - } - }); - }); + $.ajax({ + url: '/response-callback', + dataType: 'text', + data: { + response: 'Hello world' + }, + error: self._noErrorCallbackExpected, + complete: (xhr) => { + assert.equal(xhr.responseText, 'Hello world 2', 'Response Text matches'); + done(); + } + }); + }); } } From 180515d68f03853384c63c13c540f7097d230c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladimir=20=C4=90oki=C4=87?= Date: Mon, 28 Dec 2015 21:07:02 +0100 Subject: [PATCH 4/4] Define headers in MockJaxSettings as MockJaxSettingsHeaders interface in order to have better type safety. Define responseText as string or Object (instead of just string). --- jquery-mockjax/jquery-mockjax.d.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jquery-mockjax/jquery-mockjax.d.ts b/jquery-mockjax/jquery-mockjax.d.ts index a3045b503c..a86bd856c6 100644 --- a/jquery-mockjax/jquery-mockjax.d.ts +++ b/jquery-mockjax/jquery-mockjax.d.ts @@ -5,11 +5,15 @@ /// +interface MockJaxSettingsHeaders { + [key: string]: string; +} + interface MockJaxSettings { url?: string | RegExp; data?: any; type?: string; - headers?: any; + headers?: MockJaxSettingsHeaders; logging?: boolean; status?: number; statusText?: string; @@ -17,7 +21,7 @@ interface MockJaxSettings { isTimeout?: boolean; contentType?: string; response?: (settings: any) => void; - responseText?: string; + responseText?: string | Object; responseXml?: string; proxy?: string; proxyType?: string;