Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / MediaQueryEvaluatorTest.cpp
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/MediaQueryEvaluator.h"
7
8 #include "core/MediaTypeNames.h"
9 #include "core/css/MediaList.h"
10 #include "core/css/MediaValuesCached.h"
11 #include "core/frame/FrameView.h"
12 #include "core/testing/DummyPageHolder.h"
13 #include "wtf/PassOwnPtr.h"
14 #include "wtf/text/StringBuilder.h"
15
16 #include <gtest/gtest.h>
17
18 namespace blink {
19
20 typedef struct {
21     const char* input;
22     const bool output;
23 } TestCase;
24
25 TestCase screenTestCases[] = {
26     {"", 1},
27     {" ", 1},
28     {"screen", 1},
29     {"screen and (color)", 1},
30     {"not screen and (color)", 0},
31     {"screen and (device-aspect-ratio: 16/9)", 0},
32     {"screen and (device-aspect-ratio: 1/1)", 1},
33     {"all and (min-color: 2)", 1},
34     {"all and (min-color: 32)", 0},
35     {"all and (min-color-index: 0)", 1},
36     {"all and (min-color-index: 1)", 0},
37     {"all and (monochrome)", 0},
38     {"all and (min-monochrome: 0)", 1},
39     {"all and (grid: 0)", 1},
40     {"(resolution: 2dppx)", 1},
41     {"(resolution: 1dppx)", 0},
42     {"(orientation: portrait)", 1},
43     {"(orientation: landscape)", 0},
44     {"tv and (scan: progressive)", 0},
45     {"(pointer: coarse)", 0},
46     {"(pointer: fine)", 1},
47     {"(hover: hover)", 1},
48     {"(hover: on-demand)", 0},
49     {"(hover: none)", 0},
50     {0, 0} // Do not remove the terminator line.
51 };
52
53 TestCase viewportTestCases[] = {
54     {"all and (min-width: 500px)", 1},
55     {"(min-width: 500px)", 1},
56     {"(min-width: 501px)", 0},
57     {"(max-width: 500px)", 1},
58     {"(max-width: 499px)", 0},
59     {"(width: 500px)", 1},
60     {"(width: 501px)", 0},
61     {"(min-height: 500px)", 1},
62     {"(min-height: 501px)", 0},
63     {"(max-height: 500px)", 1},
64     {"(max-height: 499px)", 0},
65     {"(height: 500px)", 1},
66     {"(height: 501px)", 0},
67     {"screen and (min-width: 400px) and (max-width: 700px)", 1},
68     {0, 0} // Do not remove the terminator line.
69 };
70
71 TestCase printTestCases[] = {
72     {"print and (min-resolution: 1dppx)", 1},
73     {"print and (min-resolution: 118dpcm)", 1},
74     {"print and (min-resolution: 119dpcm)", 0},
75     {0, 0} // Do not remove the terminator line.
76 };
77
78 void testMQEvaluator(TestCase* testCases, const MediaQueryEvaluator& mediaQueryEvaluator)
79 {
80     for (unsigned i = 0; testCases[i].input; ++i) {
81         RefPtrWillBeRawPtr<MediaQuerySet> querySet = MediaQuerySet::create(testCases[i].input);
82         ASSERT_EQ(testCases[i].output, mediaQueryEvaluator.eval(querySet.get()));
83     }
84 }
85
86 TEST(MediaQueryEvaluatorTest, Cached)
87 {
88     MediaValuesCached::MediaValuesCachedData data;
89     data.viewportWidth = 500;
90     data.viewportHeight = 500;
91     data.deviceWidth = 500;
92     data.deviceHeight = 500;
93     data.devicePixelRatio = 2.0;
94     data.colorBitsPerComponent = 24;
95     data.monochromeBitsPerComponent = 0;
96     data.pointer = MediaValues::MousePointer;
97     data.defaultFontSize = 16;
98     data.threeDEnabled = true;
99     data.mediaType = MediaTypeNames::screen;
100     data.strictMode = true;
101     RefPtr<MediaValues> mediaValues = MediaValuesCached::create(data);
102
103     MediaQueryEvaluator mediaQueryEvaluator(*mediaValues);
104     testMQEvaluator(screenTestCases, mediaQueryEvaluator);
105     testMQEvaluator(viewportTestCases, mediaQueryEvaluator);
106
107     data.mediaType = MediaTypeNames::print;
108     mediaValues = MediaValuesCached::create(data);
109     MediaQueryEvaluator printMediaQueryEvaluator(*mediaValues);
110     testMQEvaluator(printTestCases, printMediaQueryEvaluator);
111 }
112
113 TEST(MediaQueryEvaluatorTest, Dynamic)
114 {
115     OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
116     pageHolder->frameView().setMediaType(MediaTypeNames::screen);
117
118     MediaQueryEvaluator mediaQueryEvaluator(&pageHolder->frame());
119     testMQEvaluator(viewportTestCases, mediaQueryEvaluator);
120     pageHolder->frameView().setMediaType(MediaTypeNames::print);
121     testMQEvaluator(printTestCases, mediaQueryEvaluator);
122 }
123
124 TEST(MediaQueryEvaluatorTest, DynamicNoView)
125 {
126     OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
127     pageHolder->frame().setView(nullptr);
128     MediaQueryEvaluator mediaQueryEvaluator(&pageHolder->frame());
129     RefPtrWillBeRawPtr<MediaQuerySet> querySet = MediaQuerySet::create("foobar");
130     bool output = false;
131     ASSERT_EQ(output, mediaQueryEvaluator.eval(querySet.get()));
132 }
133
134 } // namespace