summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorChristian Hergert <chergert@redhat.com>2021-07-15 16:15:22 -0700
committerChristian Hergert <chergert@redhat.com>2021-07-15 16:15:22 -0700
commit45bd8197c5f1e63e6441a1b53fefb5f70a4d3868 (patch)
tree0d01e67317c2b6b46d8955e2faf3c2a6b7ee5718 /testsuite
parent110f55d2f4149401fa048eeb017adba84b686142 (diff)
downloadgtksourceview-45bd8197c5f1e63e6441a1b53fefb5f70a4d3868.tar.gz
testsuite: add test to load all language specs
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/meson.build1
-rw-r--r--testsuite/test-language-specs.c97
2 files changed, 98 insertions, 0 deletions
diff --git a/testsuite/meson.build b/testsuite/meson.build
index bc00a4c3..4bd0f6ea 100644
--- a/testsuite/meson.build
+++ b/testsuite/meson.build
@@ -25,6 +25,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..f1f54e90
--- /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 (GTK_SOURCE_IS_LANGUAGE_MANAGER (lm));
+ g_assert (data != NULL);
+
+ 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, (const char * const *)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;
+}