tor-browser

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

test_unitConversion.js (20298B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 /**
      8 * Unit test for unit conversion module.
      9 */
     10 
     11 ChromeUtils.defineESModuleGetters(this, {
     12  UrlbarProviderUnitConversion:
     13    "moz-src:///browser/components/urlbar/UrlbarProviderUnitConversion.sys.mjs",
     14 });
     15 
     16 const TEST_DATA = [
     17  {
     18    category: "angle",
     19    cases: [
     20      { queryString: "1 d to d", expected: "1 deg" },
     21      { queryString: "-1 d to d", expected: "-1 deg" },
     22      { queryString: "1 d in d", expected: "1 deg" },
     23      { queryString: "1 d = d", expected: "1 deg" },
     24      { queryString: "1 D=D", expected: "1 deg" },
     25      { queryString: "1 d to degree", expected: "1 deg" },
     26      { queryString: "2 d to degree", expected: "2 deg" },
     27      {
     28        queryString: "1 d to radian",
     29        expected: "0.01745329252 radian",
     30      },
     31      {
     32        queryString: "2 d to radian",
     33        expected: "0.03490658504 radian",
     34      },
     35      {
     36        queryString: "1 d to rad",
     37        expected: "0.01745329252 radian",
     38      },
     39      { queryString: "1 d to r", expected: "0.01745329252 radian" },
     40      { queryString: "1 d to gradian", expected: "1.1111111111 gradian" },
     41      { queryString: "1 d to g", expected: "1.1111111111 gradian" },
     42      { queryString: "1 d to minute", expected: "60 min" },
     43      { queryString: "1 d to min", expected: "60 min" },
     44      { queryString: "1 d to m", expected: "60 min" },
     45      { queryString: "1 d to second", expected: "3,600 sec" },
     46      { queryString: "1 d to sec", expected: "3,600 sec" },
     47      { queryString: "1 d to s", expected: "3,600 sec" },
     48      { queryString: "1 d to sign", expected: "0.03333333333 sign" },
     49      { queryString: "1 d to mil", expected: "17.7777777778 mil" },
     50      {
     51        queryString: "1 d to revolution",
     52        expected: "0.002777777778 revolution",
     53      },
     54      { queryString: "1 d to circle", expected: "0.002777777778 circle" },
     55      { queryString: "1 d to turn", expected: "0.002777777778 turn" },
     56      {
     57        queryString: "1 d to quadrant",
     58        expected: "0.01111111111 quadrant",
     59      },
     60      {
     61        queryString: "1 d to rightangle",
     62        expected: "0.01111111111 rightangle",
     63      },
     64      { queryString: "1 d to sextant", expected: "0.01666666667 sextant" },
     65      { queryString: "1 degree to d", expected: "1 deg" },
     66      {
     67        queryString: "1 radian to d",
     68        expected: "57.2957795131 deg",
     69      },
     70      {
     71        queryString: "1 r to g",
     72        expected: "63.6619772368 gradian",
     73      },
     74    ],
     75  },
     76  {
     77    category: "force",
     78    cases: [
     79      { queryString: "1 n to n", expected: "1 newton" },
     80      { queryString: "-1 n to n", expected: "-1 newton" },
     81      { queryString: "1 n in n", expected: "1 newton" },
     82      { queryString: "1 n = n", expected: "1 newton" },
     83      { queryString: "1 N=N", expected: "1 newton" },
     84      { queryString: "1 n to newton", expected: "1 newton" },
     85      { queryString: "1 n to kilonewton", expected: "0.001 kilonewton" },
     86      { queryString: "1 n to kn", expected: "0.001 kilonewton" },
     87      {
     88        queryString: "1 n to gram-force",
     89        expected: "101.9716213 gram-force",
     90      },
     91      {
     92        queryString: "1 n to gf",
     93        expected: "101.9716213 gram-force",
     94      },
     95      {
     96        queryString: "1 n to kilogram-force",
     97        expected: "0.1019716213 kilogram-force",
     98      },
     99      {
    100        queryString: "1 n to kgf",
    101        expected: "0.1019716213 kilogram-force",
    102      },
    103      {
    104        queryString: "1 n to ton-force",
    105        expected: "0.0001019716213 ton-force",
    106      },
    107      {
    108        queryString: "1 n to tf",
    109        expected: "0.0001019716213 ton-force",
    110      },
    111      {
    112        queryString: "1 n to exanewton",
    113        expected: "1.0e-18 exanewton",
    114      },
    115      { queryString: "1 n to en", expected: "1.0e-18 exanewton" },
    116      {
    117        queryString: "1 n to petanewton",
    118        expected: "1.0e-15 petanewton",
    119      },
    120      { queryString: "1 n to PN", expected: "1.0e-15 petanewton" },
    121      { queryString: "1 n to Pn", expected: "1.0e-15 petanewton" },
    122      {
    123        queryString: "1 n to teranewton",
    124        expected: "1.0e-12 teranewton",
    125      },
    126      { queryString: "1 n to tn", expected: "1.0e-12 teranewton" },
    127      {
    128        queryString: "1 n to giganewton",
    129        expected: "1.0e-9 giganewton",
    130      },
    131      { queryString: "1 n to gn", expected: "1.0e-9 giganewton" },
    132      {
    133        queryString: "1 n to meganewton",
    134        expected: "1.0e-6 meganewton",
    135      },
    136      { queryString: "1 n to MN", expected: "1.0e-6 meganewton" },
    137      { queryString: "1 n to Mn", expected: "1.0e-6 meganewton" },
    138      { queryString: "1 n to hectonewton", expected: "0.01 hectonewton" },
    139      { queryString: "1 n to hn", expected: "0.01 hectonewton" },
    140      { queryString: "1 n to dekanewton", expected: "0.1 dekanewton" },
    141      { queryString: "1 n to dan", expected: "0.1 dekanewton" },
    142      { queryString: "1 n to decinewton", expected: "10 decinewton" },
    143      { queryString: "1 n to dn", expected: "10 decinewton" },
    144      { queryString: "1 n to centinewton", expected: "100 centinewton" },
    145      { queryString: "1 n to cn", expected: "100 centinewton" },
    146      { queryString: "1 n to millinewton", expected: "1,000 millinewton" },
    147      { queryString: "1 n to mn", expected: "1,000 millinewton" },
    148      { queryString: "1 n to micronewton", expected: "1,000,000 micronewton" },
    149      { queryString: "1 n to µn", expected: "1,000,000 micronewton" },
    150      {
    151        queryString: "1 n to nanonewton",
    152        expected: "1,000,000,000 nanonewton",
    153      },
    154      {
    155        queryString: "1 n to nn",
    156        expected: "1,000,000,000 nanonewton",
    157      },
    158      {
    159        queryString: "1 n to piconewton",
    160        expected: "1.0e12 piconewton",
    161      },
    162      {
    163        queryString: "1 n to pn",
    164        expected: "1.0e12 piconewton",
    165      },
    166      {
    167        queryString: "1 n to femtonewton",
    168        expected: "1.0e15 femtonewton",
    169      },
    170      {
    171        queryString: "1 n to fn",
    172        expected: "1.0e15 femtonewton",
    173      },
    174      {
    175        queryString: "1 n to attonewton",
    176        expected: "1.0e18 attonewton",
    177      },
    178      {
    179        queryString: "1 n to an",
    180        expected: "1.0e18 attonewton",
    181      },
    182      { queryString: "1 n to dyne", expected: "100,000 dyne" },
    183      { queryString: "1 n to dyn", expected: "100,000 dyne" },
    184      { queryString: "1 n to joule/meter", expected: "1 joule/meter" },
    185      { queryString: "1 n to j/m", expected: "1 joule/meter" },
    186      {
    187        queryString: "1 n to joule/centimeter",
    188        expected: "100 joule/centimeter",
    189      },
    190      { queryString: "1 n to j/cm", expected: "100 joule/centimeter" },
    191      {
    192        queryString: "1 n to ton-force-short",
    193        expected: "0.0001124045 ton-force-short",
    194      },
    195      {
    196        queryString: "1 n to short",
    197        expected: "0.0001124045 ton-force-short",
    198      },
    199      {
    200        queryString: "1 n to ton-force-long",
    201        expected: "0.0001003611 ton-force-long",
    202      },
    203      {
    204        queryString: "1 n to tonf",
    205        expected: "0.0001003611 ton-force-long",
    206      },
    207      {
    208        queryString: "1 n to kip-force",
    209        expected: "0.0002248089 kip-force",
    210      },
    211      {
    212        queryString: "1 n to kipf",
    213        expected: "0.0002248089 kip-force",
    214      },
    215      {
    216        queryString: "1 n to pound-force",
    217        expected: "0.2248089431 pound-force",
    218      },
    219      {
    220        queryString: "1 n to lbf",
    221        expected: "0.2248089431 pound-force",
    222      },
    223      {
    224        queryString: "1 n to ounce-force",
    225        expected: "3.5969430896 ounce-force",
    226      },
    227      {
    228        queryString: "1 n to ozf",
    229        expected: "3.5969430896 ounce-force",
    230      },
    231      {
    232        queryString: "1 n to poundal",
    233        expected: "7.2330138512 poundal",
    234      },
    235      {
    236        queryString: "1 n to pdl",
    237        expected: "7.2330138512 poundal",
    238      },
    239      { queryString: "1 n to pond", expected: "101.9716213 pond" },
    240      { queryString: "1 n to p", expected: "101.9716213 pond" },
    241      {
    242        queryString: "1 n to kilopond",
    243        expected: "0.1019716213 kilopond",
    244      },
    245      {
    246        queryString: "1 n to kp",
    247        expected: "0.1019716213 kilopond",
    248      },
    249      { queryString: "1 kilonewton to n", expected: "1,000 newton" },
    250    ],
    251  },
    252  {
    253    category: "length",
    254    cases: [
    255      { queryString: "1 meter to meter", expected: "1 m" },
    256      { queryString: "-1 meter to meter", expected: "-1 m" },
    257      { queryString: "1 meter in meter", expected: "1 m" },
    258      { queryString: "1 meter = meter", expected: "1 m" },
    259      { queryString: "1 METER=METER", expected: "1 m" },
    260      { queryString: "1 m to meter", expected: "1 m" },
    261      { queryString: "1 m to nanometer", expected: "1,000,000,000 nanometer" },
    262      { queryString: "1 m to micrometer", expected: "1,000,000 micrometer" },
    263      { queryString: "1 m to millimeter", expected: "1,000 mm" },
    264      { queryString: "1 m to mm", expected: "1,000 mm" },
    265      { queryString: "1 m to centimeter", expected: "100 cm" },
    266      { queryString: "1 m to cm", expected: "100 cm" },
    267      { queryString: "1 m to kilometer", expected: "0.001 km" },
    268      { queryString: "1 m to km", expected: "0.001 km" },
    269      { queryString: "1 m to mile", expected: "0.0006213689 mi" },
    270      { queryString: "1 m to mi", expected: "0.0006213689 mi" },
    271      { queryString: "1 m to yard", expected: "1.0936132983 yd" },
    272      { queryString: "1 m to yd", expected: "1.0936132983 yd" },
    273      { queryString: "1 m to foot", expected: "3.280839895 ft" },
    274      { queryString: "1 m to ft", expected: "3.280839895 ft" },
    275      { queryString: "1 m to inch", expected: "39.37007874 in" },
    276      { queryString: "1 inch to m", expected: "0.0254 m" },
    277    ],
    278  },
    279  {
    280    category: "mass",
    281    cases: [
    282      { queryString: "1 kg to kg", expected: "1 kg" },
    283      { queryString: "-1 kg to kg", expected: "-1 kg" },
    284      { queryString: "1 kg in kg", expected: "1 kg" },
    285      { queryString: "1 kg = kg", expected: "1 kg" },
    286      { queryString: "1 KG=KG", expected: "1 kg" },
    287      { queryString: "1 kg to kilogram", expected: "1 kg" },
    288      { queryString: "1 kg to gram", expected: "1,000 g" },
    289      { queryString: "1 kg to g", expected: "1,000 g" },
    290      { queryString: "1 kg to milligram", expected: "1,000,000 milligram" },
    291      { queryString: "1 kg to mg", expected: "1,000,000 milligram" },
    292      { queryString: "1 kg to ton", expected: "0.001 ton" },
    293      { queryString: "1 kg to t", expected: "0.001 ton" },
    294      {
    295        queryString: "1 kg to longton",
    296        expected: "0.0009842073 longton",
    297      },
    298      {
    299        queryString: "1 kg to l.t.",
    300        expected: "0.0009842073 longton",
    301      },
    302      {
    303        queryString: "1 kg to l/t",
    304        expected: "0.0009842073 longton",
    305      },
    306      {
    307        queryString: "1 kg to shortton",
    308        expected: "0.0011023122 shortton",
    309      },
    310      {
    311        queryString: "1 kg to s.t.",
    312        expected: "0.0011023122 shortton",
    313      },
    314      {
    315        queryString: "1 kg to s/t",
    316        expected: "0.0011023122 shortton",
    317      },
    318      {
    319        queryString: "1 kg to pound",
    320        expected: "2.2046244202 lb",
    321      },
    322      { queryString: "1 kg to lbs", expected: "2.2046244202 lb" },
    323      {
    324        queryString: "1 kg to lb",
    325        expected: "2.2046244202 lb",
    326      },
    327      {
    328        queryString: "1 kg to ounce",
    329        expected: "35.273990723 oz",
    330      },
    331      { queryString: "1 kg to oz", expected: "35.273990723 oz" },
    332      { queryString: "1 kg to carat", expected: "5,000 carat" },
    333      { queryString: "1 kg to ffd", expected: "5,000 ffd" },
    334      { queryString: "1 ffd to kg", expected: "0.0002 kg" },
    335    ],
    336  },
    337  {
    338    category: "temperature",
    339    cases: [
    340      { queryString: "0 c to c", expected: "0°C" },
    341      { queryString: "0 c in c", expected: "0°C" },
    342      { queryString: "0 c = c", expected: "0°C" },
    343      { queryString: "0 C=C", expected: "0°C" },
    344      { queryString: "0 c to celsius", expected: "0°C" },
    345      { queryString: "0 c to kelvin", expected: "273.15 kelvin" },
    346      { queryString: "0 c to k", expected: "273.15 kelvin" },
    347      { queryString: "10 c to k", expected: "283.15 kelvin" },
    348      { queryString: "0 c to fahrenheit", expected: "32°F" },
    349      { queryString: "0 c to f", expected: "32°F" },
    350      { queryString: "10 c to f", expected: "50°F" },
    351      {
    352        queryString: "10 f to kelvin",
    353        expected: `260.9277777778 kelvin`,
    354      },
    355      { queryString: "-10 c to f", expected: "14°F" },
    356    ],
    357  },
    358  {
    359    category: "timezone",
    360    cases: [
    361      { queryString: "0 utc to utc", expected: "00:00 UTC" },
    362      { queryString: "0 utc in utc", expected: "00:00 UTC" },
    363      { queryString: "0 utc = utc", expected: "00:00 UTC" },
    364      { queryString: "0 UTC=UTC", expected: "00:00 UTC" },
    365      { queryString: "11 pm utc to utc", expected: "11:00 PM UTC" },
    366      { queryString: "11 am utc to utc", expected: "11:00 AM UTC" },
    367      { queryString: "11:30 utc to utc", expected: "11:30 UTC" },
    368      { queryString: "11:30 PM utc to utc", expected: "11:30 PM UTC" },
    369      { queryString: "1 utc to idlw", expected: "13:00 IDLW" },
    370      { queryString: "1 pm utc to idlw", expected: "1:00 AM IDLW" },
    371      { queryString: "1 am utc to idlw", expected: "1:00 PM IDLW" },
    372      { queryString: "1 utc to idlw", expected: "13:00 IDLW" },
    373      { queryString: "1 PM utc to idlw", expected: "1:00 AM IDLW" },
    374      { queryString: "0 utc to nt", expected: "13:00 NT" },
    375      { queryString: "0 utc to hst", expected: "14:00 HST" },
    376      { queryString: "0 utc to akst", expected: "15:00 AKST" },
    377      { queryString: "0 utc to pst", expected: "16:00 PST" },
    378      { queryString: "0 utc to akdt", expected: "16:00 AKDT" },
    379      { queryString: "0 utc to mst", expected: "17:00 MST" },
    380      { queryString: "0 utc to pdt", expected: "17:00 PDT" },
    381      { queryString: "0 utc to cst", expected: "18:00 CST" },
    382      { queryString: "0 utc to mdt", expected: "18:00 MDT" },
    383      { queryString: "0 utc to est", expected: "19:00 EST" },
    384      { queryString: "0 utc to cdt", expected: "19:00 CDT" },
    385      { queryString: "0 utc to edt", expected: "20:00 EDT" },
    386      { queryString: "0 utc to ast", expected: "20:00 AST" },
    387      { queryString: "0 utc to guy", expected: "21:00 GUY" },
    388      { queryString: "0 utc to adt", expected: "21:00 ADT" },
    389      { queryString: "0 utc to at", expected: "22:00 AT" },
    390      { queryString: "0 utc to gmt", expected: "00:00 GMT" },
    391      { queryString: "0 utc to z", expected: "00:00 Z" },
    392      { queryString: "0 utc to wet", expected: "00:00 WET" },
    393      { queryString: "0 utc to west", expected: "01:00 WEST" },
    394      { queryString: "0 utc to cet", expected: "01:00 CET" },
    395      { queryString: "0 utc to bst", expected: "01:00 BST" },
    396      { queryString: "0 utc to ist", expected: "01:00 IST" },
    397      { queryString: "0 utc to cest", expected: "02:00 CEST" },
    398      { queryString: "0 utc to eet", expected: "02:00 EET" },
    399      { queryString: "0 utc to eest", expected: "03:00 EEST" },
    400      { queryString: "0 utc to msk", expected: "03:00 MSK" },
    401      { queryString: "0 utc to msd", expected: "04:00 MSD" },
    402      { queryString: "0 utc to zp4", expected: "04:00 ZP4" },
    403      { queryString: "0 utc to zp5", expected: "05:00 ZP5" },
    404      { queryString: "0 utc to zp6", expected: "06:00 ZP6" },
    405      { queryString: "0 utc to wast", expected: "07:00 WAST" },
    406      { queryString: "0 utc to awst", expected: "08:00 AWST" },
    407      { queryString: "0 utc to wst", expected: "08:00 WST" },
    408      { queryString: "0 utc to jst", expected: "09:00 JST" },
    409      { queryString: "0 utc to acst", expected: "09:30 ACST" },
    410      { queryString: "0 utc to aest", expected: "10:00 AEST" },
    411      { queryString: "0 utc to acdt", expected: "10:30 ACDT" },
    412      { queryString: "0 utc to aedt", expected: "11:00 AEDT" },
    413      { queryString: "0 utc to nzst", expected: "12:00 NZST" },
    414      { queryString: "0 utc to idle", expected: "12:00 IDLE" },
    415      { queryString: "0 utc to nzd", expected: "13:00 NZD" },
    416      { queryString: "9:00 jst to utc", expected: "00:00 UTC" },
    417      { queryString: "8:00 jst to utc", expected: "23:00 UTC" },
    418      { queryString: "8:00 am jst to utc", expected: "11:00 PM UTC" },
    419      { queryString: "9:00 jst to pdt", expected: "17:00 PDT" },
    420      { queryString: "12 pm pst to cet", expected: "9:00 PM CET" },
    421      { queryString: "12 am pst to cet", expected: "9:00 AM CET" },
    422      { queryString: "12:30 pm pst to cet", expected: "9:30 PM CET" },
    423      { queryString: "12:30 am pst to cet", expected: "9:30 AM CET" },
    424      { queryString: "23 pm pst to cet", expected: "8:00 AM CET" },
    425      { queryString: "23:30 pm pst to cet", expected: "8:30 AM CET" },
    426      {
    427        queryString: "10:00 JST to here",
    428        timezone: "UTC",
    429        expected: "01:00 UTC-000",
    430      },
    431      {
    432        queryString: "1:00 to JST",
    433        timezone: "UTC",
    434        expected: "10:00 JST",
    435      },
    436      {
    437        queryString: "1 am to JST",
    438        timezone: "UTC",
    439        expected: "10:00 AM JST",
    440      },
    441      {
    442        queryString: "now to JST",
    443        timezone: "UTC",
    444        assertResult: output => {
    445          const outputRegexResult = /([0-9]+):([0-9]+)/.exec(output);
    446          const outputMinutes =
    447            parseInt(outputRegexResult[1]) * 60 +
    448            parseInt(outputRegexResult[2]);
    449          const nowDate = new Date();
    450          // Apply JST time difference.
    451          nowDate.setHours(nowDate.getHours() + 9);
    452          let nowMinutes = nowDate.getHours() * 60 + nowDate.getMinutes();
    453          // When we cross the day between the unit converter calculation and the
    454          // assertion here.
    455          nowMinutes =
    456            outputMinutes > nowMinutes ? nowMinutes + 1440 : nowMinutes;
    457          Assert.lessOrEqual(nowMinutes - outputMinutes, 1);
    458        },
    459      },
    460      {
    461        queryString: "now to here",
    462        timezone: "UTC",
    463        assertResult: output => {
    464          const outputRegexResult = /([0-9]+):([0-9]+)/.exec(output);
    465          const outputMinutes =
    466            parseInt(outputRegexResult[1]) * 60 +
    467            parseInt(outputRegexResult[2]);
    468          const nowDate = new Date();
    469          let nowMinutes = nowDate.getHours() * 60 + nowDate.getMinutes();
    470          nowMinutes =
    471            outputMinutes > nowMinutes ? nowMinutes + 1440 : nowMinutes;
    472          Assert.lessOrEqual(nowMinutes - outputMinutes, 1);
    473        },
    474      },
    475    ],
    476  },
    477  {
    478    category: "invalid",
    479    cases: [
    480      { queryString: "1 to cm" },
    481      { queryString: "1cm to newton" },
    482      { queryString: "1cm to foo" },
    483      { queryString: "0:00:00 utc to jst" },
    484    ],
    485  },
    486 ];
    487 
    488 add_task(async function () {
    489  // Enable unit conversion.
    490  Services.prefs.setBoolPref("browser.urlbar.unitConversion.enabled", true);
    491  registerCleanupFunction(() => {
    492    Services.prefs.clearUserPref("browser.urlbar.unitConversion.enabled");
    493  });
    494  let provider = new UrlbarProviderUnitConversion();
    495 
    496  for (const { category, cases } of TEST_DATA) {
    497    for (const { queryString, timezone, expected, assertResult } of cases) {
    498      info(`Test "${queryString}" in ${category}`);
    499 
    500      if (timezone) {
    501        info(`Set timezone ${timezone}`);
    502        Cu.getJSTestingFunctions().setTimeZone(timezone);
    503      }
    504 
    505      const context = createContext(queryString);
    506      const isActive = await provider.isActive(context);
    507      Assert.equal(isActive, !!expected || !!assertResult);
    508 
    509      if (isActive) {
    510        provider.startQuery(context, (module, result) => {
    511          Assert.equal(result.type, UrlbarUtils.RESULT_TYPE.DYNAMIC);
    512          Assert.equal(result.source, UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL);
    513          Assert.equal(result.suggestedIndex, 1);
    514          Assert.equal(result.payload.input, queryString);
    515 
    516          if (expected) {
    517            Assert.equal(result.payload.output, expected);
    518          } else {
    519            assertResult(result.payload.output);
    520          }
    521        });
    522      }
    523 
    524      if (timezone) {
    525        // Reset timezone to default
    526        Cu.getJSTestingFunctions().setTimeZone(undefined);
    527      }
    528    }
    529  }
    530 });