Code coverage report for src/directive.js

Statements: 100% (18 / 18)      Branches: 100% (6 / 6)      Functions: 100% (6 / 6)      Lines: 100% (17 / 17)      Ignored: none     

All files » src/ » directive.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36    1 5           5 10   5 10 10   5 5           1 20 20 20 2 2 1     1      
'use strict';
 
module.exports = function () {
  return {
    require: 'ngModel',
    scope: {
      bits: '@'
    },
    link: function (scope, element, attributes, ngModelController) {
      ngModelController.$validators.integer = function (modelValue, viewValue) {
        return isInteger(viewValue);
      };
      ngModelController.$validators.integerBits = function (modelValue, viewValue) {
        var bits = parseInt(scope.bits);
        return isInteger(viewValue, modelValue, bits);
      };
      scope.$watch('bits', function () {
        ngModelController.$validate();
      });
    }
  };
};
 
function isInteger (string, number, bits) {
  var isInt = (/^\-?\d+$/).test(string);
  var hasBits = !isNaN(bits);
  if (!hasBits || !isInt) return isInt;
  var spread = Math.pow(2, bits - 1);
  if (number < 0) {
    return number > (-1 * spread);
  }
  else {
    return number < (spread - 1);
  }
}