[gtksourceview] testsuite: load syntax tests as part of testsuite



commit 24d3fc1f8afc3538ed66f68196307b661d88d33a
Author: Christian Hergert <chergert redhat com>
Date:   Thu Feb 11 12:49:17 2021 -0800

    testsuite: load syntax tests as part of testsuite
    
    This is a barebones test to make sure that we can load some of our files
    from the tests/syntax-highlighting/ directory. Ideally, we would process
    more of this so we can find errors with PCRE2 loading, but this is a first
    step in that direction.

 testsuite/meson.build   |   1 +
 testsuite/test-syntax.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 129 insertions(+)
---
diff --git a/testsuite/meson.build b/testsuite/meson.build
index a677d05c..bc00a4c3 100644
--- a/testsuite/meson.build
+++ b/testsuite/meson.build
@@ -33,6 +33,7 @@ testsuite_sources = [
   ['test-space-drawer'],
   ['test-stylescheme'],
   ['test-styleschememanager'],
+  ['test-syntax'],
   ['test-utils'],
   ['test-view'],
 ]
diff --git a/testsuite/test-syntax.c b/testsuite/test-syntax.c
new file mode 100644
index 00000000..6ee66f42
--- /dev/null
+++ b/testsuite/test-syntax.c
@@ -0,0 +1,128 @@
+/*
+ * This file is part of GtkSourceView
+ *
+ * Copyright 2021 Christian Hergert <chergert redhat com>
+ *
+ * GtkSourceView is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * GtkSourceView is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gtksourceview/gtksource.h>
+#include <gtksourceview/gtksourcebuffer-private.h>
+
+static void
+setup_search_paths (const char *basedir)
+{
+       GtkSourceLanguageManager *languages;
+       GtkSourceStyleSchemeManager *styles;
+       gchar *langs_path[2] = { NULL };
+       gchar *styles_path;
+
+  styles_path = g_build_filename (basedir, "data", "style", NULL);
+       styles = gtk_source_style_scheme_manager_get_default ();
+       gtk_source_style_scheme_manager_prepend_search_path (styles, styles_path);
+  g_free (styles_path);
+
+  langs_path[0] = g_build_filename (basedir, "data", "language-specs", NULL);
+       languages = gtk_source_language_manager_get_default ();
+       gtk_source_language_manager_set_search_path (languages, (const char * const *)langs_path);
+  g_free (langs_path[0]);
+}
+
+static void
+test_syntax (gconstpointer data)
+{
+  const char *filename = data;
+  GtkSourceLanguageManager *lm = gtk_source_language_manager_get_default ();
+  GtkSourceStyleSchemeManager *sm = gtk_source_style_scheme_manager_get_default ();
+  GtkSourceStyleScheme *s = gtk_source_style_scheme_manager_get_scheme (sm, "Adwaita");
+  GtkSourceLanguage *l;
+  GtkSourceBuffer *buffer;
+  GtkTextIter begin, end;
+  char *content_type;
+  GError *error = NULL;
+  char *contents;
+  gsize len;
+
+  g_file_get_contents (filename, &contents, &len, &error);
+  g_assert_no_error (error);
+  g_assert_nonnull (contents);
+  g_assert_cmpint (len, >, 0);
+
+  g_print ("%s\n", filename);
+  content_type = g_content_type_guess (filename, (const guint8 *)contents, len, NULL);
+  l = gtk_source_language_manager_guess_language (lm, filename, content_type);
+
+  if (l == NULL)
+    {
+      char *message = g_strdup_printf ("Skipping because cannot guess language for %s", filename);
+      g_test_skip (message);
+      g_free (message);
+      goto cleanup;
+    }
+
+  buffer = gtk_source_buffer_new (NULL);
+  gtk_text_buffer_set_text (GTK_TEXT_BUFFER (buffer), contents, len);
+  gtk_source_buffer_set_language (buffer, l);
+  gtk_source_buffer_set_highlight_syntax (buffer, TRUE);
+  gtk_source_buffer_set_style_scheme (buffer, s);
+
+  gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &begin, &end);
+  _gtk_source_buffer_update_syntax_highlight (buffer, &begin, &end, TRUE);
+
+  g_object_unref (buffer);
+
+  g_assert_nonnull (l);
+
+cleanup:
+  g_free (content_type);
+  g_free (contents);
+}
+
+gint
+main (gint   argc,
+      gchar *argv[])
+{
+  const char *srcdir = g_getenv ("G_TEST_SRCDIR");
+  char *path = g_build_filename (srcdir, "..", "tests", "syntax-highlighting", NULL);
+  GDir *dir;
+  GError *error = NULL;
+  const char *name;
+
+  g_assert_nonnull (srcdir);
+
+       g_test_init (&argc, &argv, NULL);
+
+  setup_search_paths (srcdir);
+
+  dir = g_dir_open (path, 0, &error);
+  g_assert_no_error (error);
+  g_assert_nonnull (dir);
+
+  while ((name = g_dir_read_name (dir)))
+    {
+      if (g_str_has_prefix (name, "file."))
+        {
+          char *testpath = g_strdup_printf ("/syntax-highlighting/%s", name);
+          char *filename = g_build_filename (path, name, NULL);
+          g_test_add_data_func_full (testpath, filename, test_syntax, g_free);
+          g_free (testpath);
+        }
+    }
+
+       return g_test_run ();
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]