[WTF] Add environment variable helpers
[WebKit-https.git] / Tools / TestWebKitAPI / glib / WebKitGLib / TestMain.cpp
1 /*
2  * Copyright (C) 2011 Igalia S.L.
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 library 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 library; 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 "TestMain.h"
22
23 #include <glib/gstdio.h>
24 #include <wtf/Environment.h>
25
26 #if PLATFORM(GTK)
27 #include <gtk/gtk.h>
28 #endif
29
30 uint32_t Test::s_webExtensionID = 0;
31
32 void beforeAll();
33 void afterAll();
34
35 static GUniquePtr<char> testDataDirectory(g_dir_make_tmp("WebKitGLibTests-XXXXXX", nullptr));
36
37 const char* Test::dataDirectory()
38 {
39     return testDataDirectory.get();
40 }
41
42 static void registerGResource(void)
43 {
44     GUniquePtr<char> resourcesPath(g_build_filename(WEBKIT_TEST_RESOURCES_DIR, "webkitglib-tests-resources.gresource", nullptr));
45     GResource* resource = g_resource_load(resourcesPath.get(), nullptr);
46     g_assert_nonnull(resource);
47
48     g_resources_register(resource);
49     g_resource_unref(resource);
50 }
51
52 static void removeNonEmptyDirectory(const char* directoryPath)
53 {
54     GDir* directory = g_dir_open(directoryPath, 0, 0);
55     g_assert_nonnull(directory);
56     const char* fileName;
57     while ((fileName = g_dir_read_name(directory))) {
58         GUniquePtr<char> filePath(g_build_filename(directoryPath, fileName, nullptr));
59         if (g_file_test(filePath.get(), G_FILE_TEST_IS_DIR))
60             removeNonEmptyDirectory(filePath.get());
61         else
62             g_unlink(filePath.get());
63     }
64     g_dir_close(directory);
65     g_rmdir(directoryPath);
66 }
67
68 int main(int argc, char** argv)
69 {
70     Environment::remove("DBUS_SESSION_BUS_ADDRESS");
71 #if PLATFORM(GTK)
72     gtk_test_init(&argc, &argv, nullptr);
73 #else
74     g_test_init(&argc, &argv, nullptr);
75 #endif
76     Environment::setIfNotDefined("WEBKIT_EXEC_PATH", WEBKIT_EXEC_PATH);
77     Environment::setIfNotDefined("WEBKIT_INJECTED_BUNDLE_PATH", WEBKIT_INJECTED_BUNDLE_PATH);
78     Environment::set("LC_ALL", "C");
79     Environment::set("GIO_USE_VFS", "local");
80     Environment::set("GSETTINGS_BACKEND", "memory");
81     // Get rid of runtime warnings about deprecated properties and signals, since they break the tests.
82     Environment::set("G_ENABLE_DIAGNOSTIC", "0");
83     g_test_bug_base("https://bugs.webkit.org/");
84
85     registerGResource();
86
87     beforeAll();
88     int returnValue = g_test_run();
89     afterAll();
90
91     removeNonEmptyDirectory(testDataDirectory.get());
92
93     return returnValue;
94 }
95