File: test-load-layouts.c

package info (click to toggle)
phosh-osk-stub 0.46.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,132 kB
  • sloc: ansic: 11,191; xml: 1,567; python: 142; makefile: 15; sh: 10
file content (80 lines) | stat: -rw-r--r-- 2,810 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 * Copyright (C) 2023 The Phosh Developers
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 * Author: Guido Günther <agx@sigxcpu.org>
 */

#include "pos-main.h"
#include "pos-osk-widget.h"
#include "pos-resources.h"

#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-xkb-info.h>

#include <glib.h>

static void
test_load_layouts (void)
{
  g_autoptr (GResource) pos_resource = NULL;
  g_autoptr (GError) err = NULL;
  g_auto (GStrv) names = NULL;
  g_autoptr (GRegex) lang_re = g_regex_new ("^[a-z]{2,3}$",
                                            G_REGEX_DEFAULT,
                                            G_REGEX_MATCH_DEFAULT,
                                            NULL);
  g_autoptr (GRegex) region_re = g_regex_new ("^[a-z]{2,8}$",
                                            G_REGEX_DEFAULT,
                                            G_REGEX_MATCH_DEFAULT,
                                            NULL);
  g_autoptr (GnomeXkbInfo) xkbinfo = gnome_xkb_info_new ();

  pos_init ();
  pos_resource = pos_get_resource ();
  g_assert_nonnull (pos_resource);

  names = g_resource_enumerate_children (pos_resource,
                                         "/mobi/phosh/osk-stub/layouts",
                                         G_RESOURCE_LOOKUP_FLAGS_NONE,
                                         &err);
  g_assert_no_error (err);
  for (int i = 0; names[i]; i++) {
    PosOskWidget *osk_widget;
    g_autofree char *layout_id = NULL;
    const char *layout, *variant;

    osk_widget = g_object_ref_sink (pos_osk_widget_new (PHOSH_OSK_FEATURE_DEFAULT));
    g_assert (g_str_has_suffix (names[i], ".json"));
    layout_id = g_strndup (names[i], strlen (names[i]) - strlen (".json"));
    g_test_message ("Loading layout %s", layout_id);

    if (g_strcmp0 (names[i], "terminal.json")) {
      g_assert_true (gnome_xkb_info_get_layout_info (xkbinfo, layout_id, NULL, NULL, &layout, &variant));
      pos_osk_widget_set_layout (osk_widget, "doesnotmatter", layout_id, "Test", layout, variant, &err);
      g_assert_nonnull (pos_osk_widget_get_lang (osk_widget));
      g_assert_nonnull (pos_osk_widget_get_region (osk_widget));
      g_assert_true (g_regex_match (lang_re, pos_osk_widget_get_lang (osk_widget),
                                    G_REGEX_MATCH_DEFAULT,
                                    NULL));
      g_assert_true (g_regex_match (region_re, pos_osk_widget_get_region (osk_widget),
                                    G_REGEX_MATCH_DEFAULT,
                                    NULL));
    }

    g_assert_no_error (err);
    g_assert_finalize_object (osk_widget);
  }
}


int
main (int argc, char *argv[])
{
  gtk_test_init (&argc, &argv, NULL);

  g_test_add_func ("/pos/completer/load_layouts", test_load_layouts);

  return g_test_run ();
}