Open Bug 1650812 Opened 4 years ago Updated 4 years ago

Introduce NodePicker test helper

Categories

(DevTools :: Inspector, task, P3)

task

Tracking

(Not tracked)

People

(Reporter: rcaliman, Unassigned)

References

(Blocks 1 open bug)

Details

When testing the NodePicker, there are a few helper methods which must be called with toolbox, inspector and testActor arguments:

  • startPicker(toolbox)
  • hoverElement(inspector, testActor, selector, x, y)
  • pickElement(inspector, testActor, selector, x, y)

It would simplify tests if we wrap these into an inspector-scoped helper.

Something like:

function getNodePickerHelpers(inspector, testActor) {
  const { toolbox } = inspector;
  let _isPicking = false;

  return {
    startPicker(skipFocus) {
      _isPicking = true;
      return startPicker(toolbox, skipFocus);
    },

    async hoverElement(selector, x, y) {
      if (!_isPicking) {
        await startPicker(toolbox);
      }

      return hoverElement(inspector, testActor, selector, x, y);
    },

    pickElement(selector, x, y) {
      _isPicking = false;
      return pickElement(inspector, testActor, selector, x, y);
    },
  };
}

Tests would become simpler:

+ const { startPicker, hoverElement, pickElement } = getNodePickerHelpers(inspector, testActor);

- await startPicker(toolbox);
+ await startPicker();
- await hoverElement(inspector, testActor, "iframe", 1, 1);
+ await hoverElement("iframe", 1, 1);
- await pickElement(inspector, testActor, "iframe", 1, 1);
+ await pickElement("iframe", 1, 1);

This has the added benefit of clarifying what is meant by "hoverElement" and "pickElement".

Severity: -- → N/A
Priority: -- → P3

Also note that testActor could probably be dropped in favor of BrowserTestUtils:
https://searchfox.org/mozilla-central/rev/91d82d7cbf05a71954dfa49d0e43824c7c973e62/devtools/client/accessibility/test/browser/browser_accessibility_context_menu_browser.js#22-32
You would have to pass the browser element which you can retrieve like this gBrowser.selectedBrowser, if you always assume that we are working against the currently selected tab. Or via inspector.toolbox.target.localTab.linkedBrowser if you want to always ensure targeting the one tab that the toolbox is currently debugging.

You need to log in before you can comment on or make changes to this bug.