Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(723)

Unified Diff: test/codegen/lib/html/xhr_test.dart

Issue 1930043002: Add all dart:html tests from the sdk to test/codegen. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/codegen/lib/html/xhr_test.dart
diff --git a/test/codegen/lib/html/xhr_test.dart b/test/codegen/lib/html/xhr_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..a1a4833888f140eb1e8d239f8b53036ff38f605c
--- /dev/null
+++ b/test/codegen/lib/html/xhr_test.dart
@@ -0,0 +1,259 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library XHRTest;
+import 'dart:async';
+import 'dart:convert';
+import 'dart:html';
+import 'dart:typed_data';
+import 'package:unittest/html_individual_config.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+ useHtmlIndividualConfiguration();
+ // Cache blocker is a workaround for:
+ // https://code.google.com/p/dart/issues/detail?id=11834
+ var cacheBlocker = new DateTime.now().millisecondsSinceEpoch;
+ var url = '/root_dart/tests/html/xhr_cross_origin_data.txt?'
+ 'cacheBlock=$cacheBlocker';
+
+ void validate200Response(xhr) {
+ expect(xhr.status, equals(200));
+ var data = JSON.decode(xhr.responseText);
+ expect(data, contains('feed'));
+ expect(data['feed'], contains('entry'));
+ expect(data, isMap);
+ }
+
+ void validate404(xhr) {
+ expect(xhr.status, equals(404));
+ // We cannot say much about xhr.responseText, most HTTP servers will
+ // include an HTML page explaining the error to a human.
+ String responseText = xhr.responseText;
+ expect(responseText, isNotNull);
+ }
+
+ group('supported_onProgress', () {
+ test('supported', () {
+ expect(HttpRequest.supportsProgressEvent, isTrue);
+ });
+ });
+
+ group('supported_onLoadEnd', () {
+ test('supported', () {
+ expect(HttpRequest.supportsLoadEndEvent, isTrue);
+ });
+ });
+
+ group('supported_overrideMimeType', () {
+ test('supported', () {
+ expect(HttpRequest.supportsOverrideMimeType, isTrue);
+ });
+ });
+
+ group('xhr', () {
+ test('XHR No file', () {
+ HttpRequest xhr = new HttpRequest();
+ xhr.open("GET", "NonExistingFile", async: true);
+ xhr.onReadyStateChange.listen(expectAsyncUntil((event) {
+ if (xhr.readyState == HttpRequest.DONE) {
+ validate404(xhr);
+ }
+ }, () => xhr.readyState == HttpRequest.DONE));
+ xhr.send();
+ });
+
+ test('XHR_file', () {
+ var loadEndCalled = false;
+
+ var xhr = new HttpRequest();
+ xhr.open('GET', url, async: true);
+ xhr.onReadyStateChange.listen(expectAsyncUntil((e) {
+ if (xhr.readyState == HttpRequest.DONE) {
+ validate200Response(xhr);
+
+ Timer.run(expectAsync(() {
+ expect(loadEndCalled, HttpRequest.supportsLoadEndEvent);
+ }));
+ }
+ }, () => xhr.readyState == HttpRequest.DONE));
+
+ xhr.onLoadEnd.listen((ProgressEvent e) {
+ loadEndCalled = true;
+ });
+ xhr.send();
+ });
+
+ test('XHR.request No file', () {
+ HttpRequest.request('NonExistingFile').then(
+ (_) { fail('Request should not have succeeded.'); },
+ onError: expectAsync((error) {
+ var xhr = error.target;
+ expect(xhr.readyState, equals(HttpRequest.DONE));
+ validate404(xhr);
+ }));
+ });
+
+ test('XHR.request file', () {
+ HttpRequest.request(url).then(expectAsync((xhr) {
+ expect(xhr.readyState, equals(HttpRequest.DONE));
+ validate200Response(xhr);
+ }));
+ });
+
+ test('XHR.request onProgress', () {
+ var progressCalled = false;
+ HttpRequest.request(url,
+ onProgress: (_) {
+ progressCalled = true;
+ }).then(expectAsync(
+ (xhr) {
+ expect(xhr.readyState, equals(HttpRequest.DONE));
+ expect(progressCalled, HttpRequest.supportsProgressEvent);
+ validate200Response(xhr);
+ }));
+ });
+
+ test('XHR.request withCredentials No file', () {
+ HttpRequest.request('NonExistingFile', withCredentials: true).then(
+ (_) { fail('Request should not have succeeded.'); },
+ onError: expectAsync((error) {
+ var xhr = error.target;
+ expect(xhr.readyState, equals(HttpRequest.DONE));
+ validate404(xhr);
+ }));
+ });
+
+ test('XHR.request withCredentials file', () {
+ HttpRequest.request(url, withCredentials: true).then(expectAsync((xhr) {
+ expect(xhr.readyState, equals(HttpRequest.DONE));
+ validate200Response(xhr);
+ }));
+ });
+
+ test('XHR.getString file', () {
+ HttpRequest.getString(url).then(expectAsync((str) {}));
+ });
+
+ test('XHR.getString No file', () {
+ HttpRequest.getString('NonExistingFile').then(
+ (_) { fail('Succeeded for non-existing file.'); },
+ onError: expectAsync((error) {
+ validate404(error.target);
+ }));
+ });
+
+ test('XHR.request responseType arraybuffer', () {
+ if (Platform.supportsTypedData) {
+ HttpRequest.request(url, responseType: 'arraybuffer',
+ requestHeaders: {'Content-Type': 'text/xml'}).then(
+ expectAsync((xhr) {
+ expect(xhr.status, equals(200));
+ var byteBuffer = xhr.response;
+ expect(byteBuffer, new isInstanceOf<ByteBuffer>());
+ expect(byteBuffer, isNotNull);
+ }));
+ }
+ });
+
+ test('overrideMimeType', () {
+ var expectation =
+ HttpRequest.supportsOverrideMimeType ? returnsNormally : throws;
+
+ expect(() {
+ HttpRequest.request(url, mimeType: 'application/binary');
+ }, expectation);
+ });
+
+ if (Platform.supportsTypedData) {
+ test('xhr upload', () {
+ var xhr = new HttpRequest();
+ var progressCalled = false;
+ xhr.upload.onProgress.listen((e) {
+ progressCalled = true;
+ });
+
+ xhr.open('POST',
+ '${window.location.protocol}//${window.location.host}/echo');
+
+ // 10MB of payload data w/ a bit of data to make sure it
+ // doesn't get compressed to nil.
+ var data = new Uint8List(1 * 1024 * 1024);
+ for (var i = 0; i < data.length; ++i) {
+ data[i] = i & 0xFF;
+ }
+ xhr.send(new Uint8List.view(data.buffer));
+
+ return xhr.onLoad.first.then((_) {
+ expect(progressCalled, isTrue, reason: 'onProgress should be fired');
+ });
+ });
+ }
+
+ test('xhr postFormData', () {
+ var data = { 'name': 'John', 'time': '2 pm' };
+
+ var parts = [];
+ for (var key in data.keys) {
+ parts.add('${Uri.encodeQueryComponent(key)}='
+ '${Uri.encodeQueryComponent(data[key])}');
+ }
+ var encodedData = parts.join('&');
+
+ return HttpRequest.postFormData(
+ '${window.location.protocol}//${window.location.host}/echo', data)
+ .then((xhr) {
+ expect(xhr.responseText, encodedData);
+ });
+ });
+ });
+
+ group('xhr_requestBlob', () {
+ test('XHR.request responseType blob', () {
+ if (Platform.supportsTypedData) {
+ return HttpRequest.request(url, responseType: 'blob').then(
+ (xhr) {
+ expect(xhr.status, equals(200));
+ var blob = xhr.response;
+ expect(blob is Blob, isTrue);
+ expect(blob, isNotNull);
+ });
+ }
+ });
+ });
+
+ group('json', () {
+ test('xhr responseType json', () {
+ var url = '${window.location.protocol}//${window.location.host}/echo';
+ var data = {
+ 'key': 'value',
+ 'a': 'b',
+ 'one': 2,
+ };
+
+ HttpRequest.request(url,
+ method: 'POST',
+ sendData: JSON.encode(data),
+ responseType: 'json').then(
+ expectAsync((xhr) {
+ expect(xhr.status, equals(200));
+ var json = xhr.response;
+ expect(json, equals(data));
+ }));
+ });
+ });
+
+ group('headers', () {
+ test('xhr responseHeaders', () {
+ return HttpRequest.request(url).then(
+ (xhr) {
+ var contentTypeHeader = xhr.responseHeaders['content-type'];
+ expect(contentTypeHeader, isNotNull);
+ // Should be like: 'text/plain; charset=utf-8'
+ expect(contentTypeHeader.contains('text/plain'), isTrue);
+ expect(contentTypeHeader.contains('charset=utf-8'), isTrue);
+ });
+ });
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698