Bug 808264 - Intermittent browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js | Timed out while waiting for: Wait for the source-editor to load

This commit is contained in:
Mihai Sucan 2012-11-15 19:40:44 +02:00
parent 4c2fb68703
commit eae67ee933

View File

@ -7,11 +7,10 @@
const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test" +
"/test-bug-782653-css-errors.html";
let nodes;
let nodes, hud, SEC;
let styleEditorWin;
function test() {
function test()
{
addTab(TEST_URI);
browser.addEventListener("load", function onLoad() {
browser.removeEventListener("load", onLoad, true);
@ -19,17 +18,26 @@ function test() {
}, true);
}
function testViewSource(hud) {
function testViewSource(aHud)
{
hud = aHud;
registerCleanupFunction(function() {
nodes = hud = SEC = null;
});
let selector = ".webconsole-msg-cssparser .webconsole-location";
waitForSuccess({
name: "find the location node",
validatorFn: function()
{
return hud.outputNode.querySelector(".webconsole-location");
return hud.outputNode.querySelector(selector);
},
successFn: function()
{
nodes = hud.outputNode.querySelectorAll(".webconsole-location");
nodes = hud.outputNode.querySelectorAll(selector);
is(nodes.length, 2, "correct number of css messages");
Services.ww.registerNotification(observer);
@ -39,84 +47,9 @@ function testViewSource(hud) {
});
}
function checkStyleEditorForSheetAndLine(aStyleSheetIndex, aLine, aCallback) {
function doCheck(aEditor) {
function checkLineAndCallback() {
info("In checkLineAndCallback()");
is(aEditor.sourceEditor.getCaretPosition().line, aLine,
"Correct line is selected");
if (aCallback) {
aCallback();
}
}
function checkForCorrectSheet() {
if (aEditor.styleSheetIndex != SEC.selectedStyleSheetIndex) {
ok(false, "Correct Style Sheet was not selected.");
if (aCallback) {
executeSoon(aCallback);
}
return;
}
info("Editor is already loaded, check the current line of caret");
executeSoon(checkLineAndCallback);
}
ok(aEditor, "aEditor is defined.");
// Source-editor is already loaded, check the current sheet and line.
if (aEditor.sourceEditor) {
checkForCorrectSheet();
return;
}
info("source editor is not loaded, waiting for it.");
// Source-editor is not loaded, polling regularly and waiting for it to load
waitForSuccess({
name: "Wait for the source-editor to load",
validatorFn: function()
{
return aEditor.sourceEditor;
},
successFn: checkForCorrectSheet,
failureFn: aCallback,
});
}
let SEC = styleEditorWin.styleEditorChrome;
ok(SEC, "Syle Editor Chrome is defined properly while calling for [" +
aStyleSheetIndex + ", " + aLine + "]");
// Editors are not ready, so wait for them.
if (!SEC.editors.length) {
info("Editor is not ready, waiting before doing check.");
SEC.addChromeListener({
onEditorAdded: function onEditorAdded(aChrome, aEditor) {
info("Editor loaded now. Removing listener and doing check.");
aChrome.removeChromeListener(this);
executeSoon(function() {
doCheck(aEditor);
});
}
});
}
// Execute soon so that selectedStyleSheetIndex has correct value.
else {
info("Editor is defined, opening the desired editor for now and " +
"checking later if it is correct");
for (let aEditor of SEC.editors) {
if (aEditor.styleSheetIndex == aStyleSheetIndex) {
doCheck(aEditor);
break;
}
}
}
}
let observer = {
observe: function(aSubject, aTopic, aData) {
observe: function(aSubject, aTopic, aData)
{
if (aTopic != "domwindowopened") {
return;
}
@ -124,21 +57,79 @@ let observer = {
info("Style Editor window was opened in response to clicking " +
"the location node");
function sheetForNode(aNode)
{
let href = aNode.getAttribute("title");
let sheet, i = 0;
while((sheet = content.document.styleSheets[i++])) {
if (sheet.href == href) {
return sheet;
}
}
ok(false, "no sheet found");
}
executeSoon(function() {
styleEditorWin = window.StyleEditor
.StyleEditorManager
.getEditorForWindow(content.window);
ok(styleEditorWin, "Style Editor Window is defined");
let styleEditorWin = window.StyleEditor.StyleEditorManager
.getEditorForWindow(content.window);
ok(styleEditorWin, "Style Editor window is defined");
waitForFocus(function() {
checkStyleEditorForSheetAndLine(0, 7, function() {
checkStyleEditorForSheetAndLine(1, 6, function() {
SEC = styleEditorWin.styleEditorChrome;
ok(SEC, "Style Editor Chrome is defined");
let sheet = sheetForNode(nodes[0]);
checkStyleEditorForSheetAndLine(sheet, 7, function() {
let sheet = sheetForNode(nodes[1]);
EventUtils.sendMouseEvent({ type: "click" }, nodes[1]);
checkStyleEditorForSheetAndLine(sheet, 6, function() {
window.StyleEditor.toggle();
styleEditorWin = null;
finishTest();
});
EventUtils.sendMouseEvent({ type: "click" }, nodes[1]);
});
}, styleEditorWin);
});
}
};
function checkStyleEditorForSheetAndLine(aStyleSheet, aLine, aCallback)
{
let editor = null;
let performLineCheck = {
name: "source editor load",
validatorFn: function()
{
return editor.sourceEditor;
},
successFn: function()
{
is(editor.sourceEditor.getCaretPosition().line, aLine,
"correct line is selected");
is(SEC.selectedStyleSheetIndex, editor.styleSheetIndex,
"correct stylesheet is selected in the editor");
executeSoon(aCallback);
},
failureFn: aCallback,
};
waitForSuccess({
name: "editor for stylesheet",
validatorFn: function()
{
for (let item of SEC.editors) {
if (item.styleSheet == aStyleSheet) {
editor = item;
return true;
}
}
return false;
},
successFn: function()
{
waitForSuccess(performLineCheck);
},
failureFn: finishTest,
});
}