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.
5 #include "utc_blink_ewk_base.h"
9 class utc_blink_ewk_view_scale_changed_callback_set : public utc_blink_ewk_base
13 void LoadFinished(Evas_Object* webview) override
15 EventLoopStop(Success);
18 static Eina_Bool mainLoopQuit(void* data)
21 static_cast<utc_blink_ewk_view_scale_changed_callback_set*>(data)->EventLoopStop(Success);
22 return ECORE_CALLBACK_DONE;
25 static void scaleChanged(Evas_Object* webview, double scale, void* user_data)
27 ASSERT_LT(std::abs(expected_scale - scale), precision);
28 wasCallbackCalled = true;
31 static const char*const sample;
32 static double precision;
33 static bool wasCallbackCalled;
34 static double expected_scale;
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 =
41 double utc_blink_ewk_view_scale_changed_callback_set::expected_scale =
43 double utc_blink_ewk_view_scale_changed_callback_set::precision =
44 std::numeric_limits<double>::epsilon();
46 TEST_F(utc_blink_ewk_view_scale_changed_callback_set, POS_TEST)
48 ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),
49 GetResourceUrl(sample).c_str()));
50 ASSERT_EQ(Success, EventLoopStart());
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;
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 */);
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);
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;
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);
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;
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);
91 TEST_F(utc_blink_ewk_view_scale_changed_callback_set, NEG_TEST)
93 ASSERT_TRUE(ewk_view_url_set(GetEwkWebView(),
94 GetResourceUrl(sample).c_str()));
95 ASSERT_EQ(Success, EventLoopStart());
97 double min_scale = 0, max_scale = 0;
98 ewk_view_scale_range_get(GetEwkWebView(), &min_scale, &max_scale);
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 */);
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())),
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 */);
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);