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
3// found in the LICENSE file.
4
5#include "config.h"
6
7#include "core/css/MediaList.h"
8#include "core/css/MediaQuery.h"
9#include "core/css/parser/MediaQueryParser.h"
10#include "core/css/parser/MediaQueryTokenizer.h"
11#include "wtf/PassOwnPtr.h"
12#include "wtf/text/StringBuilder.h"
13
14#include <gtest/gtest.h>
15
16namespace blink {
17
18typedef struct {
19    const char* input;
20    const char* output;
21} TestCase;
22
23TEST(MediaConditionParserTest, Basic)
24{
25    // The first string represents the input string.
26    // The second string represents the output string, if present.
27    // Otherwise, the output string is identical to the first string.
28    TestCase testCases[] = {
29        {"screen", "not all"},
30        {"screen and (color)", "not all"},
31        {"all and (min-width:500px)", "not all"},
32        {"(min-width:500px)", "(min-width: 500px)"},
33        {"screen and (color), projection and (color)", "not all"},
34        {"(min-width: -100px)", "not all"},
35        {"(min-width: 100px) and print", "not all"},
36        {"(min-width: 100px) and (max-width: 900px)", "(max-width: 900px) and (min-width: 100px)"},
37        {"(min-width: [100px) and (max-width: 900px)", "not all"},
38        {0, 0} // Do not remove the terminator line.
39    };
40
41    for (unsigned i = 0; testCases[i].input; ++i) {
42        Vector<MediaQueryToken> tokens;
43        MediaQueryTokenizer::tokenize(testCases[i].input, tokens);
44        MediaQueryTokenIterator endToken;
45        // Stop the input once we hit a comma token
46        for (endToken = tokens.begin(); endToken != tokens.end() && endToken->type() != CommaToken; ++endToken) { }
47        RefPtrWillBeRawPtr<MediaQuerySet> mediaConditionQuerySet = MediaQueryParser::parseMediaCondition(tokens.begin(), endToken);
48        ASSERT_EQ(mediaConditionQuerySet->queryVector().size(), (unsigned)1);
49        String queryText = mediaConditionQuerySet->queryVector()[0]->cssText();
50        ASSERT_STREQ(testCases[i].output, queryText.ascii().data());
51    }
52}
53
54} // namespace
55