Update To 11.40.268.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     {"(min-height: 500.001px)", 0},
64     {"(max-height: 500px)", 1},
65     {"(max-height: 499.999px)", 0},
66     {"(max-height: 499px)", 0},
67     {"(height: 500px)", 1},
68     {"(height: 500.001px)", 0},
69     {"(height: 499.999px)", 0},
70     {"(height: 501px)", 0},
71     {"(height)", 1},
72     {"(width)", 1},
73     {"(width: whatisthis)", 0},
74     {"screen and (min-width: 400px) and (max-width: 700px)", 1},
75     {0, 0} // Do not remove the terminator line.
76 };
77
78 TestCase printTestCases[] = {
79     {"print and (min-resolution: 1dppx)", 1},
80     {"print and (min-resolution: 118dpcm)", 1},
81     {"print and (min-resolution: 119dpcm)", 0},
82     {0, 0} // Do not remove the terminator line.
83 };
84
85 void testMQEvaluator(TestCase* testCases, const MediaQueryEvaluator& mediaQueryEvaluator)
86 {
87     RefPtrWillBePersistent<MediaQuerySet> querySet = nullptr;
88     for (unsigned i = 0; testCases[i].input; ++i) {
89         querySet = MediaQuerySet::create(testCases[i].input);
90         ASSERT_EQ(testCases[i].output, mediaQueryEvaluator.eval(querySet.get()));
91     }
92 }
93
94 TEST(MediaQueryEvaluatorTest, Cached)
95 {
96     MediaValuesCached::MediaValuesCachedData data;
97     data.viewportWidth = 500;
98     data.viewportHeight = 500;
99     data.deviceWidth = 500;
100     data.deviceHeight = 500;
101     data.devicePixelRatio = 2.0;
102     data.colorBitsPerComponent = 24;
103     data.monochromeBitsPerComponent = 0;
104     data.primaryPointerType = PointerTypeFine;
105     data.primaryHoverType = HoverTypeHover;
106     data.defaultFontSize = 16;
107     data.threeDEnabled = true;
108     data.mediaType = MediaTypeNames::screen;
109     data.strictMode = true;
110     RefPtr<MediaValues> mediaValues = MediaValuesCached::create(data);
111
112     MediaQueryEvaluator mediaQueryEvaluator(*mediaValues);
113     testMQEvaluator(screenTestCases, mediaQueryEvaluator);
114     testMQEvaluator(viewportTestCases, mediaQueryEvaluator);
115
116     data.mediaType = MediaTypeNames::print;
117     mediaValues = MediaValuesCached::create(data);
118     MediaQueryEvaluator printMediaQueryEvaluator(*mediaValues);
119     testMQEvaluator(printTestCases, printMediaQueryEvaluator);
120 }
121
122 TEST(MediaQueryEvaluatorTest, Dynamic)
123 {
124     OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
125     pageHolder->frameView().setMediaType(MediaTypeNames::screen);
126
127     MediaQueryEvaluator mediaQueryEvaluator(&pageHolder->frame());
128     testMQEvaluator(viewportTestCases, mediaQueryEvaluator);
129     pageHolder->frameView().setMediaType(MediaTypeNames::print);
130     testMQEvaluator(printTestCases, mediaQueryEvaluator);
131 }
132
133 TEST(MediaQueryEvaluatorTest, DynamicNoView)
134 {
135     OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
136     RefPtrWillBePersistent<FrameView> view = pageHolder->frame().view();
137     pageHolder->frame().setView(nullptr);
138     MediaQueryEvaluator mediaQueryEvaluator(&pageHolder->frame());
139     RefPtrWillBePersistent<MediaQuerySet> querySet = MediaQuerySet::create("foobar");
140     bool output = false;
141     ASSERT_EQ(output, mediaQueryEvaluator.eval(querySet.get()));
142     pageHolder->frame().setView(view);
143 }
144
145 } // namespace