Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: Source/core/css/parser/CSSTokenizerTest.cpp

Issue 962093002: CSS Tokenizer: Add an on-stack tokenizer scope (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/css/parser/CSSTokenizer.cpp ('k') | Source/core/css/parser/MediaConditionTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/css/parser/CSSTokenizer.h" 6 #include "core/css/parser/CSSTokenizer.h"
7 7
8 #include "core/css/parser/CSSParserTokenRange.h"
8 #include "core/css/parser/MediaQueryBlockWatcher.h" 9 #include "core/css/parser/MediaQueryBlockWatcher.h"
9 #include <gtest/gtest.h> 10 #include <gtest/gtest.h>
10 11
11 namespace blink { 12 namespace blink {
12 13
13 // This let's us see the line numbers of failing tests 14 // This let's us see the line numbers of failing tests
14 #define TEST_TOKENS(string, ...) { \ 15 #define TEST_TOKENS(string, ...) { \
15 String s = string; \ 16 String s = string; \
16 SCOPED_TRACE(s.ascii().data()); \ 17 SCOPED_TRACE(s.ascii().data()); \
17 testTokens(string, __VA_ARGS__); \ 18 testTokens(string, __VA_ARGS__); \
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 void testTokens(const String& string, const CSSParserToken& token1, const CSSPar serToken& token2 = CSSParserToken(EOFToken), const CSSParserToken& token3 = CSSP arserToken(EOFToken)) 59 void testTokens(const String& string, const CSSParserToken& token1, const CSSPar serToken& token2 = CSSParserToken(EOFToken), const CSSParserToken& token3 = CSSP arserToken(EOFToken))
59 { 60 {
60 Vector<CSSParserToken> expectedTokens; 61 Vector<CSSParserToken> expectedTokens;
61 expectedTokens.append(token1); 62 expectedTokens.append(token1);
62 if (token2.type() != EOFToken) { 63 if (token2.type() != EOFToken) {
63 expectedTokens.append(token2); 64 expectedTokens.append(token2);
64 if (token3.type() != EOFToken) 65 if (token3.type() != EOFToken)
65 expectedTokens.append(token3); 66 expectedTokens.append(token3);
66 } 67 }
67 68
68 Vector<CSSParserToken> actualTokens; 69 CSSParserTokenRange expected(expectedTokens);
69 CSSTokenizer::tokenize(string, actualTokens);
70 70
71 ASSERT_EQ(expectedTokens.size(), actualTokens.size()); 71 CSSTokenizer::Scope actualScope(string);
72 for (size_t i = 0; i < expectedTokens.size(); ++i) 72 CSSParserTokenRange actual = actualScope.tokenRange();
73 compareTokens(expectedTokens[i], actualTokens[i]); 73
74 while (!expected.atEnd() || !actual.atEnd())
75 compareTokens(expected.consume(), actual.consume());
74 } 76 }
75 77
76 static CSSParserToken ident(const String& string) { return CSSParserToken(IdentT oken, string); } 78 static CSSParserToken ident(const String& string) { return CSSParserToken(IdentT oken, string); }
77 static CSSParserToken atKeyword(const String& string) { return CSSParserToken(At KeywordToken, string); } 79 static CSSParserToken atKeyword(const String& string) { return CSSParserToken(At KeywordToken, string); }
78 static CSSParserToken string(const String& string) { return CSSParserToken(Strin gToken, string); } 80 static CSSParserToken string(const String& string) { return CSSParserToken(Strin gToken, string); }
79 static CSSParserToken function(const String& string) { return CSSParserToken(Fun ctionToken, string); } 81 static CSSParserToken function(const String& string) { return CSSParserToken(Fun ctionToken, string); }
80 static CSSParserToken url(const String& string) { return CSSParserToken(UrlToken , string); } 82 static CSSParserToken url(const String& string) { return CSSParserToken(UrlToken , string); }
81 static CSSParserToken hash(const String& string, HashTokenType type) { return CS SParserToken(type, string); } 83 static CSSParserToken hash(const String& string, HashTokenType type) { return CS SParserToken(type, string); }
82 static CSSParserToken delim(char c) { return CSSParserToken(DelimiterToken, c); } 84 static CSSParserToken delim(char c) { return CSSParserToken(DelimiterToken, c); }
83 static CSSParserToken unicodeRange(UChar32 start, UChar32 end) { return CSSParse rToken(UnicodeRangeToken, start, end); } 85 static CSSParserToken unicodeRange(UChar32 start, UChar32 end) { return CSSParse rToken(UnicodeRangeToken, start, end); }
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 {"((), (max-width: 900px)", 2, 1}, 450 {"((), (max-width: 900px)", 2, 1},
449 {"(foo(), (max-width: 900px)", 2, 1}, 451 {"(foo(), (max-width: 900px)", 2, 1},
450 {"[](()), (max-width: 900px)", 2, 0}, 452 {"[](()), (max-width: 900px)", 2, 0},
451 {"all an[isdfs bla())(i())]icalc(i)(()), (max-width: 400px)", 3, 0}, 453 {"all an[isdfs bla())(i())]icalc(i)(()), (max-width: 400px)", 3, 0},
452 {"all an[isdfs bla())(]icalc(i)(()), (max-width: 500px)", 4, 2}, 454 {"all an[isdfs bla())(]icalc(i)(()), (max-width: 500px)", 4, 2},
453 {"all an[isdfs bla())(]icalc(i)(())), (max-width: 600px)", 4, 1}, 455 {"all an[isdfs bla())(]icalc(i)(())), (max-width: 600px)", 4, 1},
454 {"all an[isdfs bla())(]icalc(i)(()))], (max-width: 800px)", 4, 0}, 456 {"all an[isdfs bla())(]icalc(i)(()))], (max-width: 800px)", 4, 0},
455 {0, 0, 0} // Do not remove the terminator line. 457 {0, 0, 0} // Do not remove the terminator line.
456 }; 458 };
457 for (int i = 0; testCases[i].input; ++i) { 459 for (int i = 0; testCases[i].input; ++i) {
458 Vector<CSSParserToken> tokens; 460 CSSTokenizer::Scope scope(testCases[i].input);
459 CSSTokenizer::tokenize(testCases[i].input, tokens); 461 CSSParserTokenRange range = scope.tokenRange();
460 MediaQueryBlockWatcher blockWatcher; 462 MediaQueryBlockWatcher blockWatcher;
461 463
462 unsigned maxLevel = 0; 464 unsigned maxLevel = 0;
463 unsigned level = 0; 465 unsigned level = 0;
464 for (size_t j = 0; j < tokens.size(); ++j) { 466 while (!range.atEnd()) {
465 blockWatcher.handleToken(tokens[j]); 467 blockWatcher.handleToken(range.consume());
466 level = blockWatcher.blockLevel(); 468 level = blockWatcher.blockLevel();
467 maxLevel = std::max(level, maxLevel); 469 maxLevel = std::max(level, maxLevel);
468 } 470 }
469 ASSERT_EQ(testCases[i].maxLevel, maxLevel); 471 ASSERT_EQ(testCases[i].maxLevel, maxLevel);
470 ASSERT_EQ(testCases[i].finalLevel, level); 472 ASSERT_EQ(testCases[i].finalLevel, level);
471 } 473 }
472 } 474 }
473 475
474 } // namespace 476 } // namespace
OLDNEW
« no previous file with comments | « Source/core/css/parser/CSSTokenizer.cpp ('k') | Source/core/css/parser/MediaConditionTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698