PageRenderTime 1393ms CodeModel.GetById 48ms RepoModel.GetById 11ms app.codeStats 0ms

/test/unit/glow/net/net.js

https://github.com/glow/glow2
JavaScript | 404 lines | 334 code | 68 blank | 2 comment | 5 complexity | c33fe661c3245ec68de8f9a9398e279a MD5 | raw file
Possible License(s): Apache-2.0
  1. module('glow.net');
  2. test('Checks public interface', function() {
  3. expect(1);
  4. ok( (glow.net !== undefined), 'my instance of glow has the net module defined.' );
  5. });
  6. test('Basic net.get', function(){
  7. expect(7);
  8. stop();
  9. var getRequest = glow.net.get('xhr/basictext.txt').on("load", function(response) {
  10. ok(true, 'correct callback used');
  11. equal(response.status, 200, 'Status code');
  12. equal(response.nativeResponse.status, 200, 'Native response found');
  13. ok(response.statusText(), 'Status returned: ' + response.statusText());
  14. equal(response.header('Content-Type'), 'text/plain', 'Content-Type header');
  15. start();
  16. }).on('error', function(response){
  17. ok(false, 'correct callback used');
  18. start();
  19. });
  20. equal(typeof getRequest.abort, 'function', 'Return object has abort method');
  21. equal(typeof getRequest.on, 'function', 'Return object has on method');
  22. stop(5000);
  23. });
  24. test('glow.net.get async header setting', function() {
  25. expect(5);
  26. stop();
  27. var request = glow.net.get('xhr/requestheaderdump.php',
  28. {headers: {
  29. 'Custom-Header': 'thisisatest',
  30. 'Content-Type': 'image/png'
  31. }})
  32. .on('load',
  33. function(response){
  34. ok(true, 'correct callback used');
  35. ok(/^REQUEST_METHOD: GET/m.test(response.text()), 'Using get method');
  36. ok(/^HTTP_CUSTOM_HEADER: thisisatest/m.test(response.text()), "Custom Header Sent");
  37. ok(/^HTTP_X_REQUESTED_WITH: XMLHttpRequest/m.test(response.text()), "X-Requested-With default set");
  38. ok(/^CONTENT_TYPE: image\/png/m.test(response.text()), "Content-type Changed");
  39. start();
  40. })
  41. .on("error",
  42. function(response){
  43. ok(false, "correct callback used");
  44. start();
  45. });
  46. stop(5000);
  47. });
  48. test("glow.net.get async xml", function() {
  49. expect(3);
  50. stop();
  51. var getXml = glow.net.get("xhr/xml.xml").on("load",
  52. function(response){
  53. ok(true, "correct callback used");
  54. var xml = response.xml();
  55. ok(xml, "xml returned");
  56. equal(xml.getElementsByTagName("foo").length, 3, "3 elements of foo");
  57. start();
  58. })
  59. .on("error",
  60. function(response){
  61. ok(false, "correct callback used");
  62. start();
  63. });
  64. stop(5000);
  65. });
  66. test("glow.net.get force xml", function() {
  67. expect(5);
  68. stop();
  69. var getXml = glow.net.get("xhr/xml.txt", {
  70. forceXml: true})
  71. .on("load",
  72. function(response){
  73. ok(true, "correct callback used");
  74. var xml = response.xml();
  75. ok(xml, "xml returned");
  76. equal(xml.getElementsByTagName("hello").length, 1, "1 element of hello");
  77. equal(xml.getElementsByTagName("world").length, 1, "1 element of world");
  78. equal(xml.getElementsByTagName("world")[0].childNodes[0].nodeValue, 'Yey for XML', "Got text node value");
  79. start();
  80. })
  81. .on("error",
  82. function(response){
  83. ok(false, "correct callback used");
  84. start();
  85. });
  86. stop(5000);
  87. });
  88. // need decodeJson method
  89. test("glow.net.get async json", function() {
  90. expect(4);
  91. stop();
  92. var getRequest = glow.net.get("xhr/json.txt",
  93. {some:"postData", blah:["something", "somethingElse"]})
  94. .on("load",
  95. function(response){
  96. ok(true, "correct callback used");
  97. var json = response.json();
  98. ok(json, "json returned");
  99. equal(json.hello, "world", "Returned correct value for 'hello'");
  100. equal(json.something, 3, "Returned correct value for 'something'");
  101. start();
  102. })
  103. .on("error",
  104. function(response){
  105. ok(false, "correct callback used");
  106. start();
  107. });
  108. stop(5000);
  109. });
  110. test("glow.net.abort", function() {
  111. expect(2);
  112. stop();
  113. var aborted = true;
  114. var abortableRequest = glow.net.get("xhr/large.txt", {
  115. cacheBust: true
  116. }).on("load",
  117. function(response){
  118. aborted = false;
  119. })
  120. .on("error",
  121. function(response){
  122. aborted = false;
  123. })
  124. .on("abort",
  125. function(response){
  126. ok(true, "Abort event fired");
  127. start();
  128. });
  129. abortableRequest.abort();
  130. ok(aborted, "Request aborted");
  131. stop(5000);
  132. });
  133. test("glow.net.post async string", function() {
  134. expect(3);
  135. stop();
  136. var postRequest = glow.net.post("xhr/requestheaderdump.php",
  137. "some=postData&blah=hurrah")
  138. .on("load",
  139. function(response){
  140. ok(true, "correct callback used");
  141. equal( (/^REQUEST_METHOD: (\w+)/m.exec(response.text()) || [,,])[1], "POST", "Using post method" );
  142. equal( (/^CONTENT_LENGTH: (\d+)/m.exec(response.text()) || [,,])[1], "25", "Correct content length" );
  143. start();
  144. })
  145. .on("error",
  146. function(response){
  147. ok(false, "correct callback used");
  148. start();
  149. });
  150. stop(5000);
  151. });
  152. test("glow.net.post aync json", function() {
  153. expect(3);
  154. stop();
  155. var postRequest = glow.net.post("xhr/requestheaderdump.php",
  156. {some:"postData", blah:["something", "somethingElse"]}).on("load",
  157. function(response){
  158. ok(true, "correct callback used");
  159. equal( (/^REQUEST_METHOD: (\w+)/m.exec(response.text()) || [,,])[1], "POST", "Using post method" );
  160. equal( (/^CONTENT_LENGTH: (\d+)/m.exec(response.text()) || [,,])[1], "47", "Correct content length" );
  161. start();
  162. })
  163. .on("error",
  164. function(response){
  165. ok(false, "correct callback used");
  166. start();
  167. });
  168. stop(5000);
  169. });
  170. test("glow.net.get timeout cancelling", function() {
  171. expect(2);
  172. stop(5000);
  173. var noError = true;
  174. var getRequest = glow.net.get("xhr/morebasictext.txt",
  175. {timeout: 2}).on("load",
  176. function(response){
  177. ok(true, "load called");
  178. start();
  179. })
  180. .on("error",
  181. function(response){
  182. noError = false;
  183. });
  184. ok(noError, "error (timeout) not called");
  185. });
  186. test("glow.net.jsonp general", 2, function() {
  187. stop(5000);
  188. var jsonpRequest = glow.net.jsonp("xhr/jsoncallback.js?callback={callback}", {
  189. timeout: 2
  190. }).on('load', function(data) {
  191. ok(true, "load called");
  192. equal(data.hello, "world", "Data returned");
  193. start();
  194. }).on('error', function() {
  195. ok(false, "error callback not called");
  196. });
  197. });
  198. test("glow.net.jsonp timeout and charset", function() {
  199. expect(3);
  200. stop();
  201. var onLoadCalled = false;
  202. //this script doesn't actually callback, so it'll timeout
  203. var jsonpRequest = glow.net.jsonp("xhr/loadscriptfail.js?callback={callback}", {
  204. timeout: 2,
  205. charset: "utf-8"
  206. }).on('load', function(data) {
  207. onLoadCalled = true;
  208. }).on('error', function() {
  209. ok(!onLoadCalled, "load not called");
  210. ok(true, "error (timeout) called");
  211. start();
  212. });
  213. equals( glow('script').attr("charset"), "utf-8", "Charset set" );
  214. stop(5000);
  215. });
  216. test("glow.net.jsonp aborting", function() {
  217. stop();
  218. var onLoadCalled = false;
  219. var onErrorCalled = false;
  220. var onAbortCalled = false;
  221. var jsonpRequest = glow.net.jsonp("testdata/xhr/jsoncallback.js?callback={callback}",
  222. {timeout: 2}).on('load',
  223. function(data) {
  224. onLoadCalled = true;
  225. }).on('error',
  226. function() {
  227. onErrorCalled = true;
  228. }).on('abort',
  229. function() {
  230. onAbortCalled = true;
  231. start();
  232. });
  233. jsonpRequest.abort();
  234. expect(3);
  235. ok(!onLoadCalled, "load not called");
  236. ok(!onErrorCalled, "error (timeout) not called");
  237. ok(onAbortCalled, "abort called");
  238. stop(5000);
  239. });
  240. test("glow.net.getResources single CSS", function() {
  241. expect(5);
  242. stop(5000);
  243. var cssRequest = glow.net.getResources("xhr/resources/test.css").on('progress', function(response) {
  244. ok(true, "Progress fired for single CSS file");
  245. equal(response.type, 'css', 'Correct type');
  246. equal(response.resource[0].nodeName, 'LINK', 'Correct resource');
  247. equal(response.url, 'xhr/resources/test.css', 'Correct url');
  248. }).on('load', function(response) {
  249. ok(true, "Load fired");
  250. start();
  251. });
  252. });
  253. test("glow.net.getResources single image", function() {
  254. expect(5);
  255. stop(5000);
  256. var timeoutCancelled = true;
  257. var image = glow.net.getResources('xhr/resources/dragon.jpg').on('progress', function(response) {
  258. ok(true, "Progress fired for single image (this should appear 1 time)");
  259. equal(response.type, 'img', 'Correct type');
  260. equal(response.resource[0].nodeName, 'IMG', 'Correct resource');
  261. equal(response.url, 'xhr/resources/dragon.jpg', 'Correct url');
  262. }).on('load', function(response) {
  263. ok(true, "Load fired");
  264. start();
  265. });
  266. });
  267. test("glow.net.getResources multiple images", function() {
  268. expect(3);
  269. stop(5000);
  270. var timeoutCancelled = true;
  271. var images = glow.net.getResources([
  272. 'xhr/resources/glow_g.png', 'xhr/resources/bunny.jpg'
  273. ]).on('progress', function(response){
  274. ok(true, "Progress fired (this should appear 2 times)");
  275. }).on('load', function(response) {
  276. ok(true, "Load fired");
  277. start();
  278. })
  279. });
  280. test("glow.net.getResources mixed images and css", function() {
  281. expect(6);
  282. stop(5000);
  283. var imagesAndCss = glow.net.getResources([
  284. "xhr/resources/homebannerbg.png",
  285. "xhr/resources/gradientbg.png",
  286. "xhr/resources/test.css"
  287. ]).on('progress', function(response){
  288. ok(true, "Progress fired (this should appear 3 times)");
  289. }).on('load', function(response) {
  290. ok(true, "Load fired");
  291. equal(this.totalResources, 3, 'totalResources');
  292. equal(this.totalLoaded, 3, 'totalLoaded');
  293. start();
  294. });
  295. });
  296. test("glow.net.put json", function() {
  297. expect(2);
  298. stop();
  299. var putRequest = glow.net.put("xhr/put.php",
  300. {some:"putData", blah:["something", "somethingElse"]})
  301. .on('load',
  302. function(response) {
  303. ok(true, "correct callback used");
  304. equal( response.text(), "PUT: putData", "Using put method" );
  305. start();
  306. }).on('error',
  307. function() {
  308. ok(false, "correct callback used");
  309. start();
  310. });
  311. stop(5000);
  312. });
  313. test("glow.net.del", function() {
  314. expect(2);
  315. stop();
  316. var doomedRequest = glow.net.del("xhr/delete.php").on('load',
  317. function(response) {
  318. ok(true, "correct callback used");
  319. equal( response.text(), "DELETE request", "Using delete method" );
  320. start();
  321. }).on('error',
  322. function() {
  323. ok(false, "correct callback used");
  324. start();
  325. });
  326. stop(5000);
  327. });
  328. test("glow.net.crossDomainRequest", function () {
  329. expect(1);
  330. stop(5000);
  331. glow.net.crossDomainGet(window.location.href.replace(/net\.html.*$/, '') + 'xhr/xdomain/windowdotname.html?search')
  332. .on('load', function (response) {
  333. equal(response.text(), 'test response', 'get xDomainResponse');
  334. start();
  335. });
  336. });