UNPKG

angular-mask

Version:
317 lines (264 loc) 12 kB
var StringMask = require('string-mask'); describe('ui.utils.masks.number', function() { beforeEach(function() { browser.get('/demo'); }); it('should load the demo page', function() { expect(browser.getTitle()).toEqual('Angular Mask Demo'); }); describe('ui-number-mask:', function() { it('should format number with two decimal places (default)', function() { var formatterView = new StringMask('#.##0,00', {reverse: true}), formatterModel = new StringMask('###0.00', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWithDefaultDecimals')), value = element(by.binding('numberWithDefaultDecimals')); for (var i = 1; i <= 9; i++) { input.sendKeys(i); numberToFormat += i; formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } for (var i = 9; i >= 1; i--) { input.sendKeys(protractor.Key.BACK_SPACE); numberToFormat = numberToFormat.slice(0, -1); if(!numberToFormat) { numberToFormat = '0'; }else{ formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); } }); it('should format number with two decimal places (parameter)', function() { var formatterView = new StringMask('#.##0,00', {reverse: true}), formatterModel = new StringMask('###0.00', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWith2Decimals')), value = element(by.binding('numberWith2Decimals')); expect(input.getAttribute('value')).toEqual('-1.234,18'); input.clear(); for (var i = 1; i <= 5; i++) { input.sendKeys(i); numberToFormat += i; formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } for (var i = 5; i >= 1; i--) { input.sendKeys(protractor.Key.BACK_SPACE); numberToFormat = numberToFormat.slice(0, -1); if(!numberToFormat) { numberToFormat = '0'; }else{ formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); } }); it('should accept negative numbers when the ui-negative attribute is present', function() { var formatterView = new StringMask('#.##0,00', {reverse: true}), formatterModel = new StringMask('###0.00', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWith2Decimals')), value = element(by.binding('numberWith2Decimals')); expect(input.getAttribute('value')).toEqual('-1.234,18'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('1.234,18'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('-1.234,18'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('1.234,18'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('-1.234,18'); input.sendKeys(9); expect(input.getAttribute('value')).toEqual('-12.341,89'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('-1.234,18'); input.sendKeys('-'); input.sendKeys(9); expect(input.getAttribute('value')).toEqual('12.341,89'); }); it('should not allow -0 parsing it to 0', function() { var formatterView = new StringMask('#.##0,00', {reverse: true}), formatterModel = new StringMask('###0.00', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWith2Decimals')), value = element(by.binding('numberWith2Decimals')); expect(input.getAttribute('value')).toEqual('-1.234,18'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('-123,41'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('-12,34'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('-1,23'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('-0,12'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('-0,01'); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('0,00'); input.sendKeys(1); expect(input.getAttribute('value')).toEqual('0,01'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('-0,01'); input.sendKeys(2); expect(input.getAttribute('value')).toEqual('-0,12'); input.sendKeys(3); expect(input.getAttribute('value')).toEqual('-1,23'); input.sendKeys(4); expect(input.getAttribute('value')).toEqual('-12,34'); input.sendKeys(1); expect(input.getAttribute('value')).toEqual('-123,41'); input.sendKeys(protractor.Key.BACK_SPACE); input.sendKeys(protractor.Key.BACK_SPACE); input.sendKeys(protractor.Key.BACK_SPACE); input.sendKeys(protractor.Key.BACK_SPACE); input.sendKeys(protractor.Key.BACK_SPACE); expect(input.getAttribute('value')).toEqual('0,00'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('0,00'); }); it('should not accept negative numbers when the ui-negative attribute is not present', function() { var formatterView = new StringMask('#.##0,000', {reverse: true}), formatterModel = new StringMask('###0.000', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWith3Decimals')), value = element(by.binding('numberWith3Decimals')); input.sendKeys('1234.178'); expect(input.getAttribute('value')).toEqual('1.234,178'); input.sendKeys('-'); expect(input.getAttribute('value')).toEqual('1.234,178'); }); it('should format number with three decimal places (parameter)', function() { var formatterView = new StringMask('#.##0,000', {reverse: true}), formatterModel = new StringMask('###0.000', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWith3Decimals')), value = element(by.binding('numberWith3Decimals')); for (var i = 1; i <= 5; i++) { input.sendKeys(i); numberToFormat += i; formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } for (var i = 5; i >= 1; i--) { input.sendKeys(protractor.Key.BACK_SPACE); numberToFormat = numberToFormat.slice(0, -1); if(!numberToFormat) { numberToFormat = '0'; }else{ formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); } }); it('should format number without decimal places (parameter)', function() { var formatterView = new StringMask('#.##0', {reverse: true}), formatterModel = new StringMask('###0', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWith0Decimals')), value = element(by.binding('numberWith0Decimals')); for (var i = 1; i <= 5; i++) { input.sendKeys(i); numberToFormat += i; formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } for (var i = 5; i >= 1; i--) { input.sendKeys(protractor.Key.BACK_SPACE); numberToFormat = numberToFormat.slice(0, -1); if(!numberToFormat) { formatedNumberAsString = ''; formatedNumberAsNumber = ''; }else { formatedNumberAsString = formatterView.apply(numberToFormat); formatedNumberAsNumber = formatterModel.apply(numberToFormat); } expect(input.getAttribute('value')).toEqual(formatedNumberAsString); expect(value.getText()).toEqual(formatedNumberAsNumber); } }); it('should format number without thousands delimiters', function() { var formatterView = new StringMask('###0,00', {reverse: true}), formatterModel = new StringMask('###0.00', {reverse: true}), numberToFormat = '', formatedNumberAsString, formatedNumberAsNumber; var input = element(by.model('numberWithoutGrupoSep')), value = element(by.binding('numberWithoutGrupoSep')); for (var i = 1; i <= 9; i++) { input.sendKeys(i); numberToFormat += i; formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } for (var i = 9; i >= 1; i--) { input.sendKeys(protractor.Key.BACK_SPACE); numberToFormat = numberToFormat.slice(0, -1); if(!numberToFormat) { numberToFormat = '0'; }else{ formatedNumberAsNumber = formatterModel.apply(numberToFormat); expect(value.getText()).toEqual(formatedNumberAsNumber); } formatedNumberAsString = formatterView.apply(numberToFormat); expect(input.getAttribute('value')).toEqual(formatedNumberAsString); } }); it('should accept 0 in all configurations', function() { var input = element(by.model('numberWithDefaultDecimals')), value = element(by.binding('numberWithDefaultDecimals')); input.clear(); input.sendKeys(0); expect(input.getAttribute('value')).toEqual('0,00'); expect(value.getText()).toEqual('0'); input = element(by.model('numberWith2Decimals')); value = element(by.binding('numberWith2Decimals')); input.clear(); input.sendKeys(0); expect(input.getAttribute('value')).toEqual('0,00'); expect(value.getText()).toEqual('0'); input = element(by.model('numberWith3Decimals')); value = element(by.binding('numberWith3Decimals')); input.clear(); input.sendKeys(0); expect(input.getAttribute('value')).toEqual('0,000'); expect(value.getText()).toEqual('0'); input = element(by.model('numberWith0Decimals')); value = element(by.binding('numberWith0Decimals')); input.clear(); input.sendKeys(0); expect(input.getAttribute('value')).toEqual('0'); expect(value.getText()).toEqual('0'); }); it('should reformat number when decimals config changes', function() { var input = element(by.model('numberWithDynamicDecimals')), value = element(by.binding('numberWithDynamicDecimals')), decimalsInput = element(by.model('decimals')); input.sendKeys('123'); expect(input.getAttribute('value')).toEqual('1,23'); expect(value.getText()).toEqual('1.23'); decimalsInput.sendKeys('3'); expect(input.getAttribute('value')).toEqual('0,123'); expect(value.getText()).toEqual('0.123'); decimalsInput.clear(); decimalsInput.sendKeys('0'); expect(input.getAttribute('value')).toEqual('123'); expect(value.getText()).toEqual('123'); }); }); });