diff options
author | Christian Hergert <chergert@redhat.com> | 2022-07-13 23:25:40 -0700 |
---|---|---|
committer | Sébastien Wilmet <swilmet@informatique-libre.be> | 2022-07-14 11:24:20 +0000 |
commit | a5ad8113260ac26ea0f9b30d160623c1d40e5d88 (patch) | |
tree | 128334cef1b86f45268bdddfa0770ee428db18f5 | |
parent | c8dd470f313d3c3656091a000852c7435fc44eae (diff) | |
download | gtksourceview-a5ad8113260ac26ea0f9b30d160623c1d40e5d88.tar.gz |
testsuite: backport test-language-specs
This adds a test to the testsuite that tries to load every language-spec
that is bundled with GtkSourceView. It generally catches errors that would
cause GtkSourceView to throw warnings or critical errors when loading.
Currently, it fails due to latex.lang missing a def:text style which we
can cherry-pick the fix from 5.x for.
-rw-r--r-- | testsuite/meson.build | 1 | ||||
-rw-r--r-- | testsuite/test-language-specs.c | 97 |
2 files changed, 98 insertions, 0 deletions
diff --git a/testsuite/meson.build b/testsuite/meson.build index 08d0a7e5..02e248e1 100644 --- a/testsuite/meson.build +++ b/testsuite/meson.build @@ -26,6 +26,7 @@ testsuite_sources = [ ['test-iter'], ['test-language'], ['test-languagemanager'], + ['test-language-specs'], ['test-mark'], ['test-printcompositor'], ['test-regex'], diff --git a/testsuite/test-language-specs.c b/testsuite/test-language-specs.c new file mode 100644 index 00000000..4e4cf9da --- /dev/null +++ b/testsuite/test-language-specs.c @@ -0,0 +1,97 @@ +#include <gtksourceview/gtksource.h> + +static GHashTable *skipped; + +static void +test_func (gconstpointer data) +{ + GtkSourceLanguageManager *lm = gtk_source_language_manager_get_default (); + const char *language_id = data; + GtkSourceLanguage *l; + GtkSourceBuffer *buffer; + + g_assert_true (GTK_SOURCE_IS_LANGUAGE_MANAGER (lm)); + g_assert_nonnull (data); + + if (g_hash_table_contains (skipped, language_id)) + { + char *message = g_strdup_printf ("skipping known failure for %s", language_id); + g_test_skip (message); + g_free (message); + return; + } + + l = gtk_source_language_manager_get_language (lm, language_id); + g_assert_nonnull (l); + + buffer = g_object_new (GTK_SOURCE_TYPE_BUFFER, + "language", l, + "highlight-syntax", TRUE, + NULL); + + g_object_unref (buffer); +} + +int +main (int argc, + char *argv[]) +{ + GtkSourceLanguageManager *lm; + const char * const *ids; + char *language_specs; + char *search_path[2]; + const char *srcdir = g_getenv ("G_TEST_SRCDIR"); + GPtrArray *strings; + int ret; + + g_assert_nonnull (srcdir); + + language_specs = g_build_filename (srcdir, "..", "data", "language-specs", NULL); + search_path[0] = language_specs; + search_path[1] = 0; + + g_test_init (&argc, &argv, NULL); + gtk_source_init (); + + skipped = g_hash_table_new (g_str_hash, g_str_equal); + + g_hash_table_add (skipped, (char *)"gdb-log"); + g_hash_table_add (skipped, (char *)"jsdoc"); + g_hash_table_add (skipped, (char *)"js-expr"); + g_hash_table_add (skipped, (char *)"js-fn"); + g_hash_table_add (skipped, (char *)"js-lit"); + g_hash_table_add (skipped, (char *)"js-mod"); + g_hash_table_add (skipped, (char *)"js-st"); + g_hash_table_add (skipped, (char *)"js-val"); + g_hash_table_add (skipped, (char *)"typescript-js-expr"); + g_hash_table_add (skipped, (char *)"typescript-js-fn"); + g_hash_table_add (skipped, (char *)"typescript-js-lit"); + g_hash_table_add (skipped, (char *)"typescript-js-mod"); + g_hash_table_add (skipped, (char *)"typescript-js-st"); + g_hash_table_add (skipped, (char *)"typescript-type-expr"); + g_hash_table_add (skipped, (char *)"typescript-type-gen"); + g_hash_table_add (skipped, (char *)"typescript-type-lit"); + g_hash_table_add (skipped, (char *)"gtk-doc"); + g_hash_table_add (skipped, (char *)"testv1"); + + strings = g_ptr_array_new_with_free_func (g_free); + lm = gtk_source_language_manager_get_default (); + gtk_source_language_manager_set_search_path (lm, search_path); + + ids = gtk_source_language_manager_get_language_ids (lm); + + for (guint i = 0; ids[i]; i++) + { + char *path = g_strdup_printf ("/Language/%s/load", ids[i]); + g_ptr_array_add (strings, path); + g_test_add_data_func (path, ids[i], test_func); + } + + ret = g_test_run (); + + g_ptr_array_unref (strings); + g_hash_table_unref (skipped); + g_free (language_specs); + + return ret; +} |