/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; requestLongerTimeout(2); // Tests the Filter Editor Widget's label-dragging const { CSSFilterEditorWidget, } = require("resource://devtools/client/shared/widgets/FilterWidget.js"); const FAST_VALUE_MULTIPLIER = 10; const SLOW_VALUE_MULTIPLIER = 0.1; const DEFAULT_VALUE_MULTIPLIER = 1; const GRAYSCALE_MAX = 100, GRAYSCALE_MIN = 0; const TEST_URI = CHROME_URL_ROOT + "doc_filter-editor-01.html"; add_task(async function () { const { doc } = await createHost("bottom", TEST_URI); const container = doc.querySelector("#filter-container"); const widget = new CSSFilterEditorWidget( container, "grayscale(0%) url(test.svg)" ); const filters = widget.el.querySelector("#filters"); const grayscale = filters.children[0]; const url = filters.children[1]; info("Test label-dragging on number-type filters without modifiers"); widget._mouseDown({ target: grayscale.querySelector("label"), pageX: 0, altKey: false, shiftKey: false, }); widget._mouseMove({ pageX: 12, altKey: false, shiftKey: false, }); let expected = DEFAULT_VALUE_MULTIPLIER * 12; is( widget.getValueAt(0), `${expected}%`, "Should update value correctly without modifiers" ); info("Test label-dragging on number-type filters with alt"); widget._mouseMove({ // 20 - 12 = 8 pageX: 20, altKey: true, shiftKey: false, }); expected = expected + SLOW_VALUE_MULTIPLIER * 8; is( widget.getValueAt(0), `${expected}%`, "Should update value correctly with alt key" ); info("Test label-dragging on number-type filters with shift"); widget._mouseMove({ // 25 - 20 = 5 pageX: 25, altKey: false, shiftKey: true, }); expected = expected + FAST_VALUE_MULTIPLIER * 5; is( widget.getValueAt(0), `${expected}%`, "Should update value correctly with shift key" ); info("Test releasing mouse and dragging again"); widget._mouseUp(); widget._mouseDown({ target: grayscale.querySelector("label"), pageX: 0, altKey: false, shiftKey: false, }); widget._mouseMove({ pageX: 5, altKey: false, shiftKey: false, }); expected = expected + DEFAULT_VALUE_MULTIPLIER * 5; is( widget.getValueAt(0), `${expected}%`, "Should reset multiplier to default" ); info("Test value ranges"); widget._mouseMove({ // 30 - 25 = 5 pageX: 30, altKey: false, shiftKey: true, }); expected = GRAYSCALE_MAX; is( widget.getValueAt(0), `${expected}%`, "Shouldn't allow values higher than max" ); widget._mouseMove({ pageX: -11, altKey: false, shiftKey: true, }); expected = GRAYSCALE_MIN; is( widget.getValueAt(0), `${expected}%`, "Shouldn't allow values less than min" ); widget._mouseUp(); info("Test label-dragging on string-type filters"); widget._mouseDown({ target: url.querySelector("label"), pageX: 0, altKey: false, shiftKey: false, }); ok( !widget.isDraggingLabel, "Label-dragging should not work for string-type filters" ); widget._mouseMove({ pageX: -11, altKey: false, shiftKey: true, }); is( widget.getValueAt(1), "test.svg", "Label-dragging on string-type filters shouldn't affect their value" ); widget.destroy(); });