mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
   http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
/**
 | 
						|
 * Check that all customizable buttons have labels and icons.
 | 
						|
 *
 | 
						|
 * This is primarily designed to ensure we don't end up with items without
 | 
						|
 * labels in customize mode. In the past, this has happened due to race
 | 
						|
 * conditions, where labels would be correct if and only if the item had
 | 
						|
 * already been moved into a toolbar or panel in the main UI before
 | 
						|
 * (forcing it to be constructed and any fluent identifiers to be localized
 | 
						|
 * and applied).
 | 
						|
 * We use a new window to ensure that earlier tests using some of the widgets
 | 
						|
 * in the palette do not influence our checks to see that such items get
 | 
						|
 * labels, "even" if the first time they're rendered is in customize mode's
 | 
						|
 * palette.
 | 
						|
 */
 | 
						|
add_task(async function test_all_buttons_have_labels() {
 | 
						|
  let win = await BrowserTestUtils.openNewBrowserWindow();
 | 
						|
  registerCleanupFunction(async () => {
 | 
						|
    await endCustomizing(win);
 | 
						|
    return BrowserTestUtils.closeWindow(win);
 | 
						|
  });
 | 
						|
  await startCustomizing(win);
 | 
						|
  let { palette } = win.gNavToolbox;
 | 
						|
  // Wait for things to paint.
 | 
						|
  await TestUtils.waitForCondition(() => {
 | 
						|
    return !!Array.from(palette.querySelectorAll(".toolbarbutton-icon")).filter(
 | 
						|
      n => {
 | 
						|
        let rect = n.getBoundingClientRect();
 | 
						|
        return rect.height > 0 && rect.width > 0;
 | 
						|
      }
 | 
						|
    ).length;
 | 
						|
  }, "Must start rendering icons.");
 | 
						|
 | 
						|
  for (let wrapper of palette.children) {
 | 
						|
    if (wrapper.hasAttribute("title")) {
 | 
						|
      ok(true, wrapper.firstElementChild.id + " has a label.");
 | 
						|
    } else {
 | 
						|
      info(
 | 
						|
        `${wrapper.firstElementChild.id} doesn't seem to have a label, waiting.`
 | 
						|
      );
 | 
						|
      await BrowserTestUtils.waitForAttribute("title", wrapper);
 | 
						|
      ok(
 | 
						|
        wrapper.hasAttribute("title"),
 | 
						|
        wrapper.firstElementChild.id + " has a label."
 | 
						|
      );
 | 
						|
    }
 | 
						|
    let icons = Array.from(wrapper.querySelectorAll(".toolbarbutton-icon"));
 | 
						|
    // If there are icons, at least one must be visible
 | 
						|
    // (not everything necessarily has one, e.g. the search bar has no icon)
 | 
						|
    if (icons.length) {
 | 
						|
      let visibleIcons = icons.filter(n => {
 | 
						|
        let rect = n.getBoundingClientRect();
 | 
						|
        return rect.height > 0 && rect.width > 0;
 | 
						|
      });
 | 
						|
      Assert.greater(
 | 
						|
        visibleIcons.length,
 | 
						|
        0,
 | 
						|
        `${wrapper.firstElementChild.id} should have at least one visible icon.`
 | 
						|
      );
 | 
						|
    }
 | 
						|
  }
 | 
						|
});
 |