refactor(core): ensure CSS parser uses ParseSourceSpan to track ast locations

This commit also fixes up any remaining TODO comments.

Closes #9285
This commit is contained in:
Matias Niemelä
2016-06-16 13:02:18 -07:00
parent 77dc6ef411
commit 5c9f871b21
5 changed files with 594 additions and 362 deletions

View File

@ -7,10 +7,10 @@
*/
import {afterEach, beforeEach, ddescribe, describe, expect, iit, it, xit} from '../../core/testing/testing_internal';
import {CssLexer} from '../src/css_lexer';
import {BlockType, CssAst, CssAstVisitor, CssAtRulePredicateAst, CssBlockAst, CssBlockDefinitionRuleAst, CssBlockRuleAst, CssDefinitionAst, CssInlineRuleAst, CssKeyframeDefinitionAst, CssKeyframeRuleAst, CssMediaQueryRuleAst, CssParseError, CssParser, CssPseudoSelectorAst, CssRuleAst, CssSelectorAst, CssSelectorRuleAst, CssSimpleSelectorAst, CssStyleSheetAst, CssStyleValueAst, CssStylesBlockAst, CssToken, CssUnknownRuleAst, CssUnknownTokenListAst} from '../src/css_parser';
import {CssAst, CssAstVisitor, CssAtRulePredicateAst, CssBlockAst, CssBlockDefinitionRuleAst, CssBlockRuleAst, CssDefinitionAst, CssInlineRuleAst, CssKeyframeDefinitionAst, CssKeyframeRuleAst, CssMediaQueryRuleAst, CssPseudoSelectorAst, CssRuleAst, CssSelectorAst, CssSelectorRuleAst, CssSimpleSelectorAst, CssStyleSheetAst, CssStyleValueAst, CssStylesBlockAst, CssUnknownRuleAst, CssUnknownTokenListAst} from '../src/css_ast';
import {BlockType, CssParseError, CssParser, CssToken} from '../src/css_parser';
import {BaseException} from '../src/facade/exceptions';
import {NumberWrapper, StringWrapper, isPresent} from '../src/facade/lang';
import {isPresent} from '../src/facade/lang';
function _assertTokens(tokens: CssToken[], valuesArr: string[]): void {
expect(tokens.length).toEqual(valuesArr.length);
@ -115,10 +115,7 @@ function _getCaptureAst(capture: any[], index = 0): CssAst {
export function main() {
function parse(cssCode: string, ignoreErrors: boolean = false) {
var lexer = new CssLexer();
var scanner = lexer.scan(cssCode);
var parser = new CssParser(scanner, 'some-fake-file-name.css');
var output = parser.parse();
var output = new CssParser().parse(cssCode, 'some-fake-css-file.css');
var errors = output.errors;
if (errors.length > 0 && !ignoreErrors) {
throw new BaseException(errors.map((error: CssParseError) => error.msg).join(', '));
@ -127,7 +124,7 @@ export function main() {
}
describe('CSS parsing and visiting', () => {
var ast: any /** TODO #9100 */;
var ast: CssStyleSheetAst;
var context = {};
beforeEach(() => {