Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/dom/base/test/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 7 kB image not shown  

Quelle  browser_timezone_override.js

  Sprache: JAVA
 

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */


"use strict";

const PAGE_URL = "https://example.com/chrome/dom/base/test/file_empty.html";
const timezones = [
  {
    timezoneId: "Europe/London",
    dateString: "Mon Sep 09 1974 12:25:15 GMT+0100 (British Summer Time)",
  },
  {
    timezoneId: "America/New_York",
    dateString: "Mon Sep 09 1974 07:25:15 GMT-0400 (Eastern Daylight Time)",
  },
  {
    timezoneId: "Pacific/Auckland",
    dateString: "Mon Sep 09 1974 23:25:15 GMT+1200 (New Zealand Standard Time)",
  },
];

const TEST_TIMESTAMP = 147957915498;

add_task(async function test_set_timezone_override() {
  const tab = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
  const browser = gBrowser.getBrowserForTab(tab);

  await BrowserTestUtils.browserLoaded(browser);

  info("Get default timezone");
  const defaultTimezone = await getIntlTimezone(browser);
  const defaultDateString = await getDateString(browser);

  const timezoneOverride = getTimezoneToOverride(defaultTimezone);

  info("Set timezone override");
  browser.browsingContext.timezoneOverride = timezoneOverride;

  await assertTimezoneOverridden(browser, timezoneOverride);

  const secondTimezoneOverride = getSecondTimezoneToOverride(defaultTimezone);

  info("Set another timezone override again");
  browser.browsingContext.timezoneOverride = secondTimezoneOverride;

  await assertTimezoneOverridden(browser, secondTimezoneOverride);

  info("Reset language override");
  browser.browsingContext.timezoneOverride = "";
  await assertTimezoneIsNotOverridden(
    browser,
    defaultTimezone,
    defaultDateString
  );

  BrowserTestUtils.removeTab(tab);
});

add_task(async function test_set_timezone_override_and_navigate() {
  const tab = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
  const browser = gBrowser.getBrowserForTab(tab);

  await BrowserTestUtils.browserLoaded(browser);

  info("Get default timezone");
  const defaultTimezone = await getIntlTimezone(browser);
  const timezoneOverride = getTimezoneToOverride(defaultTimezone);

  info("Set timezone override");
  browser.browsingContext.timezoneOverride = timezoneOverride;

  await assertTimezoneOverridden(browser, timezoneOverride);

  info("Navigate browsing context");
  const url = "https://example.com/chrome/dom/base/test/dummy.html";
  const loaded = BrowserTestUtils.browserLoaded(browser, false, url, false);
  BrowserTestUtils.startLoadingURIString(browser, url);
  await loaded;
  await assertTimezoneOverridden(browser, timezoneOverride);

  BrowserTestUtils.removeTab(tab);
});

add_task(async function test_set_timezone_override_in_different_contexts() {
  const tab1 = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
  const browser1 = gBrowser.getBrowserForTab(tab1);

  await BrowserTestUtils.browserLoaded(browser1);

  const tab2 = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
  const browser2 = gBrowser.getBrowserForTab(tab2);

  await BrowserTestUtils.browserLoaded(browser2);

  info("Get default timezone in the first tab");
  const defaultTimezone = await getIntlTimezone(browser1);
  const defaultDateString = await getDateString(browser1);

  const timezoneOverride = getTimezoneToOverride(defaultTimezone);

  info("Set timezone override to the first tab");
  browser1.browsingContext.timezoneOverride = timezoneOverride;

  await assertTimezoneOverridden(browser1, timezoneOverride);

  info("Make sure that in the second tab timezone is not overridden");
  await assertTimezoneIsNotOverridden(
    browser2,
    defaultTimezone,
    defaultDateString
  );

  info("Reset timezone override");
  browser1.browsingContext.timezoneOverride = "";
  await assertTimezoneIsNotOverridden(
    browser1,
    defaultTimezone,
    defaultDateString
  );

  BrowserTestUtils.removeTab(tab1);
  BrowserTestUtils.removeTab(tab2);
});

add_task(async function test_set_custom_offset_as_timezone_override() {
  const tab = BrowserTestUtils.addTab(gBrowser, PAGE_URL);
  const browser = gBrowser.getBrowserForTab(tab);

  await BrowserTestUtils.browserLoaded(browser);

  info("Get default timezone");
  const defaultTimezone = await getIntlTimezone(browser);
  const defaultDateString = await getDateString(browser);

  const timezoneOverride = "GMT+05:00";

  info("Set timezone override");
  browser.browsingContext.timezoneOverride = timezoneOverride;

  const customTimezoneId = "Etc/GMT-5";
  is(
    await getDateString(browser),
    `Mon Sep 09 1974 16:25:15 GMT+0500 (${timezoneOverride})`,
    `new Date(${TEST_TIMESTAMP}).toString() is overridden`
  );
  is(
    await getIntlTimezone(browser),
    customTimezoneId,
    "new Intl.DateTimeFormat().resolvedOptions().timezone is overridden"
  );
  is(
    await getTemporalTimezoneId(browser),
    customTimezoneId,
    "Temporal.Now.timezoneId is overridden"
  );

  info("Reset language override");
  browser.browsingContext.timezoneOverride = "";
  await assertTimezoneIsNotOverridden(
    browser,
    defaultTimezone,
    defaultDateString
  );

  BrowserTestUtils.removeTab(tab);
});

async function assertTimezoneOverridden(browser, timezoneOverride) {
  const timezoneObject = findTimezoneObject(timezoneOverride);
  is(
    await getDateString(browser),
    timezoneObject.dateString,
    `new Date(${TEST_TIMESTAMP}).toString() is overridden`
  );
  is(
    await getIntlTimezone(browser),
    timezoneOverride,
    "new Intl.DateTimeFormat().resolvedOptions().timeZone is overridden"
  );
  is(
    await getTemporalTimezoneId(browser),
    timezoneOverride,
    "Temporal.Now.timezoneId is overridden"
  );
}

async function assertTimezoneIsNotOverridden(
  browser,
  defaultTimezone,
  defaultDateString
) {
  is(
    await getIntlTimezone(browser),
    defaultTimezone,
    "new Intl.DateTimeFormat().resolvedOptions().timeZone is not overridden"
  );
  is(
    await getTemporalTimezoneId(browser),
    defaultTimezone,
    "Temporal.Now.timezoneId is not overridden"
  );
  is(
    await getDateString(browser),
    defaultDateString,
    `new Date(${TEST_TIMESTAMP}).toString() is not overridden`
  );
}

async function getDateString(browser) {
  return SpecialPowers.spawn(browser, [TEST_TIMESTAMP], testTimestamp => {
    return content.eval(`new Date(${testTimestamp}).toString()`);
  });
}

async function getIntlTimezone(browser) {
  return SpecialPowers.spawn(browser, [], () => {
    return content.eval(`Intl.DateTimeFormat().resolvedOptions().timeZone`);
  });
}

async function getTemporalTimezoneId(browser) {
  return SpecialPowers.spawn(browser, [], () => {
    return content.eval(`Temporal.Now.timeZoneId()`);
  });
}

function getTimezoneToOverride(defaultTimezone) {
  const timezoneObject = timezones.find(
    timezone => timezone.timezoneId !== defaultTimezone
  );
  return timezoneObject.timezoneId;
}

function getSecondTimezoneToOverride(defaultTimezone, testTimezone) {
  const timezoneObject = timezones.find(
    timezone =>
      timezone.timezoneId !== defaultTimezone &&
      timezone.timezoneId !== testTimezone
  );
  return timezoneObject.timezoneId;
}

function findTimezoneObject(timezoneId) {
  return timezones.find(timezone => timezone.timezoneId === timezoneId);
}

Messung V0.5 in Prozent
C=98 H=100 G=98

¤ Dauer der Verarbeitung: 0.6 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.