[M120 Migration][MM] Support W3C EME
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / unittest / utc_blink_ewk_view_did_change_theme_color_callback_set_func.cpp
1 // Copyright 2016 Samsung Electronics. 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 "utc_blink_ewk_base.h"
6
7 static const char* const kThemeColor1Url = "common/theme-color_1.html";
8 static const char* const kThemeColor2Url = "common/theme-color_2.html";
9 static const char* const kNoThemeColorUrl = "common/sample.html";
10
11 class utc_blink_ewk_view_did_change_theme_color_callback_set
12     : public utc_blink_ewk_base {
13  public:
14   utc_blink_ewk_view_did_change_theme_color_callback_set()
15       : evas_object_(nullptr), url_loaded_(false) {}
16
17   void LoadFinished(Evas_Object* o) override { url_loaded_ = true; }
18
19   static void DidChangeThemeColorCallback(Evas_Object* o,
20                                           int r,
21                                           int g,
22                                           int b,
23                                           int a,
24                                           void* user_data) {
25     if (!user_data)
26       return;
27     auto owner =
28         static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
29             user_data);
30     owner->evas_object_ = o;
31     owner->r_ = r;
32     owner->g_ = g;
33     owner->b_ = b;
34     owner->a_ = a;
35     owner->EventLoopStop(Success);
36   }
37
38   static void ThemeColor1UrlSetJob(utc_blink_ewk_base* data) {
39     auto owner =
40         static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
41             data);
42     ewk_view_url_set(owner->GetEwkWebView(),
43                      owner->GetResourceUrl(kThemeColor1Url).c_str());
44   }
45
46   static void ThemeColor2UrlSetJob(utc_blink_ewk_base* data) {
47     auto owner =
48         static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
49             data);
50     ewk_view_url_set(owner->GetEwkWebView(),
51                      owner->GetResourceUrl(kThemeColor2Url).c_str());
52   }
53
54   static void NoThemeColorUrlSetJob(utc_blink_ewk_base* data) {
55     auto owner =
56         static_cast<utc_blink_ewk_view_did_change_theme_color_callback_set*>(
57             data);
58     ewk_view_url_set(owner->GetEwkWebView(),
59                      owner->GetResourceUrl(kNoThemeColorUrl).c_str());
60   }
61
62  protected:
63   int r_;
64   int g_;
65   int b_;
66   int a_;
67   Evas_Object* evas_object_;
68   Eina_Bool url_loaded_;
69 };
70
71 /**
72  * @brief Checks if color received in callback is same as in "theme-color" meta
73  *        tag.
74  **/
75 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
76        POS_THEME_COLOR) {
77   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
78                            GetEwkWebView(), DidChangeThemeColorCallback, this));
79   SetTestJob(ThemeColor1UrlSetJob);
80   ASSERT_EQ(Success, EventLoopStart());
81   ASSERT_EQ(GetEwkWebView(), evas_object_);
82   EXPECT_EQ(50, r_);
83   EXPECT_EQ(100, g_);
84   EXPECT_EQ(150, b_);
85   EXPECT_EQ(255, a_);
86 }
87
88 /**
89  * @brief Checks if callback is received only first time, when urls with same
90  *        theme color are loaded one after another.
91  **/
92 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
93        POS_THEME_COLORS_SAME) {
94   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
95                            GetEwkWebView(), DidChangeThemeColorCallback, this));
96   SetTestJob(ThemeColor1UrlSetJob);
97   ASSERT_EQ(Success, EventLoopStart());
98   ASSERT_EQ(GetEwkWebView(), evas_object_);
99   SetTestJob(ThemeColor1UrlSetJob);
100   ASSERT_EQ(Timeout, EventLoopStart(3.0));
101   ASSERT_TRUE(url_loaded_);
102 }
103
104 /**
105  * @brief Checks if callback is received twice first time, when urls with
106  *        different theme color are loaded one after another.
107  **/
108 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
109        POS_THEME_COLORS_DIFFERENT) {
110   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
111                            GetEwkWebView(), DidChangeThemeColorCallback, this));
112   SetTestJob(ThemeColor1UrlSetJob);
113   ASSERT_EQ(Success, EventLoopStart());
114   evas_object_ = nullptr;
115   SetTestJob(ThemeColor2UrlSetJob);
116   ASSERT_EQ(Success, EventLoopStart());
117   ASSERT_EQ(GetEwkWebView(), evas_object_);
118   EXPECT_EQ(100, r_);
119   EXPECT_EQ(150, g_);
120   EXPECT_EQ(200, b_);
121   EXPECT_EQ(255, a_);
122 }
123
124 /**
125  * @brief Checks if color is not received if url with no theme color is loaded
126  *        as first one.
127  **/
128 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
129        POS_NO_THEME_COLOR) {
130   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
131                            GetEwkWebView(), DidChangeThemeColorCallback, this));
132   SetTestJob(NoThemeColorUrlSetJob);
133   ASSERT_EQ(Timeout, EventLoopStart(3.0));
134   ASSERT_TRUE(url_loaded_);
135 }
136
137 /**
138  * @brief Checks if callback is received if url with no theme color is loaded
139  *        after url with theme color.
140  **/
141 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
142        POS_NO_THEME_COLOR_AFTER_THEME_COLOR) {
143   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
144                            GetEwkWebView(), DidChangeThemeColorCallback, this));
145   SetTestJob(ThemeColor1UrlSetJob);
146   ASSERT_EQ(Success, EventLoopStart());
147   SetTestJob(NoThemeColorUrlSetJob);
148   ASSERT_EQ(Success, EventLoopStart());
149   ASSERT_EQ(GetEwkWebView(), evas_object_);
150   EXPECT_EQ(0, r_);
151   EXPECT_EQ(0, g_);
152   EXPECT_EQ(0, b_);
153   EXPECT_EQ(0, a_);
154 }
155
156 /**
157  * @brief Checks if callback is reset properly.
158  **/
159 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
160        POS_RESET_CALLBACK) {
161   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
162                            GetEwkWebView(), DidChangeThemeColorCallback, this));
163   SetTestJob(ThemeColor1UrlSetJob);
164   ASSERT_EQ(Success, EventLoopStart());
165   ASSERT_EQ(EINA_TRUE, ewk_view_did_change_theme_color_callback_set(
166                            GetEwkWebView(), nullptr, this));
167   SetTestJob(ThemeColor2UrlSetJob);
168   ASSERT_EQ(Timeout, EventLoopStart(3.0));
169   ASSERT_TRUE(url_loaded_);
170 }
171
172 /**
173  * @brief Checks if fails with webview being null.
174  **/
175 TEST_F(utc_blink_ewk_view_did_change_theme_color_callback_set,
176        NEG_INVALID_WEBVIEW) {
177   ASSERT_EQ(EINA_FALSE, ewk_view_did_change_theme_color_callback_set(
178                             nullptr, DidChangeThemeColorCallback, this));
179 }