[EFL] Many of the css3/device-adapt/* tests failed after r188548.
[WebKit-https.git] / Tools / WebKitTestRunner / efl / TestControllerEfl.cpp
1 /*
2  * Copyright (C) 2012 Samsung Electronics
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this program; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19
20 #include "config.h"
21 #include "TestController.h"
22
23 #include "PlatformWebView.h"
24 #include "TestInvocation.h"
25 #include <Ecore.h>
26 #include <Evas.h>
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <unistd.h>
30 #include <wtf/Platform.h>
31 #include <wtf/text/WTFString.h>
32
33 namespace WTR {
34
35 static Ecore_Timer* timer = 0;
36
37 static Eina_Bool timerFired(void*)
38 {
39     timer = 0;
40     ecore_main_loop_quit();
41     return ECORE_CALLBACK_CANCEL;
42 }
43
44 void TestController::notifyDone()
45 {
46     if (!timer)
47         return;
48
49     ecore_timer_del(timer);
50     timer = 0;
51     ecore_main_loop_quit();
52 }
53
54 void TestController::platformInitialize()
55 {
56     const char* isDebugging = getenv("WEB_PROCESS_CMD_PREFIX");
57     if (isDebugging && *isDebugging) {
58         m_useWaitToDumpWatchdogTimer = false;
59         m_forceNoTimeout = true;
60     }
61 }
62
63 WKPreferencesRef TestController::platformPreferences()
64 {
65     return WKPageGroupGetPreferences(m_pageGroup.get());
66 }
67
68 void TestController::platformDestroy()
69 {
70 }
71
72 void TestController::platformRunUntil(bool& condition, double timeout)
73 {
74     if (timeout <= 0) {
75         // Never timeout if we are debugging or not meant to timeout.
76         while (!condition)
77             ecore_main_loop_iterate();
78
79         return;
80     }
81     timer = ecore_timer_loop_add(timeout, timerFired, 0);
82     ecore_main_loop_begin();
83 }
84
85 static const char* getEnvironmentVariableOrExit(const char* variableName)
86 {
87     const char* value = getenv(variableName);
88     if (!value) {
89         fprintf(stderr, "%s environment variable not found\n", variableName);
90         exit(0);
91     }
92
93     return value;
94 }
95
96 void TestController::initializeInjectedBundlePath()
97 {
98     const char* bundlePath = getEnvironmentVariableOrExit("TEST_RUNNER_INJECTED_BUNDLE_FILENAME");
99     m_injectedBundlePath.adopt(WKStringCreateWithUTF8CString(bundlePath));
100 }
101
102 void TestController::initializeTestPluginDirectory()
103 {
104     const char* pluginPath = getEnvironmentVariableOrExit("TEST_RUNNER_PLUGIN_PATH");
105     m_testPluginDirectory.adopt(WKStringCreateWithUTF8CString(pluginPath));
106 }
107
108 void TestController::platformInitializeContext()
109 {
110 }
111
112 void TestController::setHidden(bool hidden)
113 {
114     PlatformWKView view = mainWebView()->platformView();
115
116     if (!view) {
117         fprintf(stderr, "ERROR: view is null.\n");
118         return;
119     }
120
121     if (hidden)
122         evas_object_hide(view);
123     else
124         evas_object_show(view);
125 }
126
127 void TestController::runModal(PlatformWebView*)
128 {
129     // FIXME: Need to implement this to test showModalDialog.
130 }
131
132 const char* TestController::platformLibraryPathForTesting()
133 {
134     return 0;
135 }
136
137 static bool shouldUseFixedLayout(const TestInvocation& test)
138 {
139 #if ENABLE(CSS_DEVICE_ADAPTATION)
140     if (test.urlContains("device-adapt/") || test.urlContains("device-adapt\\"))
141         return true;
142 #endif
143
144 #if USE(COORDINATED_GRAPHICS)
145     if (test.urlContains("sticky/") || test.urlContains("sticky\\"))
146         return true;
147 #endif
148     return false;
149 }
150
151 void TestController::updatePlatformSpecificViewOptionsForTest(ViewOptions& viewOptions, const TestInvocation& test) const
152 {
153     viewOptions.useFixedLayout = shouldUseFixedLayout(test);
154 }
155
156 void TestController::platformConfigureViewForTest(const TestInvocation&)
157 {
158 }
159
160 void TestController::platformResetPreferencesToConsistentValues()
161 {
162 }
163
164 } // namespace WTR