[gnome-builder] libide/tweaks: make tests more automated
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/tweaks: make tests more automated
- Date: Sun, 31 Jul 2022 12:01:46 +0000 (UTC)
commit c1d4afb4e783c004deebad7ee15cd4ef30cb6f35
Author: Christian Hergert <chergert redhat com>
Date: Sun Jul 31 05:00:39 2022 -0700
libide/tweaks: make tests more automated
This moves to something a bit more like refspec, that allows us to have
a number of tests for UI merging and then compare to the expected output.
Of course, we'll have to update these a bunch while we implement the core
types, but it's a good start for what we need.
src/libide/tweaks/meson.build | 4 +--
src/libide/tweaks/tests/meson.build | 19 +++++++++++
src/libide/tweaks/{ => tests}/test-tweaks.c | 50 +++++++++++++++++++++++++----
src/libide/tweaks/tests/test1/0.ui | 17 ++++++++++
src/libide/tweaks/tests/test1/1.ui | 13 ++++++++
src/libide/tweaks/tests/test1/2.ui | 32 ++++++++++++++++++
src/libide/tweaks/tests/test1/expected.xml | 11 +++++++
7 files changed, 136 insertions(+), 10 deletions(-)
---
diff --git a/src/libide/tweaks/meson.build b/src/libide/tweaks/meson.build
index 59a85da9d..bcde99295 100644
--- a/src/libide/tweaks/meson.build
+++ b/src/libide/tweaks/meson.build
@@ -73,6 +73,4 @@ gnome_builder_public_headers += files(libide_tweaks_public_headers)
gnome_builder_include_subdirs += libide_tweaks_header_subdir
gnome_builder_gir_extra_args += ['--c-include=libide-tweaks.h', '-DIDE_TWEAKS_COMPILATION']
-test_tweaks = executable('test-tweaks', 'test-tweaks.c',
- dependencies: [libide_tweaks_dep],
-)
+subdir('tests')
diff --git a/src/libide/tweaks/tests/meson.build b/src/libide/tweaks/tests/meson.build
new file mode 100644
index 000000000..f7d8ea0ae
--- /dev/null
+++ b/src/libide/tweaks/tests/meson.build
@@ -0,0 +1,19 @@
+test_tweaks = executable('test-tweaks', 'test-tweaks.c',
+ dependencies: [libide_tweaks_dep],
+)
+
+test_tweaks_runs = [
+ # name subdir reference input files
+ ['test1', 'test1', 'expected.xml', ['0.ui', '1.ui', '2.ui']],
+]
+
+foreach test_tweaks_run: test_tweaks_runs
+ test_name = test_tweaks_run.get(0)
+ test_subdir = join_paths(meson.current_source_dir(), test_tweaks_run.get(1))
+ test_expected = join_paths(test_subdir, test_tweaks_run.get(2))
+ test_sources = []
+ foreach test_tweaks_input: test_tweaks_run.get(3)
+ test_sources += join_paths(test_subdir, test_tweaks_input)
+ endforeach
+ test('tweaks-@0@'.format(test_name), test_tweaks, args: ['--expected', test_expected]+test_sources)
+endforeach
diff --git a/src/libide/tweaks/test-tweaks.c b/src/libide/tweaks/tests/test-tweaks.c
similarity index 51%
rename from src/libide/tweaks/test-tweaks.c
rename to src/libide/tweaks/tests/test-tweaks.c
index f26decfe7..190ddeb47 100644
--- a/src/libide/tweaks/test-tweaks.c
+++ b/src/libide/tweaks/tests/test-tweaks.c
@@ -29,11 +29,29 @@ int
main (int argc,
char *argv[])
{
+ g_autoptr(GOptionContext) context = NULL;
g_autoptr(IdeTweaks) tweaks = NULL;
g_autoptr(GString) string = NULL;
+ g_autoptr(GError) error = NULL;
+ g_autofree char *expected = NULL;
+ g_autofree char *expected_contents = NULL;
+ gsize len = 0;
+ const GOptionEntry entries[] = {
+ { "expected", 'e', 0, G_OPTION_ARG_FILENAME, &expected, "File containing expected output" },
+ { NULL }
+ };
_ide_tweaks_init ();
+ context = g_option_context_new ("- test tweaks ui merging");
+ g_option_context_add_main_entries (context, entries, NULL);
+
+ if (!g_option_context_parse (context, &argc, &argv, &error))
+ {
+ g_printerr ("%s\n", error->message);
+ return EXIT_FAILURE;
+ }
+
tweaks = ide_tweaks_new ();
string = g_string_new (NULL);
@@ -41,18 +59,36 @@ main (int argc,
{
const char *path = argv[i];
g_autoptr(GFile) file = g_file_new_for_commandline_arg (path);
- g_autoptr(GError) error = NULL;
if (!ide_tweaks_load_from_file (tweaks, file, NULL, &error))
- {
- g_printerr ("Failed to parse %s: %s\n", path, error->message);
- return EXIT_FAILURE;
- }
+ g_error ("Failed to parse %s: %s", path, error->message);
}
_ide_tweaks_item_printf (IDE_TWEAKS_ITEM (tweaks), string, 0);
- g_print ("%s", string->str);
+ if (!expected)
+ {
+ g_print ("%s", string->str);
+ return EXIT_SUCCESS;
+ }
+
+ if (!g_file_get_contents (expected, &expected_contents, &len, &error))
+ g_error ("Failed to load expected contents: %s: %s", expected, error->message);
+
+ if (ide_str_equal0 (expected_contents, string->str))
+ return EXIT_SUCCESS;
+
+ g_printerr ("Contents did not match.\n"
+ "\n"
+ "Expected:\n"
+ "=========\n"
+ "%s\n"
+ "\n"
+ "Got:\n"
+ "====\n"
+ "%s\n",
+ expected_contents,
+ string->str);
- return EXIT_SUCCESS;
+ return EXIT_FAILURE;
}
diff --git a/src/libide/tweaks/tests/test1/0.ui b/src/libide/tweaks/tests/test1/0.ui
new file mode 100644
index 000000000..f56b76690
--- /dev/null
+++ b/src/libide/tweaks/tests/test1/0.ui
@@ -0,0 +1,17 @@
+<interface>
+ <template class="IdeTweaks">
+ <child>
+ <object class="IdeTweaksSection" id="visual_section">
+ <child>
+ <object class="IdeTweaksPage" id="appearance_page">
+ <child>
+ <object class="IdeTweaksGroup" id="appearance_group">
+ <property name="title" translatable="yes">Original</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/libide/tweaks/tests/test1/1.ui b/src/libide/tweaks/tests/test1/1.ui
new file mode 100644
index 000000000..37022f03d
--- /dev/null
+++ b/src/libide/tweaks/tests/test1/1.ui
@@ -0,0 +1,13 @@
+<interface>
+ <template class="IdeTweaks">
+ <child internal-child="visual_section">
+ <object class="IdeTweaksSection">
+ <child internal-child="appearance_page">
+ <object class="IdeTweaksPage">
+ <property name="title" translatable="yes">Appearance</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/libide/tweaks/tests/test1/2.ui b/src/libide/tweaks/tests/test1/2.ui
new file mode 100644
index 000000000..6e475d9e8
--- /dev/null
+++ b/src/libide/tweaks/tests/test1/2.ui
@@ -0,0 +1,32 @@
+<interface>
+ <template class="IdeTweaks">
+ <child internal-child="visual_section">
+ <object class="IdeTweaksSection">
+ <child internal-child="appearance_page">
+ <object class="IdeTweaksPage">
+ <child internal-child="appearance_group">
+ <object class="IdeTweaksGroup">
+ <property name="title" translatable="yes">Appearance</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="IdeTweaksSection" id="foundry_section">
+ <child>
+ <object class="IdeTweaksPage" id="build_page">
+ <property name="title" translatable="yes">Build</property>
+ </object>
+ </child>
+ <child>
+ <object class="IdeTweaksPage" id="debugger_page">
+ <property name="title" translatable="yes">Debugger</property>
+ <property name="icon-name">builder-debugger-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/src/libide/tweaks/tests/test1/expected.xml b/src/libide/tweaks/tests/test1/expected.xml
new file mode 100644
index 000000000..f291ef6e9
--- /dev/null
+++ b/src/libide/tweaks/tests/test1/expected.xml
@@ -0,0 +1,11 @@
+<IdeTweaks id="IdeTweaks" id="IdeTweaks" sort-key="">
+ <IdeTweaksSection id="visual_section" id="visual_section" sort-key="">
+ <IdeTweaksPage id="appearance_page" id="appearance_page" sort-key="" icon-name="" title="Appearance">
+ <IdeTweaksGroup id="appearance_group" id="appearance_group" sort-key="" title="Appearance"/>
+ </IdeTweaksPage>
+ </IdeTweaksSection>
+ <IdeTweaksSection id="foundry_section" id="foundry_section" sort-key="">
+ <IdeTweaksPage id="build_page" id="build_page" sort-key="" icon-name="" title="Build"/>
+ <IdeTweaksPage id="debugger_page" id="debugger_page" sort-key="" icon-name="builder-debugger-symbolic"
title="Debugger"/>
+ </IdeTweaksSection>
+</IdeTweaks>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]