| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="/js-test-resources/ui-helper.js"></script> |
| <script src="/resources/js-test-pre.js"></script> |
| <script src="/resources/payment-request.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| description("Test basic creation of a PaymentRequest object with an Apple Pay payment method."); |
| |
| window.jsTestIsAsync = true; |
| |
| function validPaymentMethod() { |
| return { |
| supportedMethods: 'https://apple.com/apple-pay', |
| data: { |
| version: 2, |
| merchantIdentifier: '', |
| countryCode: 'US', |
| supportedNetworks: ['visa', 'masterCard'], |
| merchantCapabilities: ['supports3DS'], |
| }, |
| } |
| } |
| |
| function validPaymentDetails() { |
| return { |
| total: { label: 'Your label', amount: { currency: 'USD', value: '10.00' } }, |
| } |
| } |
| |
| function logAndShouldThrow(setup, test) { |
| return activateThen(() => { |
| debug("SETUP: " + setup); |
| eval(setup); |
| shouldThrow(test); |
| debug(""); |
| }); |
| } |
| |
| function logAndShouldReject(setup, test) { |
| return activateThen(() => { |
| debug("SETUP: " + setup) |
| eval(setup) |
| return shouldReject(test) |
| }); |
| } |
| |
| async function go() { |
| debug("Testing PaymentRequest") |
| debug("") |
| shouldThrow("new PaymentRequest(null, null)") |
| shouldNotThrow("new PaymentRequest([validPaymentMethod()], validPaymentDetails())") |
| debug("") |
| |
| debug("Testing ApplePayRequest.version") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.version = 0;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.version = 1000;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.countryCode") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); delete paymentMethod.data.countryCode;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.countryCode = 'invalid';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.countryCode = '';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.countryCode = null;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.countryCode = undefined;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.countryCode = 7;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.supportedNetworks") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); delete paymentMethod.data.supportedNetworks;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = '';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = null;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = undefined;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = 7;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = [];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = ['invalidNetwork'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.supportedNetworks = ['invalidNetwork', 'visa'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.merchantCapabilities") |
| debug(""); |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); delete paymentMethod.data.merchantCapabilities;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = '';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = null;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = undefined;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = 7;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = [];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = ['invalidCapability'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.merchantCapabilities = ['invalidCapability', 'supports3DS'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.requiredBillingContactFields") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = '';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = null;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = 7;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = { };", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = [''];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = [null];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = [undefined];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = [{}];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredBillingContactFields = ['invalid'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.billingContact") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.billingContact = '';", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.billingContact = 7;", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.requiredShippingContactFields") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = '';", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = null;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = 7;", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = { };", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [''];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [null];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [undefined];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = [{}];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.requiredShippingContactFields = ['invalid'];", "request = new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.shippingContact") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.shippingContact = '';", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.shippingContact = 7;", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing ApplePayRequest.applicationData") |
| debug("") |
| await logAndShouldReject("paymentMethod = validPaymentMethod(); paymentMethod.data.applicationData = { toString: function() { throw '\"Error in toString\"'; } };", "new PaymentRequest([paymentMethod], validPaymentDetails()); request.show()") |
| debug("") |
| |
| debug("Testing PaymentDetails.total") |
| debug("") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); delete paymentDetails.total;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = undefined;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = [];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label' };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: 'amount' };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: '', value: '0' } };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| debug("") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: 'USD', value:'-10.00'} };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: 'USD', value: '10000000000.00' } };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| debug("") |
| |
| debug("Testing PaymentDetails.displayItems") |
| debug(""); |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [''];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [null];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [undefined];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{}];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: '10.00', type: 'invalid' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: { currency: 'EUR', value: '10.00' } }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| |
| debug("Testing PaymentDetails.shippingOptions") |
| debug(""); |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = 'invalid';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '', identifier: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '', identifier: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '-1', detail: '', identifier: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: { currency: 'EUR', value: '10.00' }, id: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()") |
| |
| debug("Testing PaymentOptions") |
| debug(""); |
| await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = '';", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()") |
| await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = 'invalid';", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()") |
| await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = null;", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()") |
| await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = 7;", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()") |
| await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = { };", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()") |
| |
| document.querySelector("button").remove(); |
| |
| finishJSTest(); |
| } |
| |
| function clickElement(element) { |
| let x = element.offsetLeft + 2; |
| let y = element.offsetTop + 2; |
| |
| var supportsTouchEvents = "TouchEvent" in window; |
| if (supportsTouchEvents && window.testRunner && testRunner.runUIScript) { |
| testRunner.runUIScript(`(function() { uiController.singleTapAtPoint(${x}, ${y}, function() { }); })();`, function () { }); |
| } else if (window.eventSender) { |
| eventSender.mouseMoveTo(x, y); |
| eventSender.mouseDown(); |
| eventSender.mouseUp(); |
| } |
| } |
| |
| window.onload = function() { |
| clickElement(document.querySelector("button")); |
| } |
| |
| </script> |
| <button onclick='go()'>Go</button> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |