diff --git a/modules/angular2/src/compiler/html_lexer.ts b/modules/angular2/src/compiler/html_lexer.ts index e3a725ce9d..f410fbdb73 100644 --- a/modules/angular2/src/compiler/html_lexer.ts +++ b/modules/angular2/src/compiler/html_lexer.ts @@ -378,7 +378,9 @@ class _HtmlTokenizer { let savedPos = this._savePosition(); let lowercaseTagName; try { - this._attemptUntilFn(isNotWhitespace); + if (!isAsciiLetter(this.peek)) { + throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getLocation()); + } var nameStart = this.index; this._consumeTagOpenStart(start); lowercaseTagName = this.inputLowercase.substring(nameStart, this.index); diff --git a/modules/angular2/test/compiler/html_lexer_spec.ts b/modules/angular2/test/compiler/html_lexer_spec.ts index 5d3f741156..5e61887eef 100644 --- a/modules/angular2/test/compiler/html_lexer_spec.ts +++ b/modules/angular2/test/compiler/html_lexer_spec.ts @@ -174,8 +174,8 @@ export function main() { ]); }); - it('should allow whitespace', () => { - expect(tokenizeAndHumanizeParts('< test >')) + it('should allow whitespace after the tag name', () => { + expect(tokenizeAndHumanizeParts('')) .toEqual([ [HtmlTokenType.TAG_OPEN_START, null, 'test'], [HtmlTokenType.TAG_OPEN_END], @@ -438,6 +438,9 @@ export function main() { [HtmlTokenType.TAG_CLOSE, '

'], [HtmlTokenType.EOF, ''], ]); + + expect(tokenizeAndHumanizeParts('< a>')) + .toEqual([[HtmlTokenType.TEXT, '< a>'], [HtmlTokenType.EOF]]); }); // TODO(vicb): make the lexer aware of Angular expressions