/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";

// Test that middle click on style sheet doesn't open styleeditor.xul in a new
// tab (bug 851132).

const TESTCASE_URI = TEST_BASE_HTTP + "four.html";

add_task(function* () {
  let { ui } = yield openStyleEditorForURL(TESTCASE_URI);
  gBrowser.tabContainer.addEventListener("TabOpen", onTabAdded, false);

  yield ui.editors[0].getSourceEditor();
  info("first editor selected");

  info("Left-clicking on the second editor link.");
  yield clickOnStyleSheetLink(ui.editors[1], 0);

  info("Waiting for the second editor to be selected.");
  let editor = yield ui.once("editor-selected");

  ok(editor.sourceEditor.hasFocus(),
     "Left mouse click gave second editor focus.");

  // middle mouse click should not open a new tab
  info("Middle clicking on the third editor link.");
  yield clickOnStyleSheetLink(ui.editors[2], 1);
});

/**
 * A helper that clicks on style sheet link in the sidebar.
 *
 * @param {StyleSheetEditor} editor
 *        The editor of which link should be clicked.
 * @param {MouseEvent.button} button
 *        The button to click the link with.
 */
function* clickOnStyleSheetLink(editor, button) {
  let window = editor._window;
  let link = editor.summary.querySelector(".stylesheet-name");

  info("Waiting for focus.");
  yield SimpleTest.promiseFocus(window);

  info("Pressing button " + button + " on style sheet name link.");
  EventUtils.synthesizeMouseAtCenter(link, { button }, window);
}

function onTabAdded() {
  ok(false, "middle mouse click has opened a new tab");
}

registerCleanupFunction(function() {
  gBrowser.tabContainer.removeEventListener("TabOpen", onTabAdded, false);
});
