110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// found in the LICENSE file. 410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "config.h" 610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/parser/SizesAttributeParser.h" 710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/css/MediaValuesCached.h" 910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 1010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include <gtest/gtest.h> 1110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 1210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochnamespace WebCore { 1310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 1410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochtypedef struct { 1510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch const char* input; 1610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch const int output; 1710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} TestCase; 1810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 1910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochTEST(SizesAttributeParserTest, Basic) 2010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 2110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch TestCase testCases[] = { 2210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"screen", 500}, 2310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(min-width:500px)", 500}, 2410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(min-width:500px) 200px", 200}, 2510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(min-width:500px) 50vw", 250}, 2610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(min-width:500px) 200px, 400px", 200}, 2710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"400px, (min-width:500px) 200px", 400}, 2810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(min-width:5000px) 200px, 400px", 400}, 2910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(blalbadfsdf) 200px, 400px", 400}, 30f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) {"0", 0}, 31f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) {"-0", 0}, 3210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"1", 500}, 3310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"300px, 400px", 300}, 3410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(min-width:5000px) 200px, (min-width:500px) 400px", 400}, 3510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"", 500}, 3610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {" ", 500}, 3710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {" /**/ ", 500}, 3810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {" /**/ 300px", 300}, 3910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"300px /**/ ", 300}, 4010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {" /**/ (min-width:500px) /**/ 300px", 300}, 4110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"-100px, 200px", 200}, 4210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"-50vw, 20vw", 100}, 4310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"50asdf, 200px", 200}, 4410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"asdf, 200px", 200}, 4510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"(max-width: 3000px) 200w, 400w", 500}, 4610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {",, , /**/ ,200px", 200}, 4710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {"50vw", 250}, 48f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu {"calc(40vw*2)", 400}, 49f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu {"(min-width:5000px) calc(5000px/10), (min-width:500px) calc(1200px/3)", 400}, 50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu {"(min-width:500px) calc(1200/3)", 500}, 51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu {"(min-width:500px) calc(1200px/(0px*14))", 500}, 52f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) {"(max-width: 3000px) 200px, 400px", 200}, 53f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) {"(max-width: 3000px) 20em, 40em", 320}, 54f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) {"(max-width: 3000px) 0, 40em", 0}, 55f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) {"(max-width: 3000px) 50vw, 40em", 250}, 5610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch {0, 0} // Do not remove the terminator line. 5710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch }; 5810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 5910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch MediaValuesCached::MediaValuesCachedData data; 6010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.viewportWidth = 500; 6110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.viewportHeight = 500; 6210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.deviceWidth = 500; 6310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.deviceHeight = 500; 6410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.devicePixelRatio = 2.0; 6510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.colorBitsPerComponent = 24; 6610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.monochromeBitsPerComponent = 0; 6710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.pointer = MediaValues::MousePointer; 6810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.defaultFontSize = 16; 6910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.threeDEnabled = true; 7010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.scanMediaType = false; 7110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.screenMediaType = true; 7210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.printMediaType = false; 7310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch data.strictMode = true; 7410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch RefPtr<MediaValues> mediaValues = MediaValuesCached::create(data); 7510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 7610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch for (unsigned i = 0; testCases[i].input; ++i) { 7710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch int effectiveSize = SizesAttributeParser::findEffectiveSize(testCases[i].input, mediaValues); 7810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT_EQ(testCases[i].output, effectiveSize); 7910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 8010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 8110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 8210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} // namespace 83