tor-browser

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

test_addressDataLoader.js (4234B)


      1 "use strict";
      2 
      3 const SUPPORT_COUNTRIES_TESTCASES = [
      4  {
      5    country: "US",
      6    properties: ["languages", "alternative_names", "sub_keys", "sub_names"],
      7  },
      8  {
      9    country: "CA",
     10    properties: ["languages", "name", "sub_keys", "sub_names"],
     11  },
     12  {
     13    country: "DE",
     14    properties: ["name"],
     15  },
     16 ];
     17 
     18 var AddressMetaDataLoader, FormAutofillUtils;
     19 add_setup(async () => {
     20  ({ FormAutofillUtils } = ChromeUtils.importESModule(
     21    "resource://gre/modules/shared/FormAutofillUtils.sys.mjs"
     22  ));
     23  ({ AddressMetaDataLoader } = ChromeUtils.importESModule(
     24    "resource://gre/modules/shared/AddressMetaDataLoader.sys.mjs"
     25  ));
     26 });
     27 
     28 add_task(async function test_initalState() {
     29  // addressData should be empty
     30  Assert.deepEqual(AddressMetaDataLoader.addressData, {});
     31  // Verify dataLoaded state
     32  Assert.equal(AddressMetaDataLoader.dataLoaded.country, false);
     33  Assert.equal(AddressMetaDataLoader.dataLoaded.level1.size, 0);
     34 });
     35 
     36 add_task(async function test_loadDataCountry() {
     37  sinon.spy(AddressMetaDataLoader, "loadAddressMetaData");
     38  let metadata = FormAutofillUtils.getCountryAddressData("US");
     39  Assert.ok(AddressMetaDataLoader.addressData, "addressData exists");
     40  // Verify _dataLoaded state
     41  Assert.equal(AddressMetaDataLoader.dataLoaded.country, true);
     42  Assert.equal(AddressMetaDataLoader.dataLoaded.level1.size, 0);
     43  // _loadAddressMetaData should be called
     44  sinon.assert.called(AddressMetaDataLoader.loadAddressMetaData);
     45  // Verify metadata
     46  Assert.equal(metadata.id, "data/US");
     47  Assert.ok(
     48    metadata.alternative_names,
     49    "US alternative names should be loaded from extension"
     50  );
     51  AddressMetaDataLoader.loadAddressMetaData.resetHistory();
     52 
     53  // Load data without country
     54  let newMetadata = FormAutofillUtils.getCountryAddressData();
     55  // _loadAddressMetaData should not be called
     56  sinon.assert.notCalled(AddressMetaDataLoader.loadAddressMetaData);
     57  Assert.deepEqual(
     58    metadata,
     59    newMetadata,
     60    "metadata should be US if country is not specified"
     61  );
     62  AddressMetaDataLoader.loadAddressMetaData.resetHistory();
     63 });
     64 
     65 // This test is currently Disable!
     66 // This is because - Loading a non-existent resource could potentially cause a crash
     67 // (See Bug 1859588). To address this issue, We can check for the file's existence
     68 // before attempting to load the script. However, given that we are not using
     69 // state data, just keep the solution simple by disabling the test.
     70 add_task(async function test_loadDataState() {
     71  sinon.spy(AddressMetaDataLoader, "loadAddressMetaData");
     72  // Load level 1 data that does not exist
     73  let undefinedMetadata = FormAutofillUtils.getCountryAddressData("US", "CA");
     74  // loadAddressMetaData should be called
     75  sinon.assert.called(AddressMetaDataLoader.loadAddressMetaData);
     76  Assert.equal(undefinedMetadata, undefined, "metadata should be undefined");
     77  Assert.ok(
     78    AddressMetaDataLoader.dataLoaded.level1.has("US"),
     79    "level 1 state array should be set even there's no valid metadata"
     80  );
     81  AddressMetaDataLoader.loadAddressMetaData.resetHistory();
     82 
     83  // Load level 1 data again
     84  undefinedMetadata = FormAutofillUtils.getCountryAddressData("US", "AS");
     85  Assert.equal(undefinedMetadata, undefined, "metadata should be undefined");
     86  // loadAddressMetaData should not be called
     87  sinon.assert.notCalled(AddressMetaDataLoader.loadAddressMetaData);
     88 }).skip();
     89 
     90 SUPPORT_COUNTRIES_TESTCASES.forEach(testcase => {
     91  add_task(async function test_support_country() {
     92    info("Starting testcase: Check " + testcase.country + " metadata");
     93    let metadata = FormAutofillUtils.getCountryAddressData(testcase.country);
     94    Assert.ok(
     95      testcase.properties.every(key => metadata[key]),
     96      "These properties should exist: " + testcase.properties
     97    );
     98    // Verify the multi-locale country
     99    if (metadata.languages && metadata.languages.length > 1) {
    100      let locales = FormAutofillUtils.getCountryAddressDataWithLocales(
    101        testcase.country
    102      );
    103      Assert.equal(
    104        metadata.languages.length,
    105        locales.length,
    106        "Total supported locales should be matched"
    107      );
    108      metadata.languages.forEach((lang, index) => {
    109        Assert.equal(lang, locales[index].lang, `Should support ${lang}`);
    110      });
    111    }
    112  });
    113 });