diff --git a/meson.build b/meson.build index ff12a382..1165b33f 100644 --- a/meson.build +++ b/meson.build @@ -4,7 +4,11 @@ project( version: '1.0.10', license: 'GPLv3', meson_version: '>=0.49.0', - default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ], + default_options: [ + 'warning_level=1', + 'buildtype=debugoptimized', + 'c_std=gnu11' + ] ) i18n = import('i18n') @@ -43,3 +47,4 @@ subdir('protocols') subdir('eek') subdir('src') subdir('po') +subdir('tests') diff --git a/meson_options.txt b/meson_options.txt index b74814dd..339e1ba3 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1 +1,8 @@ -option('depdatadir', type : 'string', value : '', description : 'System data path. Will be searched for definitions instead of datadir when provided') +option('depdatadir', + type : 'string', + value : '', + description : 'System data path. Will be searched for definitions instead of datadir when provided') + +option('tests', + type: 'boolean', value: true, + description: 'Whether to compile unit tests') diff --git a/src/meson.build b/src/meson.build index fefe5a80..271153b2 100644 --- a/src/meson.build +++ b/src/meson.build @@ -4,13 +4,16 @@ dbus_src = gnome.gdbus_codegen( join_paths(meson.source_root() / 'data' / 'dbus', 'sm.puri.OSK0.xml') ) -config_h = configure_file(input: 'config.h.in', output: 'config.h',configuration: conf_data) +config_h = configure_file( + input: 'config.h.in', + output: 'config.h', + configuration: conf_data +) sources = [ config_h, 'imservice.c', 'server-context-service.c', - 'server-main.c', 'wayland.c', '../eek/eek.c', '../eek/eek-container.c', @@ -71,11 +74,24 @@ rslib = static_library( rust_crate_type: 'staticlib' ) -squeekboard = executable('squeekboard', +libsqueekboard = static_library('libsqueekboard', sources, link_with: rslib, include_directories: [include_directories('..'), include_directories('../eek')], dependencies: deps, + c_args: [ + '-DTHEMESDIR="' + pkgdatadir + '/themes"', + '-DKEYBOARDSDIR="' + pkgdatadir + '/keyboards"', + '-DEEKBOARD_COMPILATION=1', + '-DEEK_COMPILATION=1'], +) + +squeekboard = executable('squeekboard', + 'server-main.c', + wl_proto_sources, + link_with: libsqueekboard, + include_directories: [include_directories('..'), include_directories('../eek')], + dependencies: deps, install: true, c_args: [ '-DTHEMESDIR="' + pkgdatadir + '/themes"', @@ -83,4 +99,3 @@ squeekboard = executable('squeekboard', '-DEEKBOARD_COMPILATION=1', '-DEEK_COMPILATION=1'], ) - diff --git a/tests/eek-simple-test.c b/tests/eek-simple-test.c index b2597b7c..1a2e1f6a 100644 --- a/tests/eek-simple-test.c +++ b/tests/eek-simple-test.c @@ -30,16 +30,15 @@ test_create (void) section = eek_keyboard_create_section (keyboard); g_assert (EEK_IS_SECTION(section)); eek_section_add_row (section, 2, EEK_ORIENTATION_HORIZONTAL); - key0 = eek_section_create_key (section, 1, 0, 0); + key0 = eek_section_create_key (section, "key0", 1, 0, 0); g_assert (EEK_IS_KEY(key0)); - key1 = eek_section_create_key (section, 2, 1, 0); + key1 = eek_section_create_key (section, "key1", 2, 1, 0); g_assert (EEK_IS_KEY(key1)); } int main (int argc, char **argv) { - g_type_init (); g_test_init (&argc, &argv, NULL); g_test_add_func ("/eek-simple-test/create", test_create); return g_test_run (); diff --git a/tests/eek-xml-test.c b/tests/eek-xml-test.c index 0ed814e4..a130aa3f 100644 --- a/tests/eek-xml-test.c +++ b/tests/eek-xml-test.c @@ -36,7 +36,9 @@ test_output_parse (void) layout = eek_xml_layout_new ("us", &error); g_assert_no_error (error); - keyboard = eek_keyboard_new (layout, 640, 480); + /* We don't need the context service to parse an XML file, so we can pass + NULL when creating a keyboard. */ + keyboard = eek_keyboard_new (NULL, layout, 640, 480); g_object_unref (layout); g_object_unref (keyboard); } @@ -44,7 +46,6 @@ test_output_parse (void) int main (int argc, char **argv) { - g_type_init (); g_test_init (&argc, &argv, NULL); gtk_init (&argc, &argv); /* for gdk_x11_display_get_xdisplay() */ diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 00000000..9dfe7162 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,49 @@ +if get_option('tests') + +test_env = [ + 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), + 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), + 'G_DEBUG=gc-friendly,fatal-warnings', + 'GSETTINGS_BACKEND=memory', + 'MALLOC_CHECK_=2' +] + +test_cflags = [ + '-I@0@/../src'.format(meson.current_source_dir()), + '-I@0@/../src'.format(meson.current_build_dir()), + '-DEEK_COMPILATION', + '-DEEKBOARD_COMPILATION' +] + +test_link_args = [ + '-fPIC', +] + +tests = [ + 'eek-simple-test', + 'eek-xml-test' +] + +foreach name : tests + + test_sources = [name + '.c'] + + t = executable( + name, + test_sources, + squeekboard_resources, + link_with: libsqueekboard, + c_args : test_cflags, + link_args: test_link_args, + dependencies: deps, # from src/meson.build + include_directories: [ + include_directories('..'), + include_directories('../eek') + ] + ) + + test(name, t, env: test_env) + +endforeach + +endif