mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			181 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
/**
 | 
						|
 * Tests in this file check that user customizations to the tabstrip show
 | 
						|
 * the correct type of new tab button while the tabstrip isn't overflowing.
 | 
						|
 */
 | 
						|
 | 
						|
const kGlobalNewTabButton = document.getElementById("new-tab-button");
 | 
						|
const kInnerNewTabButton = gBrowser.tabContainer.newTabButton;
 | 
						|
 | 
						|
function assertNewTabButton(which) {
 | 
						|
  if (which == "global") {
 | 
						|
    isnot(
 | 
						|
      kGlobalNewTabButton.getBoundingClientRect().width,
 | 
						|
      0,
 | 
						|
      "main new tab button should be visible"
 | 
						|
    );
 | 
						|
    is(
 | 
						|
      kInnerNewTabButton.getBoundingClientRect().width,
 | 
						|
      0,
 | 
						|
      "inner new tab button should be hidden"
 | 
						|
    );
 | 
						|
  } else if (which == "inner") {
 | 
						|
    is(
 | 
						|
      kGlobalNewTabButton.getBoundingClientRect().width,
 | 
						|
      0,
 | 
						|
      "main new tab button should be hidden"
 | 
						|
    );
 | 
						|
    isnot(
 | 
						|
      kInnerNewTabButton.getBoundingClientRect().width,
 | 
						|
      0,
 | 
						|
      "inner new tab button should be visible"
 | 
						|
    );
 | 
						|
  } else {
 | 
						|
    ok(false, "Unexpected button: " + which);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Add and remove items *after* the new tab button in customize mode.
 | 
						|
 */
 | 
						|
add_task(async function addremove_after_newtab_customizemode() {
 | 
						|
  await startCustomizing();
 | 
						|
  await waitForElementShown(kGlobalNewTabButton);
 | 
						|
  simulateItemDrag(
 | 
						|
    document.getElementById("stop-reload-button"),
 | 
						|
    kGlobalNewTabButton,
 | 
						|
    "end"
 | 
						|
  );
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  await endCustomizing();
 | 
						|
  assertNewTabButton("inner");
 | 
						|
 | 
						|
  await startCustomizing();
 | 
						|
  let dropTarget = document.getElementById("forward-button");
 | 
						|
  await waitForElementShown(dropTarget);
 | 
						|
  simulateItemDrag(
 | 
						|
    document.getElementById("stop-reload-button"),
 | 
						|
    dropTarget,
 | 
						|
    "end"
 | 
						|
  );
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should still have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  await endCustomizing();
 | 
						|
  assertNewTabButton("inner");
 | 
						|
  ok(CustomizableUI.inDefaultState, "Should be in default state");
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Add and remove items *before* the new tab button in customize mode.
 | 
						|
 */
 | 
						|
add_task(async function addremove_before_newtab_customizemode() {
 | 
						|
  await startCustomizing();
 | 
						|
  await waitForElementShown(kGlobalNewTabButton);
 | 
						|
  simulateItemDrag(
 | 
						|
    document.getElementById("stop-reload-button"),
 | 
						|
    kGlobalNewTabButton,
 | 
						|
    "start"
 | 
						|
  );
 | 
						|
  ok(
 | 
						|
    !gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should no longer have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  await endCustomizing();
 | 
						|
  assertNewTabButton("global");
 | 
						|
  await startCustomizing();
 | 
						|
  let dropTarget = document.getElementById("forward-button");
 | 
						|
  await waitForElementShown(dropTarget);
 | 
						|
  simulateItemDrag(
 | 
						|
    document.getElementById("stop-reload-button"),
 | 
						|
    dropTarget,
 | 
						|
    "end"
 | 
						|
  );
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should have the adjacent newtab attribute again"
 | 
						|
  );
 | 
						|
  await endCustomizing();
 | 
						|
  assertNewTabButton("inner");
 | 
						|
  ok(CustomizableUI.inDefaultState, "Should be in default state");
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Add and remove items *after* the new tab button outside of customize mode.
 | 
						|
 */
 | 
						|
add_task(async function addremove_after_newtab_api() {
 | 
						|
  CustomizableUI.addWidgetToArea("stop-reload-button", "TabsToolbar");
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  assertNewTabButton("inner");
 | 
						|
 | 
						|
  CustomizableUI.reset();
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should still have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  assertNewTabButton("inner");
 | 
						|
  ok(CustomizableUI.inDefaultState, "Should be in default state");
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Add and remove items *before* the new tab button outside of customize mode.
 | 
						|
 */
 | 
						|
add_task(async function addremove_before_newtab_api() {
 | 
						|
  let index =
 | 
						|
    CustomizableUI.getWidgetIdsInArea("TabsToolbar").indexOf("new-tab-button");
 | 
						|
  CustomizableUI.addWidgetToArea("stop-reload-button", "TabsToolbar", index);
 | 
						|
  ok(
 | 
						|
    !gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should no longer have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  assertNewTabButton("global");
 | 
						|
 | 
						|
  CustomizableUI.removeWidgetFromArea("stop-reload-button");
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should have the adjacent newtab attribute again"
 | 
						|
  );
 | 
						|
  assertNewTabButton("inner");
 | 
						|
 | 
						|
  CustomizableUI.reset();
 | 
						|
  ok(CustomizableUI.inDefaultState, "Should be in default state");
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Reset to defaults in customize mode to see if that doesn't break things.
 | 
						|
 */
 | 
						|
add_task(async function reset_before_newtab_customizemode() {
 | 
						|
  await startCustomizing();
 | 
						|
  await waitForElementShown(kGlobalNewTabButton);
 | 
						|
  simulateItemDrag(
 | 
						|
    document.getElementById("stop-reload-button"),
 | 
						|
    kGlobalNewTabButton,
 | 
						|
    "start"
 | 
						|
  );
 | 
						|
  ok(
 | 
						|
    !gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should no longer have the adjacent newtab attribute"
 | 
						|
  );
 | 
						|
  await endCustomizing();
 | 
						|
  assertNewTabButton("global");
 | 
						|
  await startCustomizing();
 | 
						|
  await gCustomizeMode.reset();
 | 
						|
  ok(
 | 
						|
    gBrowser.tabContainer.hasAttribute("hasadjacentnewtabbutton"),
 | 
						|
    "tabs should have the adjacent newtab attribute again"
 | 
						|
  );
 | 
						|
  await endCustomizing();
 | 
						|
  assertNewTabButton("inner");
 | 
						|
  ok(CustomizableUI.inDefaultState, "Should be in default state");
 | 
						|
});
 |