Compare commits
No commits in common. "2a1f17a8f7e32e1a485df450c5ad231312fedc16" and "1966b81b4d51998666c81e4618d42c25712f17a1" have entirely different histories.
2a1f17a8f7
...
1966b81b4d
@ -36,7 +36,7 @@ endforeach ()
|
|||||||
# Build some unit tests
|
# Build some unit tests
|
||||||
include_directories (${PROJECT_SOURCE_DIR})
|
include_directories (${PROJECT_SOURCE_DIR})
|
||||||
enable_testing ()
|
enable_testing ()
|
||||||
set (tests liberty proto xdg)
|
set (tests liberty proto)
|
||||||
|
|
||||||
pkg_check_modules (libpulse libpulse)
|
pkg_check_modules (libpulse libpulse)
|
||||||
if (libpulse_FOUND)
|
if (libpulse_FOUND)
|
||||||
|
@ -21,11 +21,9 @@
|
|||||||
#ifdef LIBERTY_XDG_WANT_X11
|
#ifdef LIBERTY_XDG_WANT_X11
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef LIBERTY_XDG_WANT_ICONS
|
|
||||||
#include <png.h>
|
#include <png.h>
|
||||||
#endif
|
#endif // LIBERTY_XDG_WANT_X11
|
||||||
|
|
||||||
// --- XSettings ---------------------------------------------------------------
|
// --- XSettings ---------------------------------------------------------------
|
||||||
|
|
||||||
@ -202,7 +200,7 @@ fail:
|
|||||||
|
|
||||||
// --- Desktop file parser -----------------------------------------------------
|
// --- Desktop file parser -----------------------------------------------------
|
||||||
|
|
||||||
// Useful for parsing desktop-entry-spec, icon-theme-spec, trash-spec,
|
// Useful for parsing desktop-file-spec, icon-theme-spec, trash-spec,
|
||||||
// mime-apps-spec. This code is not designed for making changes to the files.
|
// mime-apps-spec. This code is not designed for making changes to the files.
|
||||||
|
|
||||||
struct desktop_file
|
struct desktop_file
|
||||||
@ -351,7 +349,6 @@ desktop_file_unescape (const char *value, bool is_list)
|
|||||||
break; case 'r': str_append_c (&s, '\r');
|
break; case 'r': str_append_c (&s, '\r');
|
||||||
break; default: str_append_c (&s, *p);
|
break; default: str_append_c (&s, *p);
|
||||||
}
|
}
|
||||||
escape = false;
|
|
||||||
}
|
}
|
||||||
else if (*p == '\\' && p[1])
|
else if (*p == '\\' && p[1])
|
||||||
escape = true;
|
escape = true;
|
||||||
@ -437,8 +434,6 @@ desktop_file_get_integer (struct desktop_file *self,
|
|||||||
|
|
||||||
// This implements part of the Icon Theme Specification.
|
// This implements part of the Icon Theme Specification.
|
||||||
|
|
||||||
#ifdef LIBERTY_XDG_WANT_ICONS
|
|
||||||
|
|
||||||
struct icon_theme_icon
|
struct icon_theme_icon
|
||||||
{
|
{
|
||||||
uint32_t width; ///< Width of argb in pixels
|
uint32_t width; ///< Width of argb in pixels
|
||||||
@ -467,7 +462,7 @@ icon_theme_open (const char *path)
|
|||||||
{
|
{
|
||||||
volatile png_bytep buffer = NULL;
|
volatile png_bytep buffer = NULL;
|
||||||
volatile png_bytepp row_pointers = NULL;
|
volatile png_bytepp row_pointers = NULL;
|
||||||
struct icon_theme_icon *volatile result = NULL;
|
volatile struct icon_theme_icon *result = NULL;
|
||||||
FILE *fp = fopen (path, "rb");
|
FILE *fp = fopen (path, "rb");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
{
|
{
|
||||||
@ -540,7 +535,7 @@ fail:
|
|||||||
free (row_pointers);
|
free (row_pointers);
|
||||||
png_destroy_read_struct (&pngp, &infop, NULL);
|
png_destroy_read_struct (&pngp, &infop, NULL);
|
||||||
fclose (fp);
|
fclose (fp);
|
||||||
return result;
|
return (struct icon_theme_icon *) result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@ -769,4 +764,3 @@ icon_theme_set_window_icon (Display *dpy,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // LIBERTY_XDG_WANT_X11
|
#endif // LIBERTY_XDG_WANT_X11
|
||||||
#endif // LIBERTY_XDG_WANT_ICONS
|
|
||||||
|
@ -69,7 +69,6 @@ enum { XUI_KEYMOD_DOUBLE_CLICK = 1 << 15 };
|
|||||||
#include <X11/Xft/Xft.h>
|
#include <X11/Xft/Xft.h>
|
||||||
|
|
||||||
#define LIBERTY_XDG_WANT_X11
|
#define LIBERTY_XDG_WANT_X11
|
||||||
#define LIBERTY_XDG_WANT_ICONS
|
|
||||||
#include "liberty-xdg.c"
|
#include "liberty-xdg.c"
|
||||||
#endif // LIBERTY_XUI_WANT_X11
|
#endif // LIBERTY_XUI_WANT_X11
|
||||||
|
|
||||||
|
67
tests/xdg.c
67
tests/xdg.c
@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* tests/xdg.c
|
|
||||||
*
|
|
||||||
* Copyright (c) 2024, Přemysl Eric Janouch <p@janouch.name>
|
|
||||||
*
|
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
* purpose with or without fee is hereby granted.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
|
||||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PROGRAM_NAME "test"
|
|
||||||
#define PROGRAM_VERSION "0"
|
|
||||||
|
|
||||||
#include "../liberty.c"
|
|
||||||
#include "../liberty-xdg.c"
|
|
||||||
|
|
||||||
static const char file[] =
|
|
||||||
"# This only tests the happy paths\n"
|
|
||||||
"[Desktop Entry]\n"
|
|
||||||
"Version = 1.0\n"
|
|
||||||
"Name=\\s\\n\\t\\r\\\\\n"
|
|
||||||
"Name[fr]=Nom\n"
|
|
||||||
"Hidden=true\n"
|
|
||||||
"Categories=Utility;TextEditor;\n"
|
|
||||||
"Number=42";
|
|
||||||
|
|
||||||
static void
|
|
||||||
test_desktop_file (void)
|
|
||||||
{
|
|
||||||
struct desktop_file entry = desktop_file_make (file, sizeof file - 1);
|
|
||||||
const char *group = "Desktop Entry";
|
|
||||||
|
|
||||||
char *value = desktop_file_get_string (&entry, group, "Version");
|
|
||||||
hard_assert (!strcmp (value, "1.0"));
|
|
||||||
cstr_set (&value, desktop_file_get_string (&entry, group, "Name"));
|
|
||||||
hard_assert (!strcmp (value, " \n\t\r\\"));
|
|
||||||
free (value);
|
|
||||||
|
|
||||||
hard_assert (desktop_file_get_bool (&entry, group, "Hidden"));
|
|
||||||
struct strv values = desktop_file_get_stringv (&entry, group, "Categories");
|
|
||||||
hard_assert (values.len == 2);
|
|
||||||
hard_assert (!strcmp (values.vector[0], "Utility"));
|
|
||||||
hard_assert (!strcmp (values.vector[1], "TextEditor"));
|
|
||||||
strv_free (&values);
|
|
||||||
hard_assert (desktop_file_get_integer (&entry, group, "Number") == 42);
|
|
||||||
|
|
||||||
desktop_file_free (&entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
struct test test;
|
|
||||||
test_init (&test, argc, argv);
|
|
||||||
|
|
||||||
test_add_simple (&test, "/desktop-file", NULL, test_desktop_file);
|
|
||||||
|
|
||||||
return test_run (&test);
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user