forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			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.`
 | |
|       );
 | |
|     }
 | |
|   }
 | |
| });
 | 
