tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_getAdaptedProfiles_locales.js (9873B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 /*
      5 * Test to ensure locale specific placeholders for credit card fields are properly used
      6 * to transform various values in the profile.
      7 */
      8 
      9 "use strict";
     10 
     11 const DEFAULT_CREDITCARD_RECORD = {
     12  guid: "123",
     13  "cc-exp-month": 1,
     14  "cc-exp-year": 2025,
     15  "cc-exp": "2025-01",
     16 };
     17 
     18 const getCCExpYearFormatted = () => {
     19  return DEFAULT_CREDITCARD_RECORD["cc-exp-year"].toString().substring(2);
     20 };
     21 
     22 const getCCExpMonthFormatted = () => {
     23  return DEFAULT_CREDITCARD_RECORD["cc-exp-month"].toString().padStart(2, "0");
     24 };
     25 
     26 const DEFAULT_EXPECTED_CREDITCARD_RECORD_SEPARATE_EXPIRY_FIELDS = {
     27  ...DEFAULT_CREDITCARD_RECORD,
     28  "cc-exp-month-formatted": getCCExpMonthFormatted(),
     29  "cc-exp-year-formatted": getCCExpYearFormatted(),
     30 };
     31 
     32 const FR_TESTCASES = [
     33  {
     34    description: "Use placeholder to adjust cc-exp format [mm/aa].",
     35    document: `<form><input autocomplete="cc-number">
     36               <input placeholder="mm/aa" autocomplete="cc-exp"></form>`,
     37    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
     38    expectedResult: [
     39      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
     40        "cc-exp": "01/25",
     41      }),
     42    ],
     43  },
     44  {
     45    description: "Use placeholder to adjust cc-exp format [mm / aa].",
     46    document: `<form><input autocomplete="cc-number">
     47               <input placeholder="mm / aa" autocomplete="cc-exp"></form>`,
     48    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
     49    expectedResult: [
     50      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
     51        "cc-exp": "01/25",
     52      }),
     53    ],
     54  },
     55  {
     56    description: "Use placeholder to adjust cc-exp format [MM / AA].",
     57    document: `<form><input autocomplete="cc-number">
     58               <input placeholder="MM / AA" autocomplete="cc-exp"></form>`,
     59    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
     60    expectedResult: [
     61      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
     62        "cc-exp": "01/25",
     63      }),
     64    ],
     65  },
     66  {
     67    description: "Use placeholder to adjust cc-exp format [mm / aaaa].",
     68    document: `<form><input autocomplete="cc-number">
     69               <input placeholder="mm / aaaa" autocomplete="cc-exp"></form>`,
     70    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
     71    expectedResult: [
     72      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
     73        "cc-exp": "01/2025",
     74      }),
     75    ],
     76  },
     77  {
     78    description: "Use placeholder to adjust cc-exp format [mm - aaaa].",
     79    document: `<form><input autocomplete="cc-number">
     80               <input placeholder="mm - aaaa" autocomplete="cc-exp"></form>`,
     81    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
     82    expectedResult: [
     83      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
     84        "cc-exp": "01-2025",
     85      }),
     86    ],
     87  },
     88  {
     89    description: "Use placeholder to adjust cc-exp format [aaaa-mm].",
     90    document: `<form><input autocomplete="cc-number">
     91               <input placeholder="aaaa-mm" autocomplete="cc-exp"></form>`,
     92    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
     93    expectedResult: [
     94      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
     95        "cc-exp": "2025-01",
     96      }),
     97    ],
     98  },
     99  {
    100    description: "Use placeholder to adjust cc-exp-year field [aa].",
    101    document: `<form>
    102                <input autocomplete="cc-number">
    103                <input autocomplete="cc-exp-month">
    104                <input autocomplete="cc-exp-year" placeholder="AA">
    105               </form>`,
    106    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    107    expectedResult: [
    108      { ...DEFAULT_EXPECTED_CREDITCARD_RECORD_SEPARATE_EXPIRY_FIELDS },
    109    ],
    110  },
    111 ];
    112 
    113 const DE_TESTCASES = [
    114  {
    115    description: "Use placeholder to adjust cc-exp format [mm / jj].",
    116    document: `<form><input autocomplete="cc-number">
    117               <input placeholder="mm / jj" autocomplete="cc-exp"></form>`,
    118    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    119    expectedResult: [
    120      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    121        "cc-exp": "01/25",
    122      }),
    123    ],
    124  },
    125  {
    126    description: "Use placeholder to adjust cc-exp format [MM / JJ].",
    127    document: `<form><input autocomplete="cc-number">
    128               <input placeholder="MM / JJ" autocomplete="cc-exp"></form>`,
    129    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    130    expectedResult: [
    131      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    132        "cc-exp": "01/25",
    133      }),
    134    ],
    135  },
    136  {
    137    description: "Use placeholder to adjust cc-exp format [mm / jjjj].",
    138    document: `<form><input autocomplete="cc-number">
    139                 <input placeholder="mm / jjjj" autocomplete="cc-exp"></form>`,
    140    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    141    expectedResult: [
    142      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    143        "cc-exp": "01/2025",
    144      }),
    145    ],
    146  },
    147  {
    148    description: "Use placeholder to adjust cc-exp format [MM / JJJJ].",
    149    document: `<form><input autocomplete="cc-number">
    150                 <input placeholder="MM / JJJJ" autocomplete="cc-exp"></form>`,
    151    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    152    expectedResult: [
    153      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    154        "cc-exp": "01/2025",
    155      }),
    156    ],
    157  },
    158  {
    159    description: "Use placeholder to adjust cc-exp format [mm - jj].",
    160    document: `<form><input autocomplete="cc-number">
    161               <input placeholder="mm - jj" autocomplete="cc-exp"></form>`,
    162    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    163    expectedResult: [
    164      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    165        "cc-exp": "01-25",
    166      }),
    167    ],
    168  },
    169  {
    170    description: "Use placeholder to adjust cc-exp format [MM - JJ].",
    171    document: `<form><input autocomplete="cc-number">
    172               <input placeholder="MM - JJ" autocomplete="cc-exp"></form>`,
    173    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    174    expectedResult: [
    175      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    176        "cc-exp": "01-25",
    177      }),
    178    ],
    179  },
    180  {
    181    description: "Use placeholder to adjust cc-exp format [mm - jjjj].",
    182    document: `<form><input autocomplete="cc-number">
    183                 <input placeholder="mm - jjjj" autocomplete="cc-exp"></form>`,
    184    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    185    expectedResult: [
    186      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    187        "cc-exp": "01-2025",
    188      }),
    189    ],
    190  },
    191  {
    192    description: "Use placeholder to adjust cc-exp format [MM - JJJJ].",
    193    document: `<form><input autocomplete="cc-number">
    194                 <input placeholder="MM - JJJJ" autocomplete="cc-exp"></form>`,
    195    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    196    expectedResult: [
    197      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    198        "cc-exp": "01-2025",
    199      }),
    200    ],
    201  },
    202  {
    203    description: "Use placeholder to adjust cc-exp format [jjjj - mm].",
    204    document: `<form><input autocomplete="cc-number">
    205                 <input placeholder="jjjj - mm" autocomplete="cc-exp"></form>`,
    206    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    207    expectedResult: [
    208      Object.assign({}, DEFAULT_CREDITCARD_RECORD, {
    209        "cc-exp": "2025-01",
    210      }),
    211    ],
    212  },
    213  {
    214    description: "Use placeholder to adjust cc-exp-year field [jj].",
    215    document: `<form>
    216                <input autocomplete="cc-number">
    217                <input autocomplete="cc-exp-month">
    218                <input autocomplete="cc-exp-year" placeholder="JJ">
    219               </form>`,
    220    profileData: [Object.assign({}, DEFAULT_CREDITCARD_RECORD)],
    221    expectedResult: [
    222      { ...DEFAULT_EXPECTED_CREDITCARD_RECORD_SEPARATE_EXPIRY_FIELDS },
    223    ],
    224  },
    225 ];
    226 
    227 var FormAutofillHandler;
    228 var FormAutofillHeuristics;
    229 add_task(async function () {
    230  ({ FormAutofillHandler } = ChromeUtils.importESModule(
    231    "resource://gre/modules/shared/FormAutofillHandler.sys.mjs"
    232  ));
    233  ({ FormAutofillHeuristics } = ChromeUtils.importESModule(
    234    "resource://gre/modules/shared/FormAutofillHeuristics.sys.mjs"
    235  ));
    236 });
    237 
    238 const TESTCASES = [FR_TESTCASES, DE_TESTCASES];
    239 
    240 for (let localeTests of TESTCASES) {
    241  for (let testcase of localeTests) {
    242    add_task(async function () {
    243      info("Starting testcase: " + testcase.description);
    244 
    245      let doc = MockDocument.createTestDocument(
    246        "http://localhost:8080/test/",
    247        testcase.document
    248      );
    249      let form = doc.querySelector("form");
    250      let formLike = FormLikeFactory.createFromForm(form);
    251      let handler = new FormAutofillHandler(formLike);
    252 
    253      const fieldDetails = FormAutofillHandler.collectFormFieldDetails(
    254        handler.form
    255      );
    256      FormAutofillHeuristics.parseAndUpdateFieldNamesParent(fieldDetails);
    257      handler.setIdentifiedFieldDetails(fieldDetails);
    258 
    259      handler.focusedInput = form.elements[0];
    260      let adaptedRecords = handler.getAdaptedProfiles(testcase.profileData);
    261      adaptedRecords.forEach(record => delete record._original);
    262      Assert.deepEqual(adaptedRecords, testcase.expectedResult);
    263 
    264      if (testcase.expectedOptionElements) {
    265        testcase.expectedOptionElements.forEach((expectedOptionElement, i) => {
    266          for (let field in expectedOptionElement) {
    267            let select = form.querySelector(`[autocomplete=${field}]`);
    268            let expectedOption = doc.getElementById(
    269              expectedOptionElement[field]
    270            );
    271            Assert.notEqual(expectedOption, null);
    272 
    273            let value = testcase.profileData[i][field];
    274            let cache = handler._cacheValue.matchingSelectOption.get(select);
    275            let targetOption = cache[value] && cache[value].deref();
    276            Assert.notEqual(targetOption, null);
    277 
    278            Assert.equal(targetOption, expectedOption);
    279          }
    280        });
    281      }
    282    });
    283  }
    284 }