/*
 * Copyright 2014 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "cobalt/css_parser/scanner.h"

#include "cobalt/css_parser/grammar.h"
#include "cobalt/css_parser/string_pool.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace css_parser {

// When we support any of the at rule which already has a DISABLED test listed
// below, this DISABLED test should be enabled.

class ScannerTest : public ::testing::Test {
 protected:
  StringPool string_pool_;
  TokenValue token_value_;
  YYLTYPE token_location_;
};

TEST_F(ScannerTest, ScansSingleCodePointUnicodeRange) {
  Scanner scanner("u+1f4a9 U+1F4A9", &string_pool_);

  ASSERT_EQ(kUnicodeRangeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(0x1f4a9, token_value_.integer_pair.first);
  ASSERT_EQ(0x1f4a9, token_value_.integer_pair.second);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kUnicodeRangeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(0x1f4a9, token_value_.integer_pair.first);
  ASSERT_EQ(0x1f4a9, token_value_.integer_pair.second);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansLowerToUpperBoundUnicodeRange) {
  Scanner scanner("u+32-ff", &string_pool_);

  ASSERT_EQ(kUnicodeRangeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(0x32, token_value_.integer_pair.first);
  ASSERT_EQ(0xff, token_value_.integer_pair.second);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansWildcardUnicodeRange) {
  Scanner scanner("u+04??", &string_pool_);

  ASSERT_EQ(kUnicodeRangeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(0x400, token_value_.integer_pair.first);
  ASSERT_EQ(0x4ff, token_value_.integer_pair.second);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIdentifierThatStartsWithU) {
  // Ensure all words below are not mistakenly recognized as kUnicodeRangeToken.
  Scanner scanner("u U umami Ukraine", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("u", token_value_.string);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("U", token_value_.string);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("umami", token_value_.string);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("Ukraine", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansSixDigitUnicodeRange) {
  Scanner scanner("u+11111111", &string_pool_);

  ASSERT_EQ(kUnicodeRangeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(0x111111, token_value_.integer_pair.first);
  ASSERT_EQ(0x111111, token_value_.integer_pair.second);

  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(11, token_value_.integer);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansUnquotedUri) {
  Scanner scanner("url(https://www.youtube.com/tv#/)", &string_pool_);

  ASSERT_EQ(kUriToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("https://www.youtube.com/tv#/", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansUriWithoutEndBrace) {
  Scanner scanner("url(https://www.youtube.com/tv#/", &string_pool_);

  ASSERT_EQ(kUriToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("https://www.youtube.com/tv#/", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansQuotedUri) {
  Scanner scanner("url('https://www.youtube.com/tv#/')", &string_pool_);

  ASSERT_EQ(kUriToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("https://www.youtube.com/tv#/", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidUri) {
  Scanner scanner("url(no pasaran)", &string_pool_);

  ASSERT_EQ(kInvalidFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("url", token_value_.string);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("no", token_value_.string);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("pasaran", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidFunction) {
  Scanner scanner("sample-function()", &string_pool_);

  ASSERT_EQ(kInvalidFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("sample-function", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidFunctionWithNumber) {
  Scanner scanner("sample-matrix4d()", &string_pool_);

  ASSERT_EQ(kInvalidFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("sample-matrix4d", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansFunctionLikeMediaAnd) {
  Scanner scanner("@media tv and(monochrome)", &string_pool_);

  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kTVMediaTypeToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kMediaAndToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ('(', yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNonNegativeIntegerMediaFeatureTypeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(static_cast<int>(cssom::kMonochromeMediaFeature),
            token_value_.integer);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNPlusOne) {
  Scanner scanner("nth-child(n+1)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n+1", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNPlusOneWithoutClosingAtTheEnd) {
  Scanner scanner("nth-child(n+1", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n+1", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNMinusOne) {
  Scanner scanner("nth-child(n-1)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n-1", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIdentifierN) {
  Scanner scanner("nth-child(n)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNDashIdentifier) {
  Scanner scanner("nth-child(n-)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n-", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIdentifier) {
  Scanner scanner("sample-identifier", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("sample-identifier", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIdentifierWithNumber) {
  Scanner scanner("matrix3d5s7wss-47", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("matrix3d5s7wss-47", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDot) {
  Scanner scanner(".", &string_pool_);

  ASSERT_EQ('.', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNthThatStartsWithNumber) {
  Scanner scanner("nth-child(4n+2)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("4n+2", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidDimension) {
  Scanner scanner("12monkeys", &string_pool_);

  ASSERT_EQ(kInvalidDimensionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("12monkeys", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansPercentage) {
  Scanner scanner("2.71828%", &string_pool_);

  ASSERT_EQ(kPercentageToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(2.71828f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInteger) {
  Scanner scanner("911", &string_pool_);

  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(911, token_value_.integer);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansReal) {
  Scanner scanner("2.71828", &string_pool_);

  ASSERT_EQ(kRealToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(2.71828f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNegativeReal) {
  Scanner scanner("-3.14159", &string_pool_);

  ASSERT_EQ('-', yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kRealToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(3.14159f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansVeryBigIntegerAsReal) {
  Scanner scanner("2147483647 2147483648", &string_pool_);

  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(2147483647, token_value_.integer);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kRealToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(2147483648, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidNumber) {
  // As per IEEE 754 the maximum value of |float| has 39 decimal digits.
  // We use 40 decimal digits to cause overflow into positive infinity.
  Scanner scanner("1000000000000000000000000000000000000000", &string_pool_);

  ASSERT_EQ(kInvalidNumberToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("1000000000000000000000000000000000000000", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansScientificNotationNumber) {
  // Scientific notation is required by the standard but is not supported
  // by WebKit or Blink. So we don't support it either.
  Scanner scanner("1e-14", &string_pool_);

  ASSERT_EQ(kInvalidNumberToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("1", token_value_.string);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("e-14", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansHexadecimalNumber) {
  // We don't support scanning of hexadecimal numbers. This test is just to
  // confirm that we recover without crashing.
  Scanner scanner("0x0", &string_pool_);

#if defined(COBALT_WIN) && _MSC_VER < 1900
  // On Windows, with a MSVS version prior to VS2015, the behavior of
  // |std::strtod| used to scan a number doesn't conform to the standard, so
  // we get a different result on that platform.
  ASSERT_EQ(kInvalidDimensionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("0x0", token_value_.string);
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
#else
  ASSERT_EQ(kInvalidNumberToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("0", token_value_.string);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("x0", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
#endif
}

TEST_F(ScannerTest, ScansUnknownDashFunction) {
  Scanner scanner("-cobalt-magic()", &string_pool_);

  ASSERT_EQ(kInvalidFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-cobalt-magic", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansUnknownDashFunctionWithNumber) {
  Scanner scanner("-cobalt-ma5555gic()", &string_pool_);

  ASSERT_EQ(kInvalidFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-cobalt-ma5555gic", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansUnknownDashFunctionWithoutClosingAtEnd) {
  Scanner scanner("-cobalt-magic(", &string_pool_);

  ASSERT_EQ(kInvalidFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-cobalt-magic", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansKnownDashFunction) {
  Scanner scanner("-cobalt-mtm()", &string_pool_);

  ASSERT_EQ(kCobaltMtmFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansKnownDashFunctionWithoutClosingAtEnd) {
  Scanner scanner("-cobalt-mtm(", &string_pool_);

  ASSERT_EQ(kCobaltMtmFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMinusNPlusConstant) {
  Scanner scanner("nth-child(-n+2)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-n+2", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDashNIdentifier) {
  Scanner scanner("nth-child(-n)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-n", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMinusNMinusConstant) {
  Scanner scanner("nth-child(-n-2)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-n-2", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDashNDashIdentifier) {
  Scanner scanner("nth-child(-n-)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-n-", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansEndSgmlCommentDelimiter) {
  Scanner scanner("-->", &string_pool_);

  ASSERT_EQ(kSgmlCommentDelimiterToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansConstantTimesNPlusConstant) {
  Scanner scanner("nth-child(-4n+2)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("-4n+2", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMinus) {
  Scanner scanner("-", &string_pool_);

  ASSERT_EQ('-', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansOtherCharacters) {
  Scanner scanner("%&=[]", &string_pool_);

  ASSERT_EQ('%', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('&', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('=', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('[', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(']', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansEmptyInput) {
  Scanner scanner("", &string_pool_);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansWhitespace) {
  Scanner scanner("h1\r\n\t img", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("h1", token_value_.string);
  ASSERT_EQ(1, token_location_.first_line);
  ASSERT_EQ(1, token_location_.first_column);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("img", token_value_.string);
  ASSERT_EQ(2, token_location_.first_line);
  ASSERT_EQ(3, token_location_.first_column);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansEndMediaQuery) {
  Scanner scanner("@media;{", &string_pool_);

  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(';', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('{', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('}', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansSingleQuotedString) {
  Scanner scanner("'Quantum Paper rocks'", &string_pool_);

  ASSERT_EQ(kStringToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("Quantum Paper rocks", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDoubleQuotedString) {
  Scanner scanner("\"Quantum Paper rocks\"", &string_pool_);

  ASSERT_EQ(kStringToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("Quantum Paper rocks", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansQuote) {
  Scanner scanner("'hello\n", &string_pool_);

  ASSERT_EQ('\'', yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("hello", token_value_.string);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansQuoteAtEndOfFile) {
  Scanner scanner("'hello", &string_pool_);

  ASSERT_EQ(kStringToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("hello", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansImportant) {
  Scanner scanner("! important", &string_pool_);

  ASSERT_EQ(kImportantToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansExclamationMark) {
  Scanner scanner("!", &string_pool_);

  ASSERT_EQ('!', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansObviousHex) {
  Scanner scanner("#1f1f1f", &string_pool_);

  ASSERT_EQ(kHexToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("1f1f1f", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIdentifierLikeHex) {
  // Ensure that hex value is not mistakenly recognized as kIdSelectorToken.
  Scanner scanner("#f1f1f1", &string_pool_);

  ASSERT_EQ(kHexToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("f1f1f1", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIdSelector) {
  Scanner scanner("#webgl-canvas", &string_pool_);

  ASSERT_EQ(kIdSelectorToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("webgl-canvas", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansHashmark) {
  Scanner scanner("#", &string_pool_);

  ASSERT_EQ('#', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansComment) {
  Scanner scanner("/* Cobalt\n+ Quantum Paper\n= <3 */", &string_pool_);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(3, token_location_.first_line);
  ASSERT_EQ(8, token_location_.first_column);
}

TEST_F(ScannerTest, ScansUnterminatedComment) {
  Scanner scanner("/* Everything that has a beginning has an end...",
                  // ...except for above comment.
                  &string_pool_);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansSlash) {
  Scanner scanner("/", &string_pool_);

  ASSERT_EQ('/', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansEndsWith) {
  Scanner scanner("$=", &string_pool_);

  ASSERT_EQ(kEndsWithToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDollar) {
  Scanner scanner("$", &string_pool_);

  ASSERT_EQ('$', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansContains) {
  Scanner scanner("*=", &string_pool_);

  ASSERT_EQ(kContainsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansAsterisk) {
  Scanner scanner("*", &string_pool_);

  ASSERT_EQ('*', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansPlusNth) {
  Scanner scanner("nth-child(+4n+2)", &string_pool_);

  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("4n+2", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansPlus) {
  Scanner scanner("+4n+2", &string_pool_);

  ASSERT_EQ('+', yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kInvalidDimensionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("4n", token_value_.string);

  ASSERT_EQ('+', yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(2, token_value_.integer);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansStartSgmlCommentDelimiter) {
  Scanner scanner("<!--", &string_pool_);

  ASSERT_EQ(kSgmlCommentDelimiterToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansLess) {
  Scanner scanner("<", &string_pool_);

  ASSERT_EQ('<', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidAtRuleBlock) {
  Scanner scanner("@cobalt-magic { foo[()]; bar[{ }] }", &string_pool_);

  ASSERT_EQ(kInvalidAtBlockToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("@cobalt-magic", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidAtRuleBlockWithoutClosingBraceAtEndOfFile) {
  Scanner scanner("@cobalt-magic { foo[(", &string_pool_);

  ASSERT_EQ(kInvalidAtBlockToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("@cobalt-magic", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInvalidAtRuleBlockEndsWithSemicolon) {
  Scanner scanner("@cobalt-magic;", &string_pool_);

  ASSERT_EQ(kInvalidAtBlockToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("@cobalt-magic", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansAt) {
  Scanner scanner("@", &string_pool_);

  ASSERT_EQ('@', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansAtWithEscapedIdentifier) {
  Scanner scanner("@\\e9 motion", &string_pool_);

  ASSERT_EQ(kInvalidAtBlockToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("@émotion", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansEscapedIdentifier) {
  Scanner scanner("\\e9 motion", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("émotion", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansBackSlash) {
  Scanner scanner("\\", &string_pool_);

  ASSERT_EQ('\\', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansBeginsWith) {
  Scanner scanner("^=", &string_pool_);

  ASSERT_EQ(kBeginsWithToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansXor) {
  Scanner scanner("^", &string_pool_);

  ASSERT_EQ('^', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDashMatch) {
  Scanner scanner("|=", &string_pool_);

  ASSERT_EQ(kDashMatchToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansVerticalBar) {
  Scanner scanner("|", &string_pool_);

  ASSERT_EQ('|', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansIncludes) {
  Scanner scanner("~=", &string_pool_);

  ASSERT_EQ(kIncludesToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansTilde) {
  Scanner scanner("~", &string_pool_);

  ASSERT_EQ('~', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansUtf8Identifier) {
  // In Russian "огурец" means "cucumber". Why cucumber? It's a long story.
  Scanner scanner("огурец", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("огурец", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansSupportsOr) {
  Scanner scanner("@supports or", &string_pool_);

  ASSERT_EQ(kSupportsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kSupportsOrToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansSupportsAnd) {
  Scanner scanner("@supports and", &string_pool_);

  ASSERT_EQ(kSupportsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kSupportsAndToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansSupportsNot) {
  Scanner scanner("@supports not", &string_pool_);

  ASSERT_EQ(kSupportsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kSupportsNotToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNotFunction) {
  Scanner scanner("not()", &string_pool_);

  ASSERT_EQ(kNotFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansCalcFunction) {
  Scanner scanner("calc()", &string_pool_);

  ASSERT_EQ(kCalcFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansCueFunction) {
  Scanner scanner("cue()", &string_pool_);

  ASSERT_EQ(kCueFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansFormatFunction) {
  Scanner scanner("format()", &string_pool_);

  ASSERT_EQ(kFormatFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansLocalFunction) {
  Scanner scanner("local()", &string_pool_);

  ASSERT_EQ(kLocalFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansScaleFunction) {
  Scanner scanner("scale()", &string_pool_);

  ASSERT_EQ(kScaleFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

// Test if we add a closing ')' for the function at end of file.
TEST_F(ScannerTest, ScansScaleFunctionWithoutEndBraceAtEndOfFile) {
  Scanner scanner("scale(", &string_pool_);

  ASSERT_EQ(kScaleFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMatrix3dFunction) {
  Scanner scanner("matrix3d()", &string_pool_);

  ASSERT_EQ(kMatrix3dFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNthOfTypeFunction) {
  Scanner scanner("nth-of-type()", &string_pool_);

  ASSERT_EQ(kNthOfTypeFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNthLastChildFunction) {
  Scanner scanner("nth-last-child()", &string_pool_);

  ASSERT_EQ(kNthLastChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansNthLastOfTypeFunction) {
  Scanner scanner("nth-last-of-type()", &string_pool_);

  ASSERT_EQ(kNthLastOfTypeFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMediaScreenAnd) {
  Scanner scanner("@media screen and", &string_pool_);

  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kScreenMediaTypeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kMediaAndToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMediaNotDeviceAspectRatio) {
  Scanner scanner("@media not (device-aspect-ratio: 2560/1440)", &string_pool_);

  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kMediaNotToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('(', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kRatioMediaFeatureTypeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(static_cast<int>(cssom::kDeviceAspectRatioMediaFeature),
            token_value_.integer);
  ASSERT_EQ(':', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(2560, token_value_.integer);
  ASSERT_EQ('/', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(1440, token_value_.integer);
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMediaOrientationBogus) {
  Scanner scanner("@media (orientation: bogus)", &string_pool_);

  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('(', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kOrientationMediaFeatureTypeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(static_cast<int>(cssom::kOrientationMediaFeature),
            token_value_.integer);
  ASSERT_EQ(':', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMediaOnlyTv) {
  Scanner scanner("@media only tv", &string_pool_);

  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kMediaOnlyToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kTVMediaTypeToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansCentimeters) {
  Scanner scanner("8.24cm", &string_pool_);

  ASSERT_EQ(kCentimetersToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansZeroGlyphWidthsAkaCh) {
  Scanner scanner("8.24ch", &string_pool_);

  ASSERT_EQ(kZeroGlyphWidthsAkaChToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDegrees) {
  Scanner scanner("8.24deg", &string_pool_);

  ASSERT_EQ(kDegreesToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDotsPerPixel) {
  Scanner scanner("8.24dppx", &string_pool_);

  ASSERT_EQ(kDotsPerPixelToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDotsPerCentimeter) {
  Scanner scanner("8.24dpcm", &string_pool_);

  ASSERT_EQ(kDotsPerCentimeterToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansDotsPerInch) {
  Scanner scanner("8.24dpi", &string_pool_);

  ASSERT_EQ(kDotsPerInchToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansFontSizesAkaEm) {
  Scanner scanner("8.24em", &string_pool_);

  ASSERT_EQ(kFontSizesAkaEmToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansXHeightsAkaEx) {
  Scanner scanner("8.24ex", &string_pool_);

  ASSERT_EQ(kXHeightsAkaExToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansFractions) {
  Scanner scanner("8.24fr", &string_pool_);

  ASSERT_EQ(kFractionsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansGradians) {
  Scanner scanner("8.24grad", &string_pool_);

  ASSERT_EQ(kGradiansToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansHertz) {
  Scanner scanner("8.24hz", &string_pool_);

  ASSERT_EQ(kHertzToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansInches) {
  Scanner scanner("8.24in", &string_pool_);

  ASSERT_EQ(kInchesToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansKilohertz) {
  Scanner scanner("8.24khz", &string_pool_);

  ASSERT_EQ(kKilohertzToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMillimeters) {
  Scanner scanner("8.24mm", &string_pool_);

  ASSERT_EQ(kMillimetersToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansMilliseconds) {
  Scanner scanner("8.24ms", &string_pool_);

  ASSERT_EQ(kMillisecondsToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansPixels) {
  Scanner scanner("8.24px", &string_pool_);

  ASSERT_EQ(kPixelsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansPoints) {
  Scanner scanner("8.24pt", &string_pool_);

  ASSERT_EQ(kPointsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansPicas) {
  Scanner scanner("8.24pc", &string_pool_);

  ASSERT_EQ(kPicasToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansRadians) {
  Scanner scanner("8.24rad", &string_pool_);

  ASSERT_EQ(kRadiansToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansRootElementFontSizesAkaRem) {
  Scanner scanner("8.24rem", &string_pool_);

  ASSERT_EQ(kRootElementFontSizesAkaRemToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansSeconds) {
  Scanner scanner("8.24s", &string_pool_);

  ASSERT_EQ(kSecondsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansTurns) {
  Scanner scanner("8.24turn", &string_pool_);

  ASSERT_EQ(kTurnsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansViewportWidthPercentsAkaVw) {
  Scanner scanner("8.24vw", &string_pool_);

  ASSERT_EQ(kViewportWidthPercentsAkaVwToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansViewportHeightPercentsAkaVh) {
  Scanner scanner("8.24vh", &string_pool_);

  ASSERT_EQ(kViewportHeightPercentsAkaVhToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansViewportSmallerSizePercentsAkaVmin) {
  Scanner scanner("8.24vmin", &string_pool_);

  ASSERT_EQ(kViewportSmallerSizePercentsAkaVminToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScanskViewportLargerSizePercentsAkaVmax) {
  Scanner scanner("8.24vmax", &string_pool_);

  ASSERT_EQ(kViewportLargerSizePercentsAkaVmaxToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_FLOAT_EQ(8.24f, token_value_.real);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansBottomLeft) {
  Scanner scanner("@bottom-left", &string_pool_);

  ASSERT_EQ(kBottomLeftToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansBottomRight) {
  Scanner scanner("@bottom-right", &string_pool_);

  ASSERT_EQ(kBottomRightToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansBottomCenter) {
  Scanner scanner("@bottom-center", &string_pool_);

  ASSERT_EQ(kBottomCenterToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansBottomLeftCorner) {
  Scanner scanner("@bottom-left-corner", &string_pool_);

  ASSERT_EQ(kBottomLeftCornerToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansBottomRightCorner) {
  Scanner scanner("@bottom-right-corner", &string_pool_);

  ASSERT_EQ(kBottomRightCornerToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansCharset) {
  Scanner scanner("@charset", &string_pool_);

  ASSERT_EQ(kCharsetToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansFontFace) {
  Scanner scanner("@font-face", &string_pool_);

  ASSERT_EQ(kFontFaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansImport) {
  Scanner scanner("@import", &string_pool_);

  ASSERT_EQ(kImportToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansLeftTop) {
  Scanner scanner("@left-top", &string_pool_);

  ASSERT_EQ(kLeftTopToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansLeftMiddle) {
  Scanner scanner("@left-middle", &string_pool_);

  ASSERT_EQ(kLeftMiddleToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansLeftBottom) {
  Scanner scanner("@left-bottom", &string_pool_);

  ASSERT_EQ(kLeftBottomToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansNamespace) {
  Scanner scanner("@namespace", &string_pool_);

  ASSERT_EQ(kNamespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansPage) {
  Scanner scanner("@page", &string_pool_);

  ASSERT_EQ(kPageToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansRightTop) {
  Scanner scanner("@right-top", &string_pool_);

  ASSERT_EQ(kRightTopToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansRightMiddle) {
  Scanner scanner("@right-middle", &string_pool_);

  ASSERT_EQ(kRightMiddleToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansRightBottom) {
  Scanner scanner("@right-bottom", &string_pool_);

  ASSERT_EQ(kRightBottomToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansTopLeft) {
  Scanner scanner("@top-left", &string_pool_);

  ASSERT_EQ(kTopLeftToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansTopRight) {
  Scanner scanner("@top-right", &string_pool_);

  ASSERT_EQ(kTopRightToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansTopCenter) {
  Scanner scanner("@top-center", &string_pool_);

  ASSERT_EQ(kTopCenterToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansTopLeftCorner) {
  Scanner scanner("@top-left-corner", &string_pool_);

  ASSERT_EQ(kTopLeftCornerToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_ScansTopRightCorner) {
  Scanner scanner("@top-right-corner", &string_pool_);

  ASSERT_EQ(kTopRightCornerToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansWebkitAtRule) {
  Scanner scanner("@-webkit-region foo {foo[ baz( abc; ) ], bar[baz { efg }] }",
                  &string_pool_);

  ASSERT_EQ(kOtherBrowserAtBlockToken,
            yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansColon) {
  Scanner scanner("::", &string_pool_);

  ASSERT_EQ(':', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(':', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, ScansCurlyBrackets) {
  Scanner scanner("{}", &string_pool_);

  ASSERT_EQ('{', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ('}', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, AdvancesLocation) {
  Scanner scanner("body {\n}", &string_pool_);

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("body", token_value_.string);
  ASSERT_EQ(1, token_location_.first_line);
  ASSERT_EQ(1, token_location_.first_column);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(1, token_location_.first_line);
  ASSERT_EQ(5, token_location_.first_column);

  ASSERT_EQ('{', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(1, token_location_.first_line);
  ASSERT_EQ(6, token_location_.first_column);

  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(1, token_location_.first_line);
  ASSERT_EQ(7, token_location_.first_column);

  ASSERT_EQ('}', yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(2, token_location_.first_line);
  ASSERT_EQ(1, token_location_.first_column);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, EntersAndExitsMediaQueryMode) {
  Scanner scanner("@media only; only", &string_pool_);

  // Entered "media query" mode, "only" should be a keyword.
  ASSERT_EQ(kMediaToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kMediaOnlyToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(';', yylex(&token_value_, &token_location_, &scanner));

  // Exited "media query" mode, "only" should be an identifier.
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("only", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, DISABLED_EntersAndExitsSupportsMode) {
  Scanner scanner("@supports or; or", &string_pool_);

  // Entered "supports" mode, "or" should be a keyword.
  ASSERT_EQ(kSupportsToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(kSupportsOrToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(';', yylex(&token_value_, &token_location_, &scanner));

  // Exited "supports" mode, "or" should be an identifier.
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("or", token_value_.string);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

TEST_F(ScannerTest, EntersAndExitsNthChildMode) {
  Scanner scanner("nth-child(n+1) n+1", &string_pool_);

  // Entered "nth-child" mode, "n+1" should be a single token.
  ASSERT_EQ(kNthChildFunctionToken,
            yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kNthToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n+1", token_value_.string);

  ASSERT_EQ(')', yylex(&token_value_, &token_location_, &scanner));

  // Exited "nth-child" mode, "n+1" should be a sequence of tokens.
  ASSERT_EQ(kWhitespaceToken, yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIdentifierToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ("n", token_value_.string);

  ASSERT_EQ('+', yylex(&token_value_, &token_location_, &scanner));

  ASSERT_EQ(kIntegerToken, yylex(&token_value_, &token_location_, &scanner));
  ASSERT_EQ(1, token_value_.integer);

  ASSERT_EQ(kEndOfFileToken, yylex(&token_value_, &token_location_, &scanner));
}

}  // namespace css_parser
}  // namespace cobalt
