tor-browser

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

islamic.js (3141B)


      1 // |reftest| skip-if(!this.hasOwnProperty("Intl"))
      2 
      3 function civilDate(options, date) {
      4    var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
      5    return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-civil-nu-latn", opts).format(date);
      6 }
      7 
      8 function tabularDate(options, date) {
      9    var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
     10    return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-tbla-nu-latn", opts).format(date);
     11 }
     12 
     13 function ummAlQuraDate(options, date) {
     14    var opts = Object.assign({timeZone: "Asia/Riyadh"}, options);
     15    return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-umalqura-nu-latn", opts).format(date);
     16 }
     17 
     18 // Test islamic-tbla (Tabular / Thursday epoch).
     19 // Compare with islamic-civil (Tabular / Friday epoch).
     20 function testIslamicTbla() {
     21    var date = new Date(Date.UTC(2015, 1 - 1, 1));
     22 
     23    // Month and year are the same.
     24    var monthYear = {year: "numeric", month: "numeric"};
     25    assertEq(civilDate(monthYear, date), tabularDate(monthYear, date));
     26 
     27    // Day is different by one.
     28    var day = {day: "numeric"};
     29    assertEq(Number(civilDate(day, date)) - Number(tabularDate(day, date)), -1);
     30 }
     31 
     32 // Test islamic-umalqura (Umm al-Qura).
     33 function testIslamicUmalqura() {
     34    var year = {year: "numeric"};
     35    var month = {month: "numeric"};
     36    var day = {day: "numeric"};
     37 
     38    // From ICU test files, which in turn was generated from:
     39    //   Official Umm-al-Qura calendar of SA:
     40    //   home, http://www.ummulqura.org.sa/default.aspx
     41    //   converter, http://www.ummulqura.org.sa/Index.aspx
     42    var dates = [
     43        [ {year: 2016, month:  1, day: 11}, {year: 1437, month:  4, day: 1} ],
     44        [ {year: 2016, month:  2, day: 10}, {year: 1437, month:  5, day: 1} ],
     45        [ {year: 2016, month:  3, day: 10}, {year: 1437, month:  6, day: 1} ],
     46        [ {year: 2016, month:  4, day:  8}, {year: 1437, month:  7, day: 1} ],
     47        [ {year: 2016, month:  5, day:  8}, {year: 1437, month:  8, day: 1} ],
     48        [ {year: 2016, month:  6, day:  6}, {year: 1437, month:  9, day: 1} ],
     49        [ {year: 2016, month:  7, day:  6}, {year: 1437, month: 10, day: 1} ],
     50        [ {year: 2016, month:  8, day:  4}, {year: 1437, month: 11, day: 1} ],
     51        [ {year: 2016, month:  9, day:  2}, {year: 1437, month: 12, day: 1} ],
     52        [ {year: 2016, month: 10, day:  2}, {year: 1438, month:  1, day: 1} ],
     53        [ {year: 2016, month: 11, day:  1}, {year: 1438, month:  2, day: 1} ],
     54        [ {year: 2016, month: 11, day: 30}, {year: 1438, month:  3, day: 1} ],
     55        [ {year: 2016, month: 12, day: 30}, {year: 1438, month:  4, day: 1} ],
     56    ];
     57 
     58    for (var [gregorian, ummAlQura] of dates) {
     59        var date = new Date(Date.UTC(gregorian.year, gregorian.month - 1, gregorian.day));
     60 
     61        // Use parseInt() to remove the trailing era indicator.
     62        assertEq(parseInt(ummAlQuraDate(year, date), 10), ummAlQura.year);
     63        assertEq(Number(ummAlQuraDate(month, date)), ummAlQura.month);
     64        assertEq(Number(ummAlQuraDate(day, date)), ummAlQura.day);
     65    }
     66 }
     67 
     68 testIslamicTbla();
     69 testIslamicUmalqura();
     70 
     71 if (typeof reportCompare === "function")
     72    reportCompare(0, 0, "ok");