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

Unified Diff: LayoutTests/http/tests/push_messaging/resources/pushmessagedata-worker.js

Issue 1311853002: Update PushEvent and PushMessageData to match the spec. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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: LayoutTests/http/tests/push_messaging/resources/pushmessagedata-worker.js
diff --git a/LayoutTests/http/tests/push_messaging/resources/pushmessagedata-worker.js b/LayoutTests/http/tests/push_messaging/resources/pushmessagedata-worker.js
new file mode 100644
index 0000000000000000000000000000000000000000..de9be938189b98d655fbea026b0ccf8080e18abc
--- /dev/null
+++ b/LayoutTests/http/tests/push_messaging/resources/pushmessagedata-worker.js
@@ -0,0 +1,127 @@
+importScripts('../../serviceworker/resources/worker-testharness.js');
+importScripts('/resources/testharness-helpers.js');
+
+function createPushMessageData(data)
+{
+ // The PushMessageData object does not expose a constructor, but we can get an object
+ // initialized with our data by constructing a PushEvent.
+ return new PushEvent('PushEvent', { data: data }).data;
+}
+
+test(function() {
+ const textContents = 'Hello, world!';
+
+ var runTest = pushEvent => {
+ assert_not_equals(pushEvent.data, null);
+ assert_equals(pushEvent.data.text(), textContents);
+ };
+
+ // JavaScript strings are UTF-16, whereas binary data for push message data will be
+ // encoded as UTF-8. Convert accordingly.
+ var bufferView = new TextEncoder('utf-8').encode(textContents);
+
+ runTest(new PushEvent('PushEvent', { data: bufferView }));
+ runTest(new PushEvent('PushEvent', { data: bufferView.buffer }));
+ runTest(new PushEvent('PushEvent', { data: textContents }));
+
+}, 'PushEvent can be initialized from ArrayBuffer, ArrayBufferView and USVStrings.');
+
+test(function() {
+ var pushMessageData = createPushMessageData();
+
+ assert_equals(pushMessageData.arrayBuffer().byteLength, 0);
+
+ assert_equals(pushMessageData.blob().size, 0);
+ assert_equals(pushMessageData.blob().type, '');
+
+ // PushMessageData.json() is specified to be identical to JSON.parse() with
+ // the message's data as the argument. JSON.parse('') throws an exception,
+ // so verify that calling json() without a body throws the same exception.
+ try {
+ pushMessageData.json();
+ assert_unreached('Expected an exception to be thrown.');
+ } catch (eventDataException) {
+ try {
+ JSON.parse('');
+ assert_unreached('Expected an exception to be thrown.');
+ } catch (jsonParseException) {
+ assert_equals(eventDataException.name, jsonParseException.name);
+ assert_equals(eventDataException.message, jsonParseException.message);
+ }
+ }
+
+ assert_equals(pushMessageData.text().length, 0);
+
+}, 'PushMessageData is empty by default.');
+
+test(function() {
+ const binaryContents = [1, 2, 3];
+ const textContents = 'FOOBAR';
+
+ var pushMessageDataBinary = createPushMessageData(new Uint8Array(binaryContents)),
+ pushMessageDataString = createPushMessageData(textContents);
+
+ var binaryBuffer = pushMessageDataBinary.arrayBuffer(),
+ binaryBufferView = new Uint8Array(binaryBuffer);
+
+ assert_equals(binaryBuffer.byteLength, binaryContents.length);
+ assert_array_equals(binaryBufferView, binaryContents);
+
+ var stringBuffer = pushMessageDataString.arrayBuffer(),
+ stringBufferView = new Int8Array(stringBuffer);
+
+ assert_equals(stringBufferView.length, textContents.length);
+ assert_equals(stringBufferView[0], 70 /* F */);
+ assert_equals(stringBufferView[3], 66 /* B */);
+
+}, 'PushMessageData handling of ArrayBuffer content.');
+
+async_test(function(test) {
+ const textContents = 'Hello, world!';
+
+ var pushMessageData = createPushMessageData(textContents);
+
+ var blob = pushMessageData.blob(),
+ reader = new FileReader();
+
+ assert_equals(blob.size, textContents.length);
+ assert_equals(blob.type, '');
+
+ reader.addEventListener('load', () => {
+ assert_equals(reader.result, textContents);
+ test.done();
+ });
+
+ reader.readAsText(blob);
+
+}, 'PushMessageData handling of Blob content.')
+
+test(function() {
+ var pushMessageDataArray = createPushMessageData('[5, 6, 7]'),
+ pushMessageDataObject = createPushMessageData('{ "foo": { "bar": 42 } }'),
+ pushMessageDataString = createPushMessageData('"foobar"');
+
+ var array = pushMessageDataArray.json();
+ assert_equals(array.length, 3);
+ assert_equals(array[1], 6);
+
+ var object = pushMessageDataObject.json();
+ assert_equals(object.foo.bar, 42);
+
+ var string = pushMessageDataString.json();
+ assert_equals(string, 'foobar');
+
+}, 'PushMessageData handling of valid JSON content.');
+
+test(function() {
+ // Note that we do not care about the exception code - it's pass through.
+ assert_throws(null, () => createPushMessageData('\\o/').json());
+
+}, 'PushMessageData handling of invalid JSON content.');
+
+test(function() {
+ assert_throws(null, () => new PushMessageData());
+ assert_throws(null, () => new PushMessageData('Hello, world!'));
+ assert_throws(null, () => new PushMessageData(new ArrayBuffer(8)));
+
+}, 'PushMessageData should not be constructable.');

Powered by Google App Engine
This is Rietveld 408576698