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#include "core/css/parser/BisonCSSParser.h"
7
8#include "core/css/MediaList.h"
9#include "core/css/StyleRule.h"
10#include "wtf/dtoa/utils.h"
11#include "wtf/text/StringBuilder.h"
12
13#include <gtest/gtest.h>
14
15namespace blink {
16
17static void testMediaQuery(const char* expected, MediaQuerySet& querySet)
18{
19    const WillBeHeapVector<OwnPtrWillBeMember<MediaQuery> >& queryVector = querySet.queryVector();
20    size_t queryVectorSize = queryVector.size();
21    StringBuilder output;
22
23    for (size_t i = 0; i < queryVectorSize; ) {
24        String queryText = queryVector[i]->cssText();
25        output.append(queryText);
26        ++i;
27        if (i >= queryVectorSize)
28            break;
29        output.appendLiteral(", ");
30    }
31    ASSERT_STREQ(expected, output.toString().ascii().data());
32}
33
34TEST(BisonCSSParserTest, MediaQuery)
35{
36    struct {
37        const char* input;
38        const char* output;
39    } testCases[] = {
40        {"@media s} {}", "not all"},
41        {"@media } {}", "not all"},
42        {"@media tv {}", "tv"},
43        {"@media tv, screen {}", "tv, screen"},
44        {"@media s}, tv {}", "not all, tv"},
45        {"@media tv, screen and (}) {}", "tv, not all"},
46    };
47
48    BisonCSSParser parser(strictCSSParserContext());
49
50    for (unsigned i = 0; i < ARRAY_SIZE(testCases); ++i) {
51        RefPtrWillBeRawPtr<StyleRuleBase> rule = parser.parseRule(nullptr, String(testCases[i].input));
52
53        EXPECT_TRUE(rule->isMediaRule());
54        testMediaQuery(testCases[i].output, *static_cast<StyleRuleMedia*>(rule.get())->mediaQueries());
55    }
56}
57
58} // namespace blink
59