1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file. 4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "config.h" 6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/css/parser/BisonCSSParser.h" 7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/css/MediaList.h" 9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/css/StyleRule.h" 10c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "wtf/dtoa/utils.h" 117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/text/StringBuilder.h" 12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include <gtest/gtest.h> 14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 15c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 17c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)static void testMediaQuery(const char* expected, MediaQuerySet& querySet) 18c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 19c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const WillBeHeapVector<OwnPtrWillBeMember<MediaQuery> >& queryVector = querySet.queryVector(); 20c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) size_t queryVectorSize = queryVector.size(); 21c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) StringBuilder output; 22c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (size_t i = 0; i < queryVectorSize; ) { 24c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) String queryText = queryVector[i]->cssText(); 25c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) output.append(queryText); 26c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ++i; 27c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (i >= queryVectorSize) 28c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) break; 299e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) output.appendLiteral(", "); 30c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ASSERT_STREQ(expected, output.toString().ascii().data()); 32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)TEST(BisonCSSParserTest, MediaQuery) 35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) struct { 37c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const char* input; 38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) const char* output; 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } testCases[] = { 40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) {"@media s} {}", "not all"}, 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) {"@media } {}", "not all"}, 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) {"@media tv {}", "tv"}, 43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) {"@media tv, screen {}", "tv, screen"}, 44c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) {"@media s}, tv {}", "not all, tv"}, 45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) {"@media tv, screen and (}) {}", "tv, not all"}, 46c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) }; 47c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) BisonCSSParser parser(strictCSSParserContext()); 49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) for (unsigned i = 0; i < ARRAY_SIZE(testCases); ++i) { 51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeRawPtr<StyleRuleBase> rule = parser.parseRule(nullptr, String(testCases[i].input)); 52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 53c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) EXPECT_TRUE(rule->isMediaRule()); 54c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) testMediaQuery(testCases[i].output, *static_cast<StyleRuleMedia*>(rule.get())->mediaQueries()); 55c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) } 56c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 57c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 58c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 59