-
Simon McVittie authored
This is exported because it's used by the tests, but is not a public function. Signed-off-by:
Simon McVittie <smcv@collabora.com>
Simon McVittie authoredThis is exported because it's used by the tests, but is not a public function. Signed-off-by:
Simon McVittie <smcv@collabora.com>
desktop-entry.c 6.58 KiB
/*
* Copyright © 2020 Collabora Ltd.
*
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <steam-runtime-tools/steam-runtime-tools.h>
#include <string.h>
#include <unistd.h>
#include <glib.h>
#include <glib/gstdio.h>
#include "steam-runtime-tools/desktop-entry-internal.h"
#include "steam-runtime-tools/utils-internal.h"
#include "test-utils.h"
#include "fake-home.h"
static const char *argv0;
static gchar *fake_home_path;
typedef struct
{
gchar *builddir;
} Fixture;
typedef struct
{
int unused;
} Config;
static void
setup (Fixture *f,
gconstpointer context)
{
G_GNUC_UNUSED const Config *config = context;
f->builddir = g_strdup (g_getenv ("G_TEST_BUILDDIR"));
if (f->builddir == NULL)
f->builddir = g_path_get_dirname (argv0);
}
static void
teardown (Fixture *f,
gconstpointer context)
{
G_GNUC_UNUSED const Config *config = context;
g_free (f->builddir);
/* We expect that fake_home already cleaned this up, but just to be sure we
* do it too */
_srt_rm_rf (fake_home_path);
}
/*
* Test basic functionality of the SrtDesktopEntry object.
*/
static void
test_object (Fixture *f,
gconstpointer context)
{
SrtDesktopEntry *entry;
gchar *id = NULL;
gchar *cmd = NULL;
gchar *filename = NULL;
gboolean is_default = FALSE;
gboolean is_steam_handler = FALSE;
entry = _srt_desktop_entry_new ("steam.desktop",
"/usr/bin/steam %U",
"/usr/share/applications/steam.desktop",
TRUE,
TRUE);
g_assert_cmpstr (srt_desktop_entry_get_id (entry), ==, "steam.desktop");
g_assert_cmpstr (srt_desktop_entry_get_commandline (entry), ==, "/usr/bin/steam %U");
g_assert_cmpstr (srt_desktop_entry_get_filename (entry), ==, "/usr/share/applications/steam.desktop");
g_assert_cmpint (srt_desktop_entry_is_default_handler (entry), ==, TRUE);
g_assert_cmpint (srt_desktop_entry_is_steam_handler (entry), ==, TRUE);
g_object_get (entry,
"id", &id,
"commandline", &cmd,
"filename", &filename,
"is-default-handler", &is_default,
"is-steam-handler", &is_steam_handler,
NULL);
g_assert_cmpstr (id, ==, "steam.desktop");
g_assert_cmpstr (cmd, ==, "/usr/bin/steam %U");
g_assert_cmpstr (filename, ==, "/usr/share/applications/steam.desktop");
g_assert_cmpint (is_default, ==, TRUE);
g_assert_cmpint (is_steam_handler, ==, TRUE);
g_free (id);
g_free (cmd);
g_free (filename);
g_object_unref (entry);
}
static void
test_default_entry (Fixture *f,
gconstpointer context)
{
SrtSystemInfo *info;
FakeHome *fake_home;
GList *desktop_entries = NULL;
const gchar *filename = NULL;
fake_home = fake_home_new (fake_home_path);
fake_home->create_pinning_libs = FALSE;
fake_home->create_i386_folders = FALSE;
fake_home->create_amd64_folders = FALSE;
fake_home->create_root_symlink = FALSE;
fake_home->create_steam_symlink = FALSE;
fake_home->create_steamrt_files = FALSE;
fake_home->add_environments = FALSE;
fake_home_create_structure (fake_home);
info = srt_system_info_new (NULL);
fake_home_apply_to_system_info (fake_home, info);
desktop_entries = srt_system_info_list_desktop_entries (info);
g_assert_null (desktop_entries->next);
g_assert_cmpstr (srt_desktop_entry_get_id (desktop_entries->data), ==, "steam.desktop");
g_assert_cmpstr (srt_desktop_entry_get_commandline (desktop_entries->data), ==, "/usr/bin/env steam %U");
filename = srt_desktop_entry_get_filename (desktop_entries->data);
g_assert_true (g_str_has_prefix (filename, "/"));
g_assert_true (g_str_has_suffix (filename, "/steam.desktop"));
g_assert_true (srt_desktop_entry_is_default_handler (desktop_entries->data));
g_assert_true (srt_desktop_entry_is_steam_handler (desktop_entries->data));
g_list_free_full (desktop_entries, g_object_unref);
/* Do the check again, this time using the cache */
desktop_entries = srt_system_info_list_desktop_entries (info);
g_assert_null (desktop_entries->next);
g_assert_cmpstr (srt_desktop_entry_get_id (desktop_entries->data), ==, "steam.desktop");
g_assert_cmpstr (srt_desktop_entry_get_commandline (desktop_entries->data), ==, "/usr/bin/env steam %U");
filename = srt_desktop_entry_get_filename (desktop_entries->data);
g_assert_true (g_str_has_prefix (filename, "/"));
g_assert_true (g_str_has_suffix (filename, "/steam.desktop"));
g_assert_true (srt_desktop_entry_is_default_handler (desktop_entries->data));
g_assert_true (srt_desktop_entry_is_steam_handler (desktop_entries->data));
g_list_free_full (desktop_entries, g_object_unref);
fake_home_clean_up (fake_home);
g_clear_object (&info);
}
int
main (int argc,
char **argv)
{
int status;
argv0 = argv[0];
/* We can't use %G_TEST_OPTION_ISOLATE_DIRS because we are targeting an older glib verion.
* As a workaround we use our function `setup_env()`.
* We can't use an environ because in `_srt_steam_check()` we call `g_app_info_get_*` that
* doesn't support a custom environ. */
g_test_init (&argc, &argv, NULL);
fake_home_path = _srt_global_setup_private_xdg_dirs ();
g_test_add ("/desktop-entry/object", Fixture, NULL,
setup, test_object, teardown);
g_test_add ("/desktop-entry/default_entry", Fixture, NULL,
setup, test_default_entry, teardown);
status = g_test_run ();
if (!_srt_global_teardown_private_xdg_dirs ())
g_debug ("Unable to remove the fake home parent directory of: %s", fake_home_path);
return status;
}