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

Unified Diff: third_party/WebKit/LayoutTests/nfc/push.html

Issue 2885813002: [webnfc] Align nfc.push operation with the specification (Closed)
Patch Set: Rebased to master Created 3 years, 7 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/nfc/NFC.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/nfc/push.html
diff --git a/third_party/WebKit/LayoutTests/nfc/push.html b/third_party/WebKit/LayoutTests/nfc/push.html
index 00bc82c1a317f809effb25068a9521dfb3950359..c55d9f60f5d0256364fb00cde2a86762d771c44c 100644
--- a/third_party/WebKit/LayoutTests/nfc/push.html
+++ b/third_party/WebKit/LayoutTests/nfc/push.html
@@ -7,7 +7,7 @@
'use strict';
-const invalid_messages =
+const invalid_type_messages =
[
// Invalid NFCPushMessage type
undefined,
@@ -20,10 +20,6 @@ const invalid_messages =
// NFCRecord must have data.
createMessage([createTextRecord()]),
- // NFCRecord.mediaType for 'text' record must be 'text/*'.
- createMessage([createRecord('text', 'application/json',
- test_number_data)]),
-
// NFCRecord.data for 'text' record must be number or string.
createMessage([createTextRecord(test_buffer_data)]),
createMessage([createTextRecord(test_json_data)]),
@@ -37,9 +33,6 @@ const invalid_messages =
createMessage([createJsonRecord(test_number_data)]),
createMessage([createJsonRecord(test_text_data)]),
- // NFCRecord.mediaType for 'json' record must be 'application/json'.
- createMessage([createRecord('json', 'image/png', test_json_data)]),
-
// https://w3c.github.io/web-nfc/#dfn-map-a-url-to-ndef
// NFCRecord must have data.
createMessage([createUrlRecord()]),
@@ -58,9 +51,25 @@ const invalid_messages =
createMessage([createOpaqueRecord(test_json_data)])
];
+const invalid_syntax_messages =
+ [
+ // NFCRecord.mediaType for 'text' record must be 'text/*'.
+ createMessage([createRecord('text', 'application/json',
+ test_number_data)]),
+
+ // Data for 'url' record, must be a valid URL.
+ createMessage([createUrlRecord('Invalid URL:// Data')]),
+
+ // NFCRecord.mediaType for 'json' record must be 'application/json' or
+ // starts with 'application/' and ends with '+json'.
+ createMessage([createRecord('json', 'image/png', test_json_data)]),
+ createMessage([createRecord('json', 'application/x+y', test_json_data)]),
+ createMessage([createRecord('json', 'custom/app+json', test_json_data)]),
+ ];
+
nfc_test(nfc => {
let promises = [];
- invalid_messages.forEach(message => {
+ invalid_type_messages.forEach(message => {
promises.push(
assertRejectsWithError(navigator.nfc.push(message), 'TypeError'));
});
@@ -68,16 +77,26 @@ nfc_test(nfc => {
}, 'Test that promise is rejected with TypeError if NFCMessage is invalid.');
nfc_test(nfc => {
+ let promises = [];
+ invalid_syntax_messages.forEach(message => {
+ promises.push(
+ assertRejectsWithError(navigator.nfc.push(message), 'SyntaxError'));
+ });
+ return Promise.all(promises)
+}, 'Test that promise is rejected with SyntaxError if NFCMessage contains' +
+ ' invalid records.');
+
+nfc_test(nfc => {
nfc.mockNFC.setHWStatus(NFCHWStatus.DISABLED);
return assertRejectsWithError(navigator.nfc.push(test_text_data),
'NotSupportedError');
-}, 'nfc.push should fail when NFC HW is disabled.')
+}, 'nfc.push should fail when NFC HW is disabled.');
nfc_test(nfc => {
nfc.mockNFC.setHWStatus(NFCHWStatus.NOT_SUPPORTED);
return assertRejectsWithError(navigator.nfc.push(test_text_data),
'NotSupportedError');
-}, 'nfc.push should fail when NFC HW is not supported.')
+}, 'nfc.push should fail when NFC HW is not supported.');
nfc_test(nfc => {
return navigator.nfc.push(test_text_data, { timeout: 1 });
@@ -99,7 +118,7 @@ nfc_test(nfc => {
navigator.nfc.push(test_text_data,{ timeout: 1 }),
'TimeoutError');
}, 'nfc.push should fail with TimeoutError when push operation is not' +
- ' completed before specified timeout value.')
+ ' completed before specified timeout value.');
nfc_test(nfc => {
let message = createMessage([createTextRecord(test_text_data),
@@ -127,6 +146,10 @@ nfc_test(nfc => {
}, 'nfc.push ArrayBuffer with default NFCPushOptions.');
nfc_test(nfc => {
+ return navigator.nfc.push(createMessage([createRecord('empty')]));
+}, 'nfc.push with "empty" record should succeed.');
+
+nfc_test(nfc => {
return navigator.nfc.push(test_text_data).then(() => {
nfc.assertNFCPushOptionsEqual(createNFCPushOptions('any', Infinity, true),
nfc.mockNFC.pushOptions());
@@ -150,7 +173,7 @@ nfc_test(nfc => {
let promise = navigator.nfc.push(test_text_data, { timeout: 100 });
navigator.nfc.cancelPush();
return assertRejectsWithError(promise, 'AbortError');
-}, 'nfc.cancelPush should reject pending promise with AbortError.')
+}, 'nfc.cancelPush should reject pending promise with AbortError.');
nfc_test(nfc => {
return assertRejectsWithError(
@@ -158,4 +181,21 @@ nfc_test(nfc => {
'NotSupportedError');
}, 'Reject promise with NotSupportedError if NFC message size exceeds 32KB.');
+nfc_test(nfc => {
+ let message = createMessage([createTextRecord(test_text_data)]);
+ message.url = '%00/invalid/ path';
+ return assertRejectsWithError(
+ navigator.nfc.push(message),
+ 'SyntaxError');
+}, 'Reject promise with SyntaxError if WebNFC Id cannot be created from' +
+ ' provided URL.');
+
+nfc_test(nfc => {
+ let message = createMessage([createRecord('json','application/json',
+ { get x(){ return this; } })]);
+ return assertRejectsWithError(
+ navigator.nfc.push(message),
+ 'SyntaxError');
+}, 'Reject promise with SyntaxError if "json" record cannot be serialized.');
+
</script>
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/nfc/NFC.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698