michael@0: /* vim: set ft=javascript ts=2 et sw=2 tw=80: */ michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: // Test that increasing/decreasing values in rule view using michael@0: // arrow keys works correctly. michael@0: michael@0: let test = asyncTest(function*() { michael@0: yield addTab("data:text/html,sample document for bug 722691"); michael@0: createDocument(); michael@0: let {toolbox, inspector, view} = yield openRuleView(); michael@0: michael@0: yield selectNode("#test", inspector); michael@0: michael@0: yield testMarginIncrements(view); michael@0: yield testVariousUnitIncrements(view); michael@0: yield testHexIncrements(view); michael@0: yield testRgbIncrements(view); michael@0: yield testShorthandIncrements(view); michael@0: yield testOddCases(view); michael@0: }); michael@0: michael@0: function createDocument() { michael@0: content.document.body.innerHTML = '
'+ michael@0: '
'; michael@0: } michael@0: michael@0: function* testMarginIncrements(view) { michael@0: info("Testing keyboard increments on the margin property"); michael@0: michael@0: let idRuleEditor = view.element.children[0]._ruleEditor; michael@0: let marginPropEditor = idRuleEditor.rule.textProps[0].editor; michael@0: michael@0: yield runIncrementTest(marginPropEditor, view, { michael@0: 1: {alt: true, start: "0px", end: "0.1px", selectAll: true}, michael@0: 2: {start: "0px", end: "1px", selectAll: true}, michael@0: 3: {shift: true, start: "0px", end: "10px", selectAll: true}, michael@0: 4: {down: true, alt: true, start: "0.1px", end: "0px", selectAll: true}, michael@0: 5: {down: true, start: "0px", end: "-1px", selectAll: true}, michael@0: 6: {down: true, shift: true, start: "0px", end: "-10px", selectAll: true}, michael@0: 7: {pageUp: true, shift: true, start: "0px", end: "100px", selectAll: true}, michael@0: 8: {pageDown: true, shift: true, start: "0px", end: "-100px", selectAll: true} michael@0: }); michael@0: } michael@0: michael@0: function* testVariousUnitIncrements(view) { michael@0: info("Testing keyboard increments on values with various units"); michael@0: michael@0: let idRuleEditor = view.element.children[0]._ruleEditor; michael@0: let paddingPropEditor = idRuleEditor.rule.textProps[1].editor; michael@0: michael@0: yield runIncrementTest(paddingPropEditor, view, { michael@0: 1: {start: "0px", end: "1px", selectAll: true}, michael@0: 2: {start: "0pt", end: "1pt", selectAll: true}, michael@0: 3: {start: "0pc", end: "1pc", selectAll: true}, michael@0: 4: {start: "0em", end: "1em", selectAll: true}, michael@0: 5: {start: "0%", end: "1%", selectAll: true}, michael@0: 6: {start: "0in", end: "1in", selectAll: true}, michael@0: 7: {start: "0cm", end: "1cm", selectAll: true}, michael@0: 8: {start: "0mm", end: "1mm", selectAll: true}, michael@0: 9: {start: "0ex", end: "1ex", selectAll: true} michael@0: }); michael@0: }; michael@0: michael@0: function* testHexIncrements(view) { michael@0: info("Testing keyboard increments with hex colors"); michael@0: michael@0: let idRuleEditor = view.element.children[0]._ruleEditor; michael@0: let hexColorPropEditor = idRuleEditor.rule.textProps[2].editor; michael@0: michael@0: yield runIncrementTest(hexColorPropEditor, view, { michael@0: 1: {start: "#CCCCCC", end: "#CDCDCD", selectAll: true}, michael@0: 2: {shift: true, start: "#CCCCCC", end: "#DCDCDC", selectAll: true}, michael@0: 3: {start: "#CCCCCC", end: "#CDCCCC", selection: [1,3]}, michael@0: 4: {shift: true, start: "#CCCCCC", end: "#DCCCCC", selection: [1,3]}, michael@0: 5: {start: "#FFFFFF", end: "#FFFFFF", selectAll: true}, michael@0: 6: {down: true, shift: true, start: "#000000", end: "#000000", selectAll: true} michael@0: }); michael@0: }; michael@0: michael@0: function* testRgbIncrements(view) { michael@0: info("Testing keyboard increments with rgb colors"); michael@0: michael@0: let idRuleEditor = view.element.children[0]._ruleEditor; michael@0: let rgbColorPropEditor = idRuleEditor.rule.textProps[3].editor; michael@0: michael@0: yield runIncrementTest(rgbColorPropEditor, view, { michael@0: 1: {start: "rgb(0,0,0)", end: "rgb(0,1,0)", selection: [6,7]}, michael@0: 2: {shift: true, start: "rgb(0,0,0)", end: "rgb(0,10,0)", selection: [6,7]}, michael@0: 3: {start: "rgb(0,255,0)", end: "rgb(0,255,0)", selection: [6,9]}, michael@0: 4: {shift: true, start: "rgb(0,250,0)", end: "rgb(0,255,0)", selection: [6,9]}, michael@0: 5: {down: true, start: "rgb(0,0,0)", end: "rgb(0,0,0)", selection: [6,7]}, michael@0: 6: {down: true, shift: true, start: "rgb(0,5,0)", end: "rgb(0,0,0)", selection: [6,7]} michael@0: }); michael@0: }; michael@0: michael@0: function* testShorthandIncrements(view) { michael@0: info("Testing keyboard increments within shorthand values"); michael@0: michael@0: let idRuleEditor = view.element.children[0]._ruleEditor; michael@0: let paddingPropEditor = idRuleEditor.rule.textProps[1].editor; michael@0: michael@0: yield runIncrementTest(paddingPropEditor, view, { michael@0: 1: {start: "0px 0px 0px 0px", end: "0px 1px 0px 0px", selection: [4,7]}, michael@0: 2: {shift: true, start: "0px 0px 0px 0px", end: "0px 10px 0px 0px", selection: [4,7]}, michael@0: 3: {start: "0px 0px 0px 0px", end: "1px 0px 0px 0px", selectAll: true}, michael@0: 4: {shift: true, start: "0px 0px 0px 0px", end: "10px 0px 0px 0px", selectAll: true}, michael@0: 5: {down: true, start: "0px 0px 0px 0px", end: "0px 0px -1px 0px", selection: [8,11]}, michael@0: 6: {down: true, shift: true, start: "0px 0px 0px 0px", end: "-10px 0px 0px 0px", selectAll: true} michael@0: }); michael@0: }; michael@0: michael@0: function* testOddCases(view) { michael@0: info("Testing some more odd cases"); michael@0: michael@0: let idRuleEditor = view.element.children[0]._ruleEditor; michael@0: let marginPropEditor = idRuleEditor.rule.textProps[0].editor; michael@0: michael@0: yield runIncrementTest(marginPropEditor, view, { michael@0: 1: {start: "98.7%", end: "99.7%", selection: [3,3]}, michael@0: 2: {alt: true, start: "98.7%", end: "98.8%", selection: [3,3]}, michael@0: 3: {start: "0", end: "1"}, michael@0: 4: {down: true, start: "0", end: "-1"}, michael@0: 5: {start: "'a=-1'", end: "'a=0'", selection: [4,4]}, michael@0: 6: {start: "0 -1px", end: "0 0px", selection: [2,2]}, michael@0: 7: {start: "url(-1)", end: "url(-1)", selection: [4,4]}, michael@0: 8: {start: "url('test1.1.png')", end: "url('test1.2.png')", selection: [11,11]}, michael@0: 9: {start: "url('test1.png')", end: "url('test2.png')", selection: [9,9]}, michael@0: 10: {shift: true, start: "url('test1.1.png')", end: "url('test11.1.png')", selection: [9,9]}, michael@0: 11: {down: true, start: "url('test-1.png')", end: "url('test-2.png')", selection: [9,11]}, michael@0: 12: {start: "url('test1.1.png')", end: "url('test1.2.png')", selection: [11,12]}, michael@0: 13: {down: true, alt: true, start: "url('test-0.png')", end: "url('test--0.1.png')", selection: [10,11]}, michael@0: 14: {alt: true, start: "url('test--0.1.png')", end: "url('test-0.png')", selection: [10,14]} michael@0: }); michael@0: }; michael@0: michael@0: function* runIncrementTest(propertyEditor, view, tests) { michael@0: let editor = yield focusEditableField(propertyEditor.valueSpan); michael@0: michael@0: for(let test in tests) { michael@0: yield testIncrement(editor, tests[test], view); michael@0: } michael@0: michael@0: // Once properties have been set, wait for the inspector to update michael@0: yield view.inspector.once("inspector-updated"); michael@0: } michael@0: michael@0: function* testIncrement(editor, options, view) { michael@0: editor.input.value = options.start; michael@0: let input = editor.input; michael@0: michael@0: if (options.selectAll) { michael@0: input.select(); michael@0: } else if (options.selection) { michael@0: input.setSelectionRange(options.selection[0], options.selection[1]); michael@0: } michael@0: michael@0: is(input.value, options.start, "Value initialized at " + options.start); michael@0: michael@0: let onKeyUp = once(input, "keyup"); michael@0: michael@0: let key; michael@0: key = options.down ? "VK_DOWN" : "VK_UP"; michael@0: key = options.pageDown ? "VK_PAGE_DOWN" : options.pageUp ? "VK_PAGE_UP" : key; michael@0: EventUtils.synthesizeKey(key, {altKey: options.alt, shiftKey: options.shift}, view.doc.defaultView); michael@0: michael@0: yield onKeyUp; michael@0: input = editor.input; michael@0: is(input.value, options.end, "Value changed to " + options.end); michael@0: }