[M120 Migration][MM] Support W3C EME
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / unittest / utc_blink_ewk_view_scale_changed_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 #include <cmath>
8
9 class utc_blink_ewk_view_scale_changed_callback_set : public utc_blink_ewk_base
10 {
11  protected:
12
13   void LoadFinished(Evas_Object* webview) override
14   {
15     EventLoopStop(Success);
16   }
17
18   static Eina_Bool mainLoopQuit(void* data)
19   {
20     if (data)
21       static_cast<utc_blink_ewk_view_scale_changed_callback_set*>(data)->EventLoopStop(Success);
22     return ECORE_CALLBACK_DONE;
23   }
24
25   static void scaleChanged(Evas_Object* webview, double scale, void* user_data)
26   {
27     ASSERT_LT(std::abs(expected_scale - scale), precision);
28     wasCallbackCalled = true;
29   }
30
31   static const char*const sample;
32   static double precision;
33   static bool wasCallbackCalled;
34   static double expected_scale;
35 };
36
37 const char*const utc_blink_ewk_view_scale_changed_callback_set::sample =
38     "/common/sample.html";
39 bool utc_blink_ewk_view_scale_changed_callback_set::wasCallbackCalled =
40     1.0;
41 double utc_blink_ewk_view_scale_changed_callback_set::expected_scale =
42     false;
43 double utc_blink_ewk_view_scale_changed_callback_set::precision =
44     std::numeric_limits<double>::epsilon();
45
46 TEST_F(utc_blink_ewk_view_scale_changed_callback_set, POS_TEST)
47 {
48   ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),
49               GetResourceUrl(sample).c_str()));
50   ASSERT_EQ(Success, EventLoopStart());
51
52   double min_scale = 0, max_scale = 0;
53   ewk_view_scale_range_get(GetEwkWebView(), &min_scale, &max_scale);
54   double scale_factor = (max_scale + min_scale) / 2;
55
56   // Set the scale within the allowed range and expect this value while
57   // calling the callback.
58   expected_scale = scale_factor;
59   ewk_view_scale_changed_callback_set(GetEwkWebView(),
60       utc_blink_ewk_view_scale_changed_callback_set::scaleChanged,
61       nullptr /* user_data */);
62
63   ASSERT_TRUE(ewk_view_scale_set(GetEwkWebView(), scale_factor, 0, 0));
64   ecore_timer_add(0.5f, mainLoopQuit, this);
65   ASSERT_EQ(Success, EventLoopStart());
66   ASSERT_TRUE(wasCallbackCalled);
67
68   // Set the scale grather than the maximum allowed value and expect the
69   // scale change callback with the value clamped to maxium allowed scale.
70   wasCallbackCalled = false;
71   scale_factor = max_scale * 2;
72   expected_scale = max_scale;
73
74   ASSERT_TRUE(ewk_view_scale_set(GetEwkWebView(), scale_factor, 0, 0));
75   ecore_timer_add(0.5f, mainLoopQuit, this);
76   ASSERT_EQ(Success, EventLoopStart());
77   ASSERT_TRUE(wasCallbackCalled);
78
79   // Set the scale lower than the minimum allowed value and expect the
80   // scale change callback with the value clamped to minimum allowed scale.
81   wasCallbackCalled = false;
82   scale_factor = min_scale / 2;
83   expected_scale = min_scale;
84
85   ASSERT_TRUE(ewk_view_scale_set(GetEwkWebView(), scale_factor, 0, 0));
86   ecore_timer_add(0.5f, mainLoopQuit, this);
87   ASSERT_EQ(Success, EventLoopStart());
88   ASSERT_TRUE(wasCallbackCalled);
89 }
90
91 TEST_F(utc_blink_ewk_view_scale_changed_callback_set, NEG_TEST)
92 {
93   ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),
94               GetResourceUrl(sample).c_str()));
95   ASSERT_EQ(Success, EventLoopStart());
96
97   double min_scale = 0, max_scale = 0;
98   ewk_view_scale_range_get(GetEwkWebView(), &min_scale, &max_scale);
99
100   // Set the scale within the allowed range and expect this value to be set
101   // but does not specify the callback for scale changes. The code must not crash.
102   double scale_factor = (max_scale + min_scale) / 2;
103   wasCallbackCalled = false;
104   ewk_view_scale_changed_callback_set(GetEwkWebView(),
105       nullptr /* scaleChanged callback */,
106       nullptr /* user_data */);
107
108   ASSERT_TRUE(ewk_view_scale_set(GetEwkWebView(), scale_factor, 0, 0));
109   ecore_timer_add(0.5f, mainLoopQuit, this);
110   ASSERT_EQ(Success, EventLoopStart());
111   ASSERT_FALSE(wasCallbackCalled);
112   ASSERT_LT(std::abs(scale_factor - ewk_view_scale_get(GetEwkWebView())),
113             precision);
114
115   // Set the current scale again. The callback responsible for scale change
116   // should not be called.
117   wasCallbackCalled = false;
118   ewk_view_scale_changed_callback_set(GetEwkWebView(),
119       utc_blink_ewk_view_scale_changed_callback_set::scaleChanged,
120       nullptr /* user_data */);
121
122   ASSERT_TRUE(ewk_view_scale_set(GetEwkWebView(),
123       ewk_view_scale_get(GetEwkWebView()), 0, 0));
124   ecore_timer_add(0.5f, mainLoopQuit, this);
125   ASSERT_EQ(Success, EventLoopStart());
126   ASSERT_FALSE(wasCallbackCalled);
127 }