diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 87afc32844ca..20fd4c94f53c 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -519,10 +519,9 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); - ctrl.$parsers.push(function(value) { var empty = ctrl.$isEmpty(value); - if (empty || NUMBER_REGEXP.test(value)) { + if (empty || NUMBER_REGEXP.test(value)) { ctrl.$setValidity('number', true); return value === '' ? null : (empty ? value : parseFloat(value)); } else { @@ -581,9 +580,14 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); - + var testedValid; var urlValidator = function(value) { - if (ctrl.$isEmpty(value) || URL_REGEXP.test(value)) { + if (isArray(value)) { + testedValid = value.every(function(val){return URL_REGEXP.test(val)}) + } else { + testedValid = URL_REGEXP.test(value) + } + if (ctrl.$isEmpty(value) || testedValid) { ctrl.$setValidity('url', true); return value; } else { @@ -600,7 +604,13 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); var emailValidator = function(value) { - if (ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value)) { + var testedValid; + if (isArray(value)) { + testedValid = value.every(function(val){return EMAIL_REGEXP.test(val)}) + } else { + testedValid = EMAIL_REGEXP.test(value) + } + if (ctrl.$isEmpty(value) || testedValid) { ctrl.$setValidity('email', true); return value; } else { diff --git a/test/ng/directive/inputSpec.js b/test/ng/directive/inputSpec.js index c94eb9b898e1..607149c4d897 100644 --- a/test/ng/directive/inputSpec.js +++ b/test/ng/directive/inputSpec.js @@ -726,50 +726,138 @@ describe('input', function() { }); describe('email', function() { + describe('should validate e-mail', function(){ + it('when used simply', function() { + compileInput(''); + var widget = scope.form.alias; - it('should validate e-mail', function() { - compileInput(''); + changeInputValueTo('vojta@google.com'); + expect(scope.email).toBe('vojta@google.com'); + expect(inputElm).toBeValid(); + expect(widget.$error.email).toBe(false); - var widget = scope.form.alias; - changeInputValueTo('vojta@google.com'); + changeInputValueTo('invalid@'); + expect(scope.email).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.email).toBeTruthy(); + }); + it('when used with ngList (default separator)', function() { + compileInput(''); + var widget = scope.form.alias; - expect(scope.email).toBe('vojta@google.com'); - expect(inputElm).toBeValid(); - expect(widget.$error.email).toBe(false); + changeInputValueTo('vojta@google.com'); + expect(scope.email).toEqual(['vojta@google.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.email).toBe(false); - changeInputValueTo('invalid@'); - expect(scope.email).toBeUndefined(); - expect(inputElm).toBeInvalid(); - expect(widget.$error.email).toBeTruthy(); - }); + changeInputValueTo('vojta@google.com, igor.minar@gmail.com'); + expect(scope.email).toEqual(['vojta@google.com', 'igor.minar@gmail.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.email).toBe(false); + + changeInputValueTo('invalid@'); + expect(scope.email).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.email).toBeTruthy(); + }); + it('when used with ngList (custom separator)', function() { + compileInput(''); + var widget = scope.form.alias; + changeInputValueTo('vojta@google.com'); + expect(scope.email).toEqual(['vojta@google.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.email).toBe(false); + + changeInputValueTo('vojta@google.com;igor.minar@gmail.com'); + expect(scope.email).toEqual(['vojta@google.com', 'igor.minar@gmail.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.email).toBe(false); + + changeInputValueTo('vojta@google.com, dorosh@google.com'); + expect(scope.email).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.email).toBeTruthy(); + + + changeInputValueTo('invalid@'); + expect(scope.email).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.email).toBeTruthy(); + }); + }); - describe('EMAIL_REGEXP', function() { + describe('EMAIL_REGEXP', function(){ it('should validate email', function() { expect(EMAIL_REGEXP.test('a@b.com')).toBe(true); expect(EMAIL_REGEXP.test('a@b.museum')).toBe(true); expect(EMAIL_REGEXP.test('a@B.c')).toBe(false); }); }); + }); describe('url', function() { + describe('should validate url', function(){ + it('when used simply', function() { + compileInput(''); + var widget = scope.form.alias; - it('should validate url', function() { - compileInput(''); - var widget = scope.form.alias; + changeInputValueTo('http://www.something.com'); + expect(scope.url).toBe('http://www.something.com'); + expect(inputElm).toBeValid(); + expect(widget.$error.url).toBe(false); - changeInputValueTo('http://www.something.com'); - expect(scope.url).toBe('http://www.something.com'); - expect(inputElm).toBeValid(); - expect(widget.$error.url).toBe(false); + changeInputValueTo('invalid.com'); + expect(scope.url).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.url).toBeTruthy(); + }); + it('when used with ngList (default separator)', function() { + compileInput(''); - changeInputValueTo('invalid.com'); - expect(scope.url).toBeUndefined(); - expect(inputElm).toBeInvalid(); - expect(widget.$error.url).toBeTruthy(); + var widget = scope.form.alias; + changeInputValueTo('http://www.something.com'); + expect(scope.url).toEqual(['http://www.something.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.url).toBe(false); + + changeInputValueTo('http://www.something.com, http://www.somethingelse.com'); + expect(scope.url).toEqual(['http://www.something.com', 'http://www.somethingelse.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.url).toBe(false); + + changeInputValueTo('http:'); + expect(scope.url).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.url).toBeTruthy(); + }); + it('when used with ngList (custom separator)', function() { + compileInput(''); + + var widget = scope.form.alias; + changeInputValueTo('http://www.something.com'); + expect(scope.url).toEqual(['http://www.something.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.url).toBe(false); + + changeInputValueTo('http://www.something.com;http://www.somethingelse.com'); + expect(scope.url).toEqual(['http://www.something.com', 'http://www.somethingelse.com']); + expect(inputElm).toBeValid(); + expect(widget.$error.url).toBe(false); + + changeInputValueTo('http://www.something.com, http://www.somethingelse.com'); + expect(scope.url).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.url).toBeTruthy(); + + changeInputValueTo('http:'); + expect(scope.url).toBeUndefined(); + expect(inputElm).toBeInvalid(); + expect(widget.$error.url).toBeTruthy(); + }); });