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