| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 library XHRCrossOriginTest; | 5 library XHRCrossOriginTest; | 
| 6 import '../../pkg/unittest/lib/unittest.dart'; | 6 import '../../pkg/unittest/lib/unittest.dart'; | 
| 7 import '../../pkg/unittest/lib/html_config.dart'; | 7 import '../../pkg/unittest/lib/html_individual_config.dart'; | 
| 8 import 'dart:html'; | 8 import 'dart:html'; | 
| 9 import 'dart:json' as json; | 9 import 'dart:json' as json; | 
| 10 | 10 | 
| 11 /** | 11 /** | 
| 12  * Examine the value of "crossOriginPort" as passed in from the url from | 12  * Examine the value of "crossOriginPort" as passed in from the url from | 
| 13  * [window.location] to determine what the cross-origin port is for | 13  * [window.location] to determine what the cross-origin port is for | 
| 14  * this test. | 14  * this test. | 
| 15  */ | 15  */ | 
| 16  // TODO(efortuna): If we need to use this function frequently, make a | 16  // TODO(efortuna): If we need to use this function frequently, make a | 
| 17  // url_analyzer library that is part of test.dart that these tests can import. | 17  // url_analyzer library that is part of test.dart that these tests can import. | 
| 18 int get crossOriginPort { | 18 int get crossOriginPort { | 
| 19   var searchUrl = window.location.search; | 19   var searchUrl = window.location.search; | 
| 20   var crossOriginStr = 'crossOriginPort='; | 20   var crossOriginStr = 'crossOriginPort='; | 
| 21   var index = searchUrl.indexOf(crossOriginStr); | 21   var index = searchUrl.indexOf(crossOriginStr); | 
| 22   var nextArg = searchUrl.indexOf('&', index); | 22   var nextArg = searchUrl.indexOf('&', index); | 
| 23   return int.parse(searchUrl.substring(index + crossOriginStr.length, | 23   return int.parse(searchUrl.substring(index + crossOriginStr.length, | 
| 24       nextArg == -1 ? searchUrl.length : nextArg)); | 24       nextArg == -1 ? searchUrl.length : nextArg)); | 
| 25 } | 25 } | 
| 26 | 26 | 
| 27 main() { | 27 main() { | 
| 28   useHtmlConfiguration(); | 28   useHtmlIndividualConfiguration(); | 
| 29 | 29 | 
| 30   var port = crossOriginPort; | 30   group('supported', () { | 
| 31   var host = '${window.location.protocol}//${window.location.hostname}:$port'; | 31     test('supported', () { | 
|  | 32       expect(HttpRequest.supportsCrossOrigin, isTrue); | 
|  | 33     }); | 
|  | 34   }); | 
| 32 | 35 | 
| 33   test('XHR Cross-domain', () { | 36   group('functional', () { | 
| 34     var url =  '$host/root_dart/tests/html/xhr_cross_origin_data.txt'; | 37 | 
| 35     var xhr = new HttpRequest(); | 38     var port = crossOriginPort; | 
| 36     xhr.open('GET', url, async: true); | 39     var host = '${window.location.protocol}//${window.location.hostname}:$port'; | 
| 37     var validate = expectAsync1((data) { | 40 | 
| 38       expect(data, contains('feed')); | 41     test('XHR.get Cross-domain', () { | 
| 39       expect(data['feed'], contains('entry')); | 42       var gotError = false; | 
| 40       expect(data, isMap); | 43       var url = '$host/root_dart/tests/html/xhr_cross_origin_data.txt'; | 
| 41     }); | 44       return HttpRequest.request(url).then((xhr) { | 
| 42     xhr.onReadyStateChange.listen((e) { | 45         var data = json.parse(xhr.response); | 
| 43       guardAsync(() { | 46         expect(data, contains('feed')); | 
| 44         if (xhr.readyState == HttpRequest.DONE) { | 47         expect(data['feed'], contains('entry')); | 
| 45           validate(json.parse(xhr.response)); | 48         expect(data, isMap); | 
| 46         } | 49       }).catchError((error) {}, test: (error) { | 
|  | 50         gotError = true; | 
|  | 51         // Consume errors when not supporting cross origin. | 
|  | 52         return !HttpRequest.supportsCrossOrigin; | 
|  | 53       }).whenComplete(() { | 
|  | 54         // Expect that we got an error when cross origin is not supported. | 
|  | 55         expect(gotError, !HttpRequest.supportsCrossOrigin); | 
| 47       }); | 56       }); | 
| 48     }); | 57     }); | 
| 49     xhr.send(); |  | 
| 50   }); |  | 
| 51 | 58 | 
| 52   test('XHR.get Cross-domain', () { | 59     // Skip the rest if not supported. | 
| 53     var url = '$host/root_dart/tests/html/xhr_cross_origin_data.txt'; | 60     if (!HttpRequest.supportsCrossOrigin) { | 
| 54     HttpRequest.request(url).then(expectAsync1((xhr) { | 61       return; | 
| 55       var data = json.parse(xhr.response); | 62     } | 
| 56       expect(data, contains('feed')); |  | 
| 57       expect(data['feed'], contains('entry')); |  | 
| 58       expect(data, isMap); |  | 
| 59     })); |  | 
| 60   }); |  | 
| 61 | 63 | 
| 62   test('XHR.getWithCredentials Cross-domain', () { | 64     test('XHR Cross-domain', () { | 
| 63     var url = '$host/root_dart/tests/html/xhr_cross_origin_data.txt'; | 65       var url =  '$host/root_dart/tests/html/xhr_cross_origin_data.txt'; | 
| 64     HttpRequest.request(url, withCredentials: true).then(expectAsync1((xhr) { | 66       var xhr = new HttpRequest(); | 
| 65       var data = json.parse(xhr.response); | 67       xhr.open('GET', url, async: true); | 
| 66       expect(data, contains('feed')); | 68       var validate = expectAsync1((data) { | 
| 67       expect(data['feed'], contains('entry')); | 69         expect(data, contains('feed')); | 
| 68       expect(data, isMap); | 70         expect(data['feed'], contains('entry')); | 
| 69     })); | 71         expect(data, isMap); | 
|  | 72       }); | 
|  | 73       xhr.onReadyStateChange.listen((e) { | 
|  | 74         guardAsync(() { | 
|  | 75           if (xhr.readyState == HttpRequest.DONE) { | 
|  | 76             validate(json.parse(xhr.response)); | 
|  | 77           } | 
|  | 78         }); | 
|  | 79       }); | 
|  | 80       xhr.send(); | 
|  | 81     }); | 
|  | 82 | 
|  | 83     test('XHR.getWithCredentials Cross-domain', () { | 
|  | 84       var url = '$host/root_dart/tests/html/xhr_cross_origin_data.txt'; | 
|  | 85       return HttpRequest.request(url, withCredentials: true).then((xhr) { | 
|  | 86         var data = json.parse(xhr.response); | 
|  | 87         expect(data, contains('feed')); | 
|  | 88         expect(data['feed'], contains('entry')); | 
|  | 89         expect(data, isMap); | 
|  | 90       }); | 
|  | 91     }); | 
| 70   }); | 92   }); | 
| 71 } | 93 } | 
| OLD | NEW | 
|---|