Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Testing ruleview inplace-editor is not blurred when clicking on the ruleview
// container scrollbar.
const TEST_URI = `
<style type="text/css">
div.testclass {
color: black;
}
.a {
color: #aaa;
}
.b {
color: #bbb;
}
.c {
color: #ccc;
}
.d {
color: #ddd;
}
.e {
color: #eee;
}
.f {
color: #fff;
}
</style>
<div class="testclass a b c d e f">Styled Node</div>
`;
add_task(async function () {
info("Toolbox height should be small enough to force scrollbars to appear");
await new Promise(done => {
const options = { set: [["devtools.toolbox.footer.height", 200]] };
SpecialPowers.pushPrefEnv(options, done);
});
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
const { inspector, view } = await openRuleView();
await selectNode(".testclass", inspector);
info("Check we have an overflow on the ruleview container.");
const container = view.element;
const hasScrollbar = container.offsetHeight < container.scrollHeight;
ok(hasScrollbar, "The rule view container should have a vertical scrollbar.");
info("Focusing an existing selector name in the rule-view.");
const ruleEditor = getRuleViewRuleEditor(view, 1);
const editor = await focusEditableField(view, ruleEditor.selectorText);
is(
inplaceEditor(ruleEditor.selectorText),
editor,
"The selector editor is focused."
);
info("Click on the scrollbar element.");
await clickOnRuleviewScrollbar(view);
is(
editor.input,
view.styleDocument.activeElement,
"The editor input should still be focused."
);
info("Check a new value can still be committed in the editable field");
const newValue = ".testclass.a.b.c.d.e.f";
const onRuleViewChanged = once(view, "ruleview-changed");
info("Enter new value and commit.");
editor.input.value = newValue;
EventUtils.synthesizeKey("KEY_Enter");
await onRuleViewChanged;
ok(getRuleViewRule(view, newValue), "Rule with '" + newValue + " 'exists.");
});
async function clickOnRuleviewScrollbar(view) {
const container = view.element.parentNode;
const onScroll = once(container, "scroll");
const rect = container.getBoundingClientRect();
// click 5 pixels before the bottom-right corner should hit the scrollbar
EventUtils.synthesizeMouse(
container,
rect.width - 5,
rect.height - 5,
{},
view.styleWindow
);
await onScroll;
ok(true, "The rule view container scrolled after clicking on the scrollbar.");
}