react-numeric-input
Version:
Number input component that can replace the native number input which is not yet very well supported and where it is, it does not have the same appearance across the browsers. Additionally this component offers more flexible options and can be used for an
167 lines (147 loc) • 5.98 kB
JavaScript
const lib = require("../lib");
const PAUSE = 100;
exports.before = (browser, done) => {
lib.focusWindow(browser);
lib.openHTML(browser, done);
};
exports.after = browser => {
browser.pause(PAUSE);
browser.end();
};
exports.beforeEach = browser => {
browser.pause(PAUSE);
lib.clearHTML(browser);
};
function expectComputedStyle(browser, selector, propName, propValue) {
browser.element('css selector', selector, function(result) {
let id = result.value.ELEMENT;
browser.elementIdCssProperty(id, "font-style", result2 => {
if (result2.value !== propValue) {
throw `Expected the ${propName} style property of ${selector} to equal ${propValue} but was ${result2.value}`;
}
});
});
}
exports['can set wrapper styles'] = browser => {
lib.createNumericInput(browser, {
value: 10,
style: {
wrap: {
fontStyle: 'italic'
}
}
});
expectComputedStyle(browser, '.react-numeric-input', "font-style", "italic");
};
exports['can set input styles'] = browser => {
lib.createNumericInput(browser, {
value: 10,
style: {
input: {
fontStyle: 'italic'
}
}
});
expectComputedStyle(browser, '.react-numeric-input input', "font-style", 'italic');
};
exports['can set btnUp styles'] = browser => {
lib.createNumericInput(browser, {
style: {
btnUp: {
fontStyle: 'italic'
}
}
});
expectComputedStyle(browser, '.react-numeric-input b:first-of-type', "font-style", 'italic');
};
exports['can set btnDown styles'] = browser => {
lib.createNumericInput(browser, {
style: {
btnDown: {
fontStyle: 'italic'
}
}
});
expectComputedStyle(browser, '.react-numeric-input b:last-of-type', "font-style", 'italic');
};
exports['can set arrowDown styles'] = browser => {
lib.createNumericInput(browser, {
style: {
arrowDown: {
fontStyle: 'italic'
}
}
});
expectComputedStyle(browser, '.react-numeric-input b:last-of-type i', "font-style", 'italic');
};
exports['can set arrowUp styles'] = browser => {
lib.createNumericInput(browser, {
style: {
arrowUp: {
fontStyle: 'italic'
}
}
});
expectComputedStyle(browser, '.react-numeric-input b:first-of-type i', "font-style", 'italic');
};
exports['can set btn:state styles'] = browser => {
const colorNormal = 'rgb(200, 200, 200)';
const colorHover = 'rgb(255, 50, 50)';
const colorActive = 'rgb(50, 255, 50)';
lib.createNumericInput(browser, {
style: {
'btn' : { background: colorNormal },
'btn:hover' : { background: colorHover },
'btn:active' : { background: colorActive },
'btn:disabled': { background: 'rgb(4, 5, 6)' }
}
});
// normal
browser.pause(PAUSE);
expectComputedStyle(browser, '.react-numeric-input b:first-of-type', "background-color", colorNormal);
expectComputedStyle(browser, '.react-numeric-input b:last-of-type', "background-color", colorNormal );
// :hover
browser.pause(PAUSE);
browser.execute(`$("react-numeric-input b:first-of-type").trigger("mouseenter")`)
expectComputedStyle(browser, '.react-numeric-input b:first-of-type', "background-color", colorHover);
expectComputedStyle(browser, '.react-numeric-input b:last-of-type', "background-color", colorNormal);
browser.pause(PAUSE);
browser.execute(`$("react-numeric-input b:last-of-type").trigger("mouseenter")`)
expectComputedStyle(browser, '.react-numeric-input b:first-of-type', "background-color", colorHover);
expectComputedStyle(browser, '.react-numeric-input b:last-of-type', "background-color", colorHover );
// :active
browser.pause(PAUSE);
browser.execute(`$("react-numeric-input b:first-of-type").trigger("mouseDown")`)
expectComputedStyle(browser, '.react-numeric-input b:first-of-type', "background-color", colorActive);
expectComputedStyle(browser, '.react-numeric-input b:last-of-type', "background-color", colorNormal );
browser.pause(PAUSE);
browser.execute(`$("react-numeric-input b:last-of-type").trigger("mouseDown")`)
expectComputedStyle(browser, '.react-numeric-input b:first-of-type', "background-color", colorActive);
expectComputedStyle(browser, '.react-numeric-input b:last-of-type', "background-color", colorActive );
// TestUtils.Simulate.mouseDown(btnUpNode);
// expect(btnUpNode.style.color).toEqual('rgb(3, 4, 5)');
// TestUtils.Simulate.mouseDown(btnDownNode);
// expect(btnDownNode.style.color).toEqual('rgb(3, 4, 5)');
// // :disabled
// widget = TestUtils.renderIntoDocument(
// <NumericInput disabled style={{
// 'btn' : { color: 'rgb(1, 2, 3)'},
// 'btn:hover' : { color: 'rgb(2, 3, 4)'},
// 'btn:active' : { color: 'rgb(3, 4, 5)'},
// 'btn:disabled': { color: 'rgb(4, 5, 6)'}
// }} mobile={false}/>
// );
// widgetNode = ReactDOM.findDOMNode(widget);
// btnUpNode = widgetNode.firstChild.nextElementSibling;
// btnDownNode = widgetNode.lastChild;
// expect(btnUpNode.style.color).toEqual('rgb(4, 5, 6)');
// expect(btnDownNode.style.color).toEqual('rgb(4, 5, 6)');
// TestUtils.Simulate.mouseEnter(btnUpNode);
// expect(btnUpNode.style.color).toEqual('rgb(4, 5, 6)');
// TestUtils.Simulate.mouseEnter(btnDownNode);
// expect(btnDownNode.style.color).toEqual('rgb(4, 5, 6)');
// TestUtils.Simulate.mouseDown(btnUpNode);
// expect(btnUpNode.style.color).toEqual('rgb(4, 5, 6)');
// TestUtils.Simulate.mouseDown(btnDownNode);
// expect(btnDownNode.style.color).toEqual('rgb(4, 5, 6)');
};