[EFL] css3/device-adapt/* tests failed after r190335.
[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 pathContains(const std::string& pathOrURL, const char* substring)
138 {
139     String path(pathOrURL.c_str());
140     return path.contains(substring); // Case-insensitive.
141 }
142
143 static bool shouldUseFixedLayout(const std::string& pathOrURL)
144 {
145 #if USE(COORDINATED_GRAPHICS)
146     if (pathContains(pathOrURL, "sticky/") || pathContains(pathOrURL, "sticky\\"))
147         return true;
148 #endif
149     return false;
150 }
151
152 void TestController::updatePlatformSpecificTestOptionsForTest(TestOptions& testOptions, const std::string& pathOrURL) const
153 {
154     testOptions.useFixedLayout |= shouldUseFixedLayout(pathOrURL);
155 }
156
157 void TestController::platformConfigureViewForTest(const TestInvocation&)
158 {
159 }
160
161 void TestController::platformResetPreferencesToConsistentValues()
162 {
163 }
164
165 } // namespace WTR