/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

///////////////////
//
// Whitelisting this test.
// As part of bug 1077403, the leaking uncaught rejection should be fixed. 
//
thisTestLeaksUncaughtRejectionsAndShouldBeFixed("Error: Unknown sheet source");

const TESTCASE_URI = TEST_BASE_HTTPS + "simple.html";
const NEW_URI = TEST_BASE_HTTPS + "media.html";

const LINE_NO = 5;
const COL_NO = 3;

let gContentWin;
let gUI;

function test()
{
  waitForExplicitFinish();

  addTabAndOpenStyleEditors(2, function(panel) {
    gContentWin = gBrowser.selectedBrowser.contentWindow.wrappedJSObject;
    gUI = panel.UI;
    gUI.editors[0].getSourceEditor().then(runTests);
  });

  content.location = TESTCASE_URI;
}

function runTests()
{
  let count = 0;
  gUI.on("editor-selected", function editorSelected(event, editor) {
    if (editor.styleSheet != gUI.editors[1].styleSheet) {
      return;
    }
    gUI.off("editor-selected", editorSelected);
    editor.getSourceEditor().then(() => {
      info("selected second editor, about to reload page");
      reloadPage();

      gUI.on("editor-added", function editorAdded(event, editor) {
        if (++count == 2) {
          info("all editors added after reload");
          gUI.off("editor-added", editorAdded);
          gUI.editors[1].getSourceEditor().then(testRemembered);
        }
      })
    });
  });
  gUI.selectStyleSheet(gUI.editors[1].styleSheet, LINE_NO, COL_NO);
}

function testRemembered()
{
  is(gUI.selectedEditor, gUI.editors[1], "second editor is selected");

  let {line, ch} = gUI.selectedEditor.sourceEditor.getCursor();
  is(line, LINE_NO, "correct line selected");
  is(ch, COL_NO, "correct column selected");

  testNewPage();
}

function testNewPage()
{
  let count = 0;
  gUI.on("editor-added", function editorAdded(event, editor) {
    info("editor added here")
    if (++count == 2) {
      info("all editors added after navigating page");
      gUI.off("editor-added", editorAdded);
      gUI.editors[0].getSourceEditor().then(testNotRemembered);
    }
  })

  info("navigating to a different page");
  navigatePage();
}

function testNotRemembered()
{
  is(gUI.selectedEditor, gUI.editors[0], "first editor is selected");

  let {line, ch} = gUI.selectedEditor.sourceEditor.getCursor();
  is(line, 0, "first line is selected");
  is(ch, 0, "first column is selected");

  gUI = null;
  finish();
}

function reloadPage()
{
  gContentWin.location.reload();
}

function navigatePage()
{
  gContentWin.location = NEW_URI;
}
