mirror of
https://github.com/servo/servo.git
synced 2025-10-04 02:29:12 +01:00
Update web-platform-tests to revision 9817f7f027fe1e92cc2fce31d6002c4d669918e8
This commit is contained in:
parent
8e52f8a523
commit
f3533538ea
2144 changed files with 21364 additions and 11001 deletions
|
@ -0,0 +1,356 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>Tests for PaymentInstruments interface</title>
|
||||
<link rel="help" href="https://w3c.github.io/payment-handler/#paymentinstruments-interface">
|
||||
<link rel="manifest" href="basic-card.json">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="register-and-activate-service-worker.js"></script>
|
||||
<script>
|
||||
function runTests(registration) {
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set('instrument-key-1', {
|
||||
name: 'Instrument Name 1',
|
||||
});
|
||||
await registration.paymentManager.instruments.set('instrument-key-2', {
|
||||
name: 'Instrument Name 2',
|
||||
});
|
||||
await registration.paymentManager.instruments.delete('instrument-key-1');
|
||||
await registration.paymentManager.instruments.set('instrument-key-1', {
|
||||
name: 'Instrument Name 1',
|
||||
});
|
||||
const keys = await registration.paymentManager.instruments.keys();
|
||||
assert_array_equals(keys, ['instrument-key-2', 'instrument-key-1']);
|
||||
}, 'Instrument keys are returned in the original insertion order');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set(
|
||||
'existing-instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
},
|
||||
);
|
||||
const result = await registration.paymentManager.instruments.delete(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
assert_true(result);
|
||||
}, 'Deleting an existing instrument returns true');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set(
|
||||
'existing-instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
},
|
||||
);
|
||||
await registration.paymentManager.instruments.delete(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
const result = await registration.paymentManager.instruments.delete(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
assert_false(result);
|
||||
}, 'Deleting an existing instrument the second time returns false');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const result = await registration.paymentManager.instruments.delete(
|
||||
'non-existing-instrument-key',
|
||||
);
|
||||
assert_false(result);
|
||||
}, 'Deleting a non-existing instrument returns false');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set(
|
||||
'existing-instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
|
||||
},
|
||||
);
|
||||
const result = await registration.paymentManager.instruments.get(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
assert_equals(result.name, 'Instrument Name');
|
||||
}, 'Getting an existing instrument returns the instrument');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const result = await registration.paymentManager.instruments.get(
|
||||
'non-existing-instrument-key',
|
||||
);
|
||||
assert_equals(result, undefined);
|
||||
}, 'Getting a non-existing instrument returns undefined');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set(
|
||||
'existing-instrument-key',
|
||||
{
|
||||
name: 'Instrument Name v1',
|
||||
icons: [
|
||||
{src: '/images/green-16x16.png', sizes: '16x16', type: 'image/png'},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
|
||||
},
|
||||
);
|
||||
let result = await registration.paymentManager.instruments.get(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
assert_equals(result.name, 'Instrument Name v1');
|
||||
assert_equals(result.icons.length, 1);
|
||||
assert_equals(
|
||||
result.icons[0].src,
|
||||
new URL('/images/green-16x16.png', window.location.href).href,
|
||||
);
|
||||
assert_equals(result.icons[0].sizes, '16x16');
|
||||
assert_equals(result.icons[0].type, 'image/png');
|
||||
assert_array_equals(result.enabledMethods, ['basic-card']);
|
||||
assert_array_equals(result.capabilities.supportedNetworks, ['mir']);
|
||||
assert_array_equals(result.capabilities.supportedTypes, ['prepaid']);
|
||||
await registration.paymentManager.instruments.set(
|
||||
'existing-instrument-key',
|
||||
{
|
||||
name: 'Instrument Name v2',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
capabilities: {supportedNetworks: ['visa'], supportedTypes: ['credit']},
|
||||
},
|
||||
);
|
||||
result = await registration.paymentManager.instruments.get(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
assert_equals(result.name, 'Instrument Name v2');
|
||||
assert_equals(result.icons.length, 1);
|
||||
assert_equals(
|
||||
result.icons[0].src,
|
||||
new URL('/images/rgrg-256x256.png', window.location.href).href,
|
||||
);
|
||||
assert_equals(result.icons[0].sizes, '256x256');
|
||||
assert_equals(result.icons[0].type, 'image/png');
|
||||
assert_array_equals(result.enabledMethods, ['basic-card']);
|
||||
assert_array_equals(result.capabilities.supportedNetworks, ['visa']);
|
||||
assert_array_equals(result.capabilities.supportedTypes, ['credit']);
|
||||
}, 'Resetting an existing instrument updates the instrument');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set(
|
||||
'existing-instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
capabilities: {supportedNetworks: ['mir'], supportedTypes: ['prepaid']},
|
||||
},
|
||||
);
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const result = await registration.paymentManager.instruments.get(
|
||||
'existing-instrument-key',
|
||||
);
|
||||
assert_equals(result, undefined);
|
||||
}, 'Clearing the instruments');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const setPromise = registration.paymentManager.instruments.set(
|
||||
'instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/jif',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
},
|
||||
);
|
||||
return promise_rejects(t, new TypeError(), setPromise);
|
||||
}, 'Cannot register instruments with invalid icon media type image/jif');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const setPromise = registration.paymentManager.instruments.set(
|
||||
'instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/pn' + 'g'.repeat(1000),
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
},
|
||||
);
|
||||
return promise_rejects(t, new TypeError(), setPromise);
|
||||
}, "Don't crash when registering instruments with very long icon media type image/pngggggg...");
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
return registration.paymentManager.instruments.set('instrument-key', {
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '8'.repeat(100000) + 'x' + '8'.repeat(100000),
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
});
|
||||
}, "Don't crash when registering an instrument with a very long icon size 888...x888...");
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const setPromise = registration.paymentManager.instruments.set(
|
||||
'instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rgrg-256x256.png',
|
||||
sizes: '256 256',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
},
|
||||
);
|
||||
return promise_rejects(t, new TypeError(), setPromise);
|
||||
}, 'Cannot register instruments with invalid icon size "256 256" (missing "x")');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const setPromise = registration.paymentManager.instruments.set(
|
||||
'instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: '/images/rg\0rg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
},
|
||||
);
|
||||
return promise_rejects(t, new TypeError(), setPromise);
|
||||
}, 'Cannot register instruments with invalid icon URL (has a null character)');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const setPromise = registration.paymentManager.instruments.set(
|
||||
'instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src: 'http://test.example/images/rgrg-256x256.png',
|
||||
sizes: '256x256',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
},
|
||||
);
|
||||
return promise_rejects(t, new TypeError(), setPromise);
|
||||
}, 'Cannot register instruments with non-existing non-https icon URL');
|
||||
|
||||
promise_test(async t => {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
const setPromise = registration.paymentManager.instruments.set(
|
||||
'instrument-key',
|
||||
{
|
||||
name: 'Instrument Name',
|
||||
icons: [
|
||||
{
|
||||
src:
|
||||
'http://www.chromium.org/_/rsrc/1438879449147/config/customLogo.gif',
|
||||
sizes: '48x48',
|
||||
type: 'image/gif',
|
||||
},
|
||||
],
|
||||
enabledMethods: ['basic-card'],
|
||||
},
|
||||
);
|
||||
return promise_rejects(t, new TypeError(), setPromise);
|
||||
}, 'Cannot register instruments with an existing non-https icon URL');
|
||||
|
||||
async function testUnusualStrings(existingKey, nonExistingKey) {
|
||||
await registration.paymentManager.instruments.clear();
|
||||
await registration.paymentManager.instruments.set(existingKey, {
|
||||
name: existingKey,
|
||||
icons: [
|
||||
{src: '/images/rgrg-256x256.png', sizes: '256x256', type: 'image/png'},
|
||||
],
|
||||
enabledMethods: [existingKey],
|
||||
capabilities: {aCapabilityName: existingKey},
|
||||
});
|
||||
const hasExistingInstrument = await registration.paymentManager.instruments.has(
|
||||
existingKey,
|
||||
);
|
||||
assert_true(hasExistingInstrument);
|
||||
const hasNonExistingInstrument = await registration.paymentManager.instruments.has(
|
||||
nonExistingKey,
|
||||
);
|
||||
assert_false(hasNonExistingInstrument);
|
||||
const existingInstrument = await registration.paymentManager.instruments.get(
|
||||
existingKey,
|
||||
);
|
||||
assert_equals(existingInstrument.name, existingKey);
|
||||
const nonExistingInstrument = await registration.paymentManager.instruments.get(
|
||||
nonExistingKey,
|
||||
);
|
||||
assert_equals(nonExistingInstrument, undefined);
|
||||
const deletedExistingInstrument = await registration.paymentManager.instruments.delete(
|
||||
existingKey,
|
||||
);
|
||||
assert_true(deletedExistingInstrument);
|
||||
const deletedNonExistingInstrument = await registration.paymentManager.instruments.delete(
|
||||
nonExistingKey,
|
||||
);
|
||||
assert_false(deletedNonExistingInstrument);
|
||||
}
|
||||
|
||||
promise_test(async t => {
|
||||
const length = 100000;
|
||||
await testUnusualStrings('0'.repeat(length), '1'.repeat(length));
|
||||
}, "Don't crash on very long key, name, method, and capability strings.");
|
||||
|
||||
promise_test(async t => {
|
||||
await testUnusualStrings('foo\0bar', 'foo\0baz');
|
||||
}, "Don't crash on null characters in key, name, method, and capability strings.");
|
||||
}
|
||||
|
||||
registerAndActiveServiceWorker('basic-card.js', 'payment-app/', runTests);
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue