From c360cbd830943a4bfb0ece9cc07b99a426dc2121 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Mon, 9 Apr 2018 11:57:09 +0900 Subject: [PATCH] src/tests: Add ibus-compose.env --- src/tests/ibus-compose.env | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/tests/ibus-compose.env diff --git a/src/tests/ibus-compose.env b/src/tests/ibus-compose.env new file mode 100644 index 00000000..734ab8fa --- /dev/null +++ b/src/tests/ibus-compose.env @@ -0,0 +1,3 @@ +LANG=el_GR.UTF-8 +LANG=fi_FI.UTF-8 +LANG=pt_BR.UTF-8 -- 2.21.0 From b497de5bc6525769e03b65c73fc991d4aa006223 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Wed, 20 Mar 2019 17:44:26 +0900 Subject: [PATCH] test: Set GTK_IM_MODULE in test-console.sh --- src/tests/Makefile.am | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index e337a59b..e2ff5ea7 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -3,7 +3,7 @@ # ibus - The Input Bus # # Copyright (c) 2007-2015 Peng Huang -# Copyright (c) 2015-2018 Takao Fujiwara +# Copyright (c) 2015-2019 Takao Fujiwara # Copyright (c) 2007-2018 Red Hat, Inc. # # This library is free software; you can redistribute it and/or @@ -78,7 +78,7 @@ TESTS_ENVIRONMENT = \ LOG_COMPILER = $(srcdir)/runtest -EXTRA_DIST = runtest +EXTRA_DIST = runtest ibus-compose.env ibus_bus_SOURCES = ibus-bus.c ibus_bus_LDADD = $(prog_ldadd) -- 2.21.0 From ac492f31b435b9464d591094d470bc94027168e8 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Fri, 28 Jun 2019 21:15:07 +0900 Subject: [PATCH] src/tests: Fix ibus-compose for IBusComposeTableEx Recently IBusComposeTablEx has been integrated and the return value of ibus_compose_table_new_with_file() is also changed and ibus-compose needs to be updated. Clear IBusComposeTablePrivate in ibus_compose_table_list_add_array() for the ibus-compose testing. Clear compose_buffer in IBusEngineSimple. Use g_get_language_names_with_category instead() of g_get_locale_variants(). Add ibus-compose.emoji for the tests of long compose sequences and multiple compose output characters. IBUS_COMPOSE_CACHE_DIR variable is added for the temporary caches. --- src/ibuscomposetable.c | 15 ++-- src/tests/Makefile.am | 2 +- src/tests/ibus-compose.c | 10 +++ src/tests/ibus-compose.emoji | 11 +++ src/tests/ibus-compose.env | 1 + src/tests/runtest | 4 +- 9 files changed, 174 insertions(+), 47 deletions(-) create mode 100644 src/tests/ibus-compose.emoji diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c index 4ac54e25..5fd37f10 100644 --- a/src/ibuscomposetable.c +++ b/src/ibuscomposetable.c @@ -497,13 +497,18 @@ static gchar * ibus_compose_hash_get_cache_path (guint32 hash) { gchar *basename = NULL; + const gchar *cache_dir; gchar *dir = NULL; gchar *path = NULL; basename = g_strdup_printf ("%08x.cache", hash); - dir = g_build_filename (g_get_user_cache_dir (), - "ibus", "compose", NULL); + if ((cache_dir = g_getenv ("IBUS_COMPOSE_CACHE_DIR"))) { + dir = g_strdup (cache_dir); + } else { + dir = g_build_filename (g_get_user_cache_dir (), + "ibus", "compose", NULL); + } path = g_build_filename (dir, basename, NULL); if (g_mkdir_with_parents (dir, 0755) != 0) { g_warning ("Failed to mkdir %s", dir); @@ -1068,7 +1073,7 @@ ibus_compose_table_list_add_array (GSList *compose_tables, for (i = 0; i < length; i++) ibus_compose_seqs[i] = data[i]; - compose_table = g_new (IBusComposeTable, 1); + compose_table = g_new0 (IBusComposeTable, 1); compose_table->data = ibus_compose_seqs; compose_table->max_seq_len = max_seq_len; compose_table->n_seqs = n_seqs; diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index e2ff5ea7..a58504a3 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -78,7 +78,7 @@ TESTS_ENVIRONMENT = \ LOG_COMPILER = $(srcdir)/runtest -EXTRA_DIST = runtest ibus-compose.env +EXTRA_DIST = runtest ibus-compose.emoji ibus-compose.env ibus_bus_SOURCES = ibus-bus.c ibus_bus_LDADD = $(prog_ldadd) diff --git a/src/tests/ibus-compose.c b/src/tests/ibus-compose.c index e2ff5ea7..a58504a3 100644 --- a/src/tests/ibus-compose.c +++ b/src/tests/ibus-compose.c @@ -7,8 +7,10 @@ #define NC "\033[0m" IBusBus *m_bus; +gchar *m_compose_file; IBusComposeTable *m_compose_table; IBusEngine *m_engine; +gchar *m_srcdir; int m_retval; static gboolean window_focus_in_event_cb (GtkWidget *entry, @@ -31,8 +33,11 @@ create_engine_cb (IBusFactory *factory, engine_path, ibus_bus_get_connection (m_bus)); g_free (engine_path); - langs = g_get_language_names (); - for (l = langs; *l; l++) { + if (m_compose_file) { + compose_path = g_build_filename (m_srcdir, m_compose_file, NULL); + } else { + langs = g_get_language_names (); + for (l = langs; *l; l++) { if (g_str_has_prefix (*l, "en_US")) break; if (g_strcmp0 (*l, "C") == 0) @@ -41,10 +46,11 @@ create_engine_cb (IBusFactory *factory, *l, "Compose", NULL); if (g_file_test (compose_path, G_FILE_TEST_EXISTS)) break; g_free (compose_path); compose_path = NULL; + } } if (compose_path != NULL) { m_compose_table = ibus_compose_table_new_with_file (compose_path); @@ -248,6 +254,9 @@ main (int argc, char *argv[]) ibus_init (); gtk_init (&argc, &argv); + m_srcdir = argc > 1 ? g_strdup (argv[1]) : g_strdup ("."); + m_compose_file = g_strdup (g_getenv ("COMPOSE_FILE")); + if (!register_ibus_engine ()) return -1; diff --git a/src/tests/ibus-compose.emoji b/src/tests/ibus-compose.emoji new file mode 100644 index 00000000..7fbf82cf --- /dev/null +++ b/src/tests/ibus-compose.emoji @@ -0,0 +1,2 @@ + : "♌" U264C # LEO + : "∫" diff --git a/src/tests/ibus-compose.env b/src/tests/ibus-compose.env index 734ab8fa..a9e289e4 100644 --- a/src/tests/ibus-compose.env +++ b/src/tests/ibus-compose.env @@ -1,3 +1,4 @@ LANG=el_GR.UTF-8 LANG=fi_FI.UTF-8 LANG=pt_BR.UTF-8 +LANG=en_US.UTF-8 COMPOSE_FILE=ibus-compose.emoji diff --git a/src/tests/runtest b/src/tests/runtest index 4e980c71..35ccc5a0 100755 --- a/src/tests/runtest +++ b/src/tests/runtest @@ -184,7 +184,9 @@ run_test_case() export GTK_IM_MODULE=ibus fi - "../$tst" ${1+"$@"} + export IBUS_COMPOSE_CACHE_DIR=$PWD + + "../$tst" ../$top_srcdir/src/tests ${1+"$@"} retval=`expr $retval \| $?` -- 2.21.0 From 76dec798d5cf6cdaa96c3373f9c0e1cd13eb31f5 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Fri, 28 Jun 2019 21:28:32 +0900 Subject: [PATCH] src/tests: Use GTest for ibus-compose --- src/tests/ibus-compose.c | 45 ++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/tests/ibus-compose.c b/src/tests/ibus-compose.c index e1911b32..09c687c2 100644 --- a/src/tests/ibus-compose.c +++ b/src/tests/ibus-compose.c @@ -11,7 +11,6 @@ gchar *m_compose_file; IBusComposeTable *m_compose_table; IBusEngine *m_engine; gchar *m_srcdir; -int m_retval; static gboolean window_focus_in_event_cb (GtkWidget *entry, GdkEventFocus *event, @@ -111,8 +110,7 @@ register_ibus_engine () static gboolean finit (gpointer data) { - m_retval = -1; - g_warning ("time out"); + g_test_incomplete ("time out"); gtk_main_quit (); return FALSE; } @@ -127,7 +125,9 @@ set_engine_cb (GObject *object, GAsyncRe int index_stride; if (!ibus_bus_set_global_engine_async_finish (bus, res, &error)) { - g_warning ("set engine failed: %s", error->message); + gchar *msg = g_strdup_printf ("set engine failed: %s", error->message); + g_test_incomplete (msg); + g_free (msg); g_error_free (error); return; } @@ -210,7 +210,7 @@ window_inserted_text_cb (GtkEntryBuffer test = GREEN "PASS" NC; } else { test = RED "FAIL" NC; - m_retval = -1; + g_test_fail (); } g_print ("%05d/%05d %s expected: %04X typed: %04X\n", seq, @@ -249,20 +249,39 @@ create_window () gtk_widget_show_all (window); } +static void +test_compose (void) +{ + if (!register_ibus_engine ()) { + g_test_fail (); + return; + } + + create_window (); + gtk_main (); + +} + int main (int argc, char *argv[]) { + const gchar *test_name; + gchar *test_path; + ibus_init (); + g_test_init (&argc, &argv, NULL); gtk_init (&argc, &argv); m_srcdir = argc > 1 ? g_strdup (argv[1]) : g_strdup ("."); m_compose_file = g_strdup (g_getenv ("COMPOSE_FILE")); +#if GLIB_CHECK_VERSION (2, 58, 0) + test_name = g_get_language_names_with_category ("LC_CTYPE")[0]; +#else + test_name = g_getenv ("LANG"); +#endif + test_path = g_build_filename ("/ibus-compose", test_name, NULL); + g_test_add_func (test_path, test_compose); + g_free (test_path); - if (!register_ibus_engine ()) - return -1; - - create_window (); - gtk_main (); - - return m_retval; + return g_test_run (); } -- 2.21.0 From af00f4156b5c79c526eab18c49da80affd41ebee Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Fri, 12 Jul 2019 21:12:38 +0900 Subject: [PATCH] src/tests: Install IBus tests into gnome-desktop-testing --- configure.ac | 13 +++++++++++ src/tests/Makefile.am | 39 ++++++++++++++++++++++++++++++- src/tests/ibus-compose-locales.in | 23 ++++++++++++++++++ src/tests/ibus-compose.c | 10 ++++++-- src/tests/meta.test.in | 4 ++++ src/tests/runtest | 4 ++-- 6 files changed, 88 insertions(+), 5 deletions(-) create mode 100755 src/tests/ibus-compose-locales.in create mode 100644 src/tests/meta.test.in diff --git a/configure.ac b/configure.ac index b5a87b56..f1df3ac1 100644 --- a/configure.ac +++ b/configure.ac @@ -595,6 +595,18 @@ PKG_CHECK_MODULES(XTEST, ) AM_CONDITIONAL([ENABLE_XTEST], [test x"$enable_xtest" = x"yes"]) +# --enable-install-tests +AC_ARG_ENABLE(install-tests, + AS_HELP_STRING([--enable-install-tests], + [Enable to install tests]), + [enable_install_tests=$enableval], + [enable_install_tests=no] +) +AM_CONDITIONAL([ENABLE_INSTALL_TESTS], [test x"$enable_install_tests" = x"yes"]) +if test x"$enable_install_tests" = x"no"; then + enable_install_tests="no (disabled, use --enable-install-tests to enable)" +fi + # --disable-emoji-dict option. AC_ARG_ENABLE(emoji-dict, @@ -773,5 +785,6 @@ Build options: Enable Unicode dict $enable_unicode_dict UCD directory $UCD_DIR Run test cases $enable_tests + Install tests $enable_install_tests ]) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index a58504a3..ff31111b 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -78,7 +78,44 @@ TESTS_ENVIRONMENT = \ LOG_COMPILER = $(srcdir)/runtest -EXTRA_DIST = runtest ibus-compose.emoji ibus-compose.env +if ENABLE_INSTALL_TESTS +test_metas_in = meta.test.in +test_execs = $(TESTS:ibus-compose=ibus-compose-locales) +test_metas = $(addsuffix .test, $(test_execs)) +test_sources_DATA = \ + $(test_metas) \ + ibus-compose.emoji \ + ibus-compose.env \ + $(NULL) +test_sourcesdir = $(datadir)/installed-tests/ibus + +test_execs_PROGRAMS = $(TESTS) +if ENABLE_GTK3 +test_execs_SCRIPTS = ibus-compose-locales +endif +test_execsdir = $(libexecdir)/installed-tests/ibus +endif + +$(test_metas): $(test_metas_in) $(test_programs) + f=`echo $@ | sed -e 's/\.test//'`; \ + TEST_EXEC=$(test_execsdir)/$$f; \ + sed -e "s|@TEST_EXEC[@]|$$TEST_EXEC|g" $(test_metas_in) > $@.tmp; \ + mv $@.tmp $@; \ + $(NULL) + +ibus-compose-locales: ibus-compose-locales.in + SRCDIR=$(test_sourcesdir); \ + sed -e "s|@SRCDIR[@]|$$SRCDIR|g" $< > $@.tmp; \ + mv $@.tmp $@; \ + $(NULL) + +EXTRA_DIST = \ + $(test_metas_in) \ + runtest \ + ibus-compose.emoji \ + ibus-compose.env \ + ibus-compose-locales.in \ + $(NULL) ibus_bus_SOURCES = ibus-bus.c ibus_bus_LDADD = $(prog_ldadd) diff --git a/src/tests/ibus-compose-locales.in b/src/tests/ibus-compose-locales.in new file mode 100755 index 00000000..8d2384d1 --- /dev/null +++ b/src/tests/ibus-compose-locales.in @@ -0,0 +1,23 @@ +#!/bin/sh + +SRCDIR=@SRCDIR@ +BUILDDIR=`dirname $0` + + +export IBUS_COMPOSE_CACHE_DIR=$PWD + +for var in `cat $SRCDIR/ibus-compose.env` +do + IS_COMMENT=`echo "$var" | grep "^#"` + if [ "x$IS_COMMENT" != x ] ; then + continue + fi + env $var $BUILDDIR/ibus-compose $SRCDIR $@ + + CACHE_FILES=`ls *.cache` + if [ x"$CACHE_FILES" != x ] ; then + echo "Clean $CACHE_FILES" + rm $CACHE_FILES + fi +done + diff --git a/src/tests/ibus-compose.c b/src/tests/ibus-compose.c index 09c687c2..c8d3c126 100644 --- a/src/tests/ibus-compose.c +++ b/src/tests/ibus-compose.c @@ -351,6 +347,14 @@ main (int argc, char *argv[]) ibus_init (); g_test_init (&argc, &argv, NULL); + /* FIXME: + * IBusIMContext opens GtkIMContextSimple as the slave and + * GtkIMContextSimple opens the compose table on el_GR.UTF-8, and the + * multiple outputs in el_GR's compose causes a warning in gtkcomposetable + * and the warning always causes a fatal in GTest: + " "GTK+ supports to output one char only: " + */ + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); gtk_init (&argc, &argv); m_srcdir = argc > 1 ? g_strdup (argv[1]) : g_strdup ("."); diff --git a/src/tests/meta.test.in b/src/tests/meta.test.in new file mode 100644 index 00000000..ae2b2991 --- /dev/null +++ b/src/tests/meta.test.in @@ -0,0 +1,4 @@ +[Test] +Type=session +Exec=@TEST_EXEC@ --tap +Output=TAP diff --git a/src/tests/runtest b/src/tests/runtest index 35ccc5a0..1fcc9283 100755 --- a/src/tests/runtest +++ b/src/tests/runtest @@ -200,7 +200,7 @@ if test -f $envfile ; then ENVS="`cat $envfile`" fi; if test x"$ENVS" = x ; then - run_test_case + run_test_case $@ else LANG_backup=$LANG i=1 @@ -212,7 +212,7 @@ else export $e echo "Run `func_basename $tst` on $e" echo "=======================" - run_test_case + run_test_case $@ echo "" i=`expr $i + 1` done -- 2.21.0 From 2a4f9518d42b618d8111fa5f9f885757524758a0 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Fri, 12 Jul 2019 21:12:40 +0900 Subject: [PATCH] src/tests: Rename test-console.sh to ibus-desktop-testing-runner --- src/tests/Makefile.am | 9 +++++++++ .../tests/ibus-desktop-testing-runner.in | 0 2 files changed, 9 insertions(+) rename test/test-console.sh => src/tests/ibus-desktop-testing-runner.in (100%) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index ff31111b..b9aad29a 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -79,6 +79,7 @@ TESTS_ENVIRONMENT = \ LOG_COMPILER = $(srcdir)/runtest if ENABLE_INSTALL_TESTS +bin_SCRIPTS = ibus-desktop-testing-runner test_metas_in = meta.test.in test_execs = $(TESTS:ibus-compose=ibus-compose-locales) test_metas = $(addsuffix .test, $(test_execs)) @@ -109,12 +110,20 @@ ibus-compose-locales: ibus-compose-locales.in mv $@.tmp $@; \ $(NULL) + ibus-desktop-testing-runner.in \ +ibus-desktop-testing-runner: ibus-desktop-testing-runner.in + SRCDIR=$(test_sourcesdir); \ + sed -e "s|@SRCDIR[@]|$$SRCDIR|g" $< > $@.tmp; \ + mv $@.tmp $@; \ + $(NULL) + EXTRA_DIST = \ $(test_metas_in) \ runtest \ ibus-compose.emoji \ ibus-compose.env \ ibus-compose-locales.in \ + ibus-desktop-testing-runner.in \ $(NULL) ibus_bus_SOURCES = ibus-bus.c diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in new file mode 100755 index 00000000..7fbf82cf --- /dev/null +++ b/src/tests/ibus-desktop-testing-runner.in @@ -0,0 +1,255 @@ +#!/bin/sh +# -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- +# vim:set noet ts=4: +# +# ibus-anthy - The Anthy engine for IBus +# +# Copyright (c) 2018-2019 Takao Fujiwara +# Copyright (c) 2018 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# This test runs /usr/bin/ibus-daemon after install ibus +# +# # init 3 +# Login as root +# # /root/ibus/tests/test-console.sh --tests ibus-compose \ +# --builddir /root/ibus/src/tests --srcdir /root/ibus/src/tests + +PROGNAME=`basename $0` +VERSION=0.1 +DISPLAY=:99.0 +BUILDDIR="." +SRCDIR="." +TEST_LOG=test-suite.log +HAVE_GRAPHICS=1 +DESKTOP_COMMAND="gnome-session" +PID_XORG=0 +PID_GNOME_SESSION=0 +TESTS="" +GREEN='\033[0;32m' +RED='\033[0;31m' +NC='\033[0m' + +usage() +{ + echo -e \ +"This test runs /usr/bin/ibus-daemon after install ibus\n" \ +"$PROGNAME [OPTIONS…]\n" \ +"\n" \ +"OPTIONS:\n" \ +"-h, --help This help\n" \ +"-v, --version Show version\n" \ +"-b, --builddir=BUILDDIR Set the BUILDDIR\n" \ +"-s, --srcdir=SOURCEDIR Set the SOURCEDIR\n" \ +"-c, --no-graphics Use Xvfb instead of Xorg\n" \ +"-d, --desktop=DESKTOP Run DESTKTOP. The default is gnome-session\n" \ +"-t, --tests=\"TESTS...\" Run TESTS programs which is separated by space\n" \ +"" +} + +parse_args() +{ + # This is GNU getopt. "sudo port getopt" in BSD? + ARGS=`getopt -o hvb:s:cd:t: --long help,version,builddir:,srcdir:,no-graphics,desktop:,tests:\ + -- "$@"`; + eval set -- "$ARGS" + while [ 1 ] ; do + case "$1" in + -h | --help ) usage; exit 0;; + -v | --version ) echo -e "$VERSION"; exit 0;; + -b | --builddir ) BUILDDIR="$2"; shift 2;; + -s | --srcdir ) SRCDIR="$2"; shift 2;; + -c | --no-graphics ) HAVE_GRAPHICS=0; shift;; + -d | --desktop ) DESKTOP_COMMAND="$2"; shift 2;; + -t | --tests ) TESTS="$2"; shift 2;; + -- ) shift; break;; + * ) usage; exit 1;; + esac + done +} + +init_desktop() +{ + if test x$FORCE_TEST != x ; then + RUN_ARGS="$RUN_ARGS --force" + fi + + if test ! -f $HOME/.config/gnome-initial-setup-done ; then + if test ! -f /var/lib/AccountsService/users/$USER ; then + mkdir -p /var/lib/AccountsService/users + cat >> /var/lib/AccountsService/users/$USER << _EOF +[User] +Language=ja_JP.UTF-8 +XSession=gnome +SystemAccount=false +_EOF + fi + mkdir -p $HOME/.config + touch $HOME/.config/gnome-initial-setup-done + fi + + # Prevent from launching a XDG dialog + XDG_LOCALE_FILE="$HOME/.config/user-dirs.locale" + if test -f $XDG_LOCALE_FILE ; then + XDG_LANG_ORIG=`cat $XDG_LOCALE_FILE` + XDG_LANG_NEW=`echo $LANG | sed -e 's/\(.*\)\..*/\1/'` + if [ "$XDG_LANG_ORIG" != "$XDG_LANG_NEW" ] ; then + echo "Overriding XDG locale $XDG_LANG_ORIG with $XDG_LANG_NEW" + echo "$XDG_LANG_NEW" > $XDG_LOCALE_FILE + fi + fi +} + +run_dbus_daemon() +{ + a=`ps -ef | grep dbus-daemon | grep "\-\-system" | grep -v session | grep -v grep` + if test x"$a" = x ; then + eval `dbus-launch --sh-syntax` + fi + SUSER=`echo "$USER" | cut -c 1-7` + a=`ps -ef | grep dbus-daemon | grep "$SUSER" | grep -v gdm | grep session | grep -v grep` + if test x"$a" = x ; then + systemctl --user start dbus + export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus + fi + systemctl --user status dbus | col -b + ps -ef | grep dbus-daemon | grep "$SUSER" | grep -v gdm | egrep 'session|system' | grep -v grep + systemctl --user show-environment | col -b +} + +run_desktop() +{ + if test $HAVE_GRAPHICS -eq 1 ; then + /usr/libexec/Xorg.wrap -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xorg.log -config ./xorg.conf -configdir . $DISPLAY & + else + /usr/bin/Xvfb $DISPLAY -noreset +extension GLX +extension RANDR +extension RENDER -screen 0 1280x1024x24 & + fi + PID_XORG=$! + sleep 1 + export DISPLAY=$DISPLAY + $DESKTOP_COMMAND & + PID_GNOME_SESSION=$! + sleep 30 + if test "$DESKTOP_COMMAND" != "gnome-session" ; then + ibus-daemon --daemonize --verbose + sleep 1 + fi +} + +count_case_result() +{ + retval=$1 + pass=$2 + fail=$3 + + if test $retval -eq 0 ; then + pass=`expr $pass + 1` + else + fail=`expr $fail + 1` + fi + echo $pass $fail +} + +echo_case_result() +{ + retval=$1 + tst=$2 + log=$3 + subtst=${4:-''} + + if test $retval -eq 0 ; then + echo -e "${GREEN}PASS${NC}: $tst $subtst" + else + echo -e "${RED}FAIL${NC}: $tst $subtst" + echo "FAIL: $tst $subtst" >> $TEST_LOG + echo "======================" >> $TEST_LOG + echo "" >> $TEST_LOG + cat "$log" >> $TEST_LOG + echo "" >> $TEST_LOG + fi +} + +run_test_suite() +{ + cd `dirname $0` + pass=0 + fail=0 + + export GTK_IM_MODULE=ibus + export IBUS_COMPOSE_CACHE_DIR=$PWD + if test -f $TEST_LOG ; then + rm $TEST_LOG + fi + for tst in $TESTS; do + ENVS= + if test -f $SRCDIR/${tst}.env ; then + ENVS="`cat $SRCDIR/${tst}.env`" + fi + if test x"$ENVS" = x ; then + $BUILDDIR/$tst $SRCDIR >&${tst}.log + retval=$? + read pass fail << EOF + `count_case_result $retval $pass $fail` +EOF + echo_case_result $retval $tst ${tst}.log + else + LANG_backup=$LANG + i=1 + for e in $ENVS; do + first=`echo "$e" | cut -c1-1` + if test x"$first" = x"#" ; then + continue + fi + export $e + $BUILDDIR/$tst $SRCDIR >&${tst}.${i}.log + retval=$? + read pass fail << EOF + `count_case_result $retval $pass $fail` +EOF + echo_case_result $retval $tst ${tst}.${i}.log $e + i=`expr $i + 1` + done + export LANG=$LANG_backup + fi + done + echo "" + echo -e "# ${GREEN}PASS${NC}: $pass" + echo -e "# ${RED}FAIL${NC}: $fail" + if test -f ${TEST_LOG} ; then + echo "" + echo -e "${RED}See ${TEST_LOG}$NC" + fi +} + +finit() +{ + if test "$DESKTOP_COMMAND" != "gnome-session" ; then + ibus exit + fi + kill $PID_GNOME_SESSION $PID_XORG +} + +main() +{ + parse_args $@ + init_desktop + run_dbus_daemon + run_desktop + run_test_suite + finit +} + +main $@ -- 2.21.0 From fa081ac8ea37d2feb7c7f395ad66e7381b4cb65b Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Fri, 12 Jul 2019 21:20:32 +0900 Subject: [PATCH] src/tests: Use gnome-desktop-testing-runner --- src/tests/Makefile.am | 4 +- src/tests/ibus-desktop-testing-runner.in | 154 ++++++++++++++++++----- 2 files changed, 123 insertions(+), 35 deletions(-) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index b9aad29a..913e42fb 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -105,8 +105,8 @@ $(test_metas): $(test_metas_in) $(test_programs) $(NULL) ibus-compose-locales: ibus-compose-locales.in - SRCDIR=$(test_sourcesdir); \ - sed -e "s|@SRCDIR[@]|$$SRCDIR|g" $< > $@.tmp; \ + INSTALLEDDIR=$(datadir)/installed-tests; \ + sed -e "s|@INSTALLEDDIR[@]|$$INSTALLEDDIR|g" $< > $@.tmp; \ mv $@.tmp $@; \ $(NULL) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 9e689634..a90c1378 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -2,7 +2,7 @@ # -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- # vim:set noet ts=4: # -# ibus-anthy - The Anthy engine for IBus +# ibus - The Input Bus # # Copyright (c) 2018-2019 Takao Fujiwara # Copyright (c) 2018 Red Hat, Inc. @@ -33,16 +33,32 @@ VERSION=0.1 DISPLAY=:99.0 BUILDDIR="." SRCDIR="." -TEST_LOG=test-suite.log +TEST_LOG="test-suite.log" +RESULT_LOG="" HAVE_GRAPHICS=1 DESKTOP_COMMAND="gnome-session" PID_XORG=0 PID_GNOME_SESSION=0 +TESTING_RUNNER="default" TESTS="" GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' +print_log() +{ + if [ x"$RESULT_LOG" != x ] ; then + # avoid 'echo -e' before call 'sed'. + if [ x"$1" = x'-e' ] ; then + shift + fi + NO_ESCAPE=`echo $@ | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'` + echo $NO_ESCAPE >> $RESULT_LOG + else + echo $@ + fi +} + usage() { echo -e \ @@ -57,13 +73,19 @@ usage() "-c, --no-graphics Use Xvfb instead of Xorg\n" \ "-d, --desktop=DESKTOP Run DESTKTOP. The default is gnome-session\n" \ "-t, --tests=\"TESTS...\" Run TESTS programs which is separated by space\n" \ +"-r, --runner=RUNNER Run TESTS programs with a test RUNNER.\n" \ +" RUNNDER = gnome or default.\n" \ +" default is an embedded runner.\n" \ +"-o, --output=OUTPUT_FILE OUtput the log to OUTPUT_FILE\n" \ +"-O, --result=RESULT_FILE OUtput the result to RESULT_FILE\n" \ "" } parse_args() { # This is GNU getopt. "sudo port getopt" in BSD? - ARGS=`getopt -o hvb:s:cd:t: --long help,version,builddir:,srcdir:,no-graphics,desktop:,tests:\ + ARGS=`getopt -o hvb:s:cd:t:r:o:O: --long \ + help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,output:,result:\ -- "$@"`; eval set -- "$ARGS" while [ 1 ] ; do @@ -75,6 +97,9 @@ parse_args() -c | --no-graphics ) HAVE_GRAPHICS=0; shift;; -d | --desktop ) DESKTOP_COMMAND="$2"; shift 2;; -t | --tests ) TESTS="$2"; shift 2;; + -r | --runner ) TESTING_RUNNER="$2"; shift 2;; + -o | --output ) TEST_LOG="$2"; shift 2;; + -O | --result ) RESULT_LOG="$2"; shift 2;; -- ) shift; break;; * ) usage; exit 1;; esac @@ -83,18 +108,31 @@ parse_args() init_desktop() { + if [ "$RESULT_LOG" != "" ] ; then + rm $RESULT_LOG + fi + if [ "$TEST_LOG" = "" ] ; then + print_log -e "${RED}FAIL${NC}: ${RED}ERROR${NC}: a log file is required to get return value with 'read' command" + abrt + else + rm $TEST_LOG + fi if test x$FORCE_TEST != x ; then RUN_ARGS="$RUN_ARGS --force" fi if test ! -f $HOME/.config/gnome-initial-setup-done ; then + IS_SYSTEM_ACCOUNT=false + if [ "$USER" = "root" ] ; then + IS_SYSTEM_ACCOUNT=true + fi if test ! -f /var/lib/AccountsService/users/$USER ; then mkdir -p /var/lib/AccountsService/users cat >> /var/lib/AccountsService/users/$USER << _EOF [User] Language=ja_JP.UTF-8 XSession=gnome -SystemAccount=false +SystemAccount=$IS_SYSTEM_ACCOUNT _EOF fi mkdir -p $HOME/.config @@ -167,71 +205,120 @@ echo_case_result() { retval=$1 tst=$2 - log=$3 - subtst=${4:-''} + subtst=${3:-''} if test $retval -eq 0 ; then - echo -e "${GREEN}PASS${NC}: $tst $subtst" + print_log -e "${GREEN}PASS${NC}: $tst $subtst" else - echo -e "${RED}FAIL${NC}: $tst $subtst" - echo "FAIL: $tst $subtst" >> $TEST_LOG - echo "======================" >> $TEST_LOG - echo "" >> $TEST_LOG - cat "$log" >> $TEST_LOG - echo "" >> $TEST_LOG + print_log -e "${RED}FAIL${NC}: $tst $subtst" + print_log "======================" + print_log "" fi } -run_test_suite() +run_direct_test_cases() { - cd `dirname $0` pass=0 fail=0 - - export GTK_IM_MODULE=ibus - export IBUS_COMPOSE_CACHE_DIR=$PWD - if test -f $TEST_LOG ; then - rm $TEST_LOG - fi for tst in $TESTS; do ENVS= if test -f $SRCDIR/${tst}.env ; then ENVS="`cat $SRCDIR/${tst}.env`" fi if test x"$ENVS" = x ; then - $BUILDDIR/$tst $SRCDIR >&${tst}.log + $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG retval=$? read pass fail << EOF `count_case_result $retval $pass $fail` EOF - echo_case_result $retval $tst ${tst}.log + echo_case_result $retval $tst + CACHE_FILES=`ls *.cache` + if [ x"$CACHE_FILES" != x ] ; then + print_log "Clean $CACHE_FILES" + rm $CACHE_FILES + fi else LANG_backup=$LANG i=1 for e in $ENVS; do - first=`echo "$e" | cut -c1-1` + first=`echo "$e" | grep '^#'` if test x"$first" = x"#" ; then continue fi export $e - $BUILDDIR/$tst $SRCDIR >&${tst}.${i}.log + $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG retval=$? read pass fail << EOF `count_case_result $retval $pass $fail` EOF - echo_case_result $retval $tst ${tst}.${i}.log $e + echo_case_result $retval $tst $e + CACHE_FILES=`ls *.cache` + if [ x"$CACHE_FILES" != x ] ; then + print_log "Clean $CACHE_FILES" + rm $CACHE_FILES + fi i=`expr $i + 1` done export LANG=$LANG_backup fi done + echo $pass $fail +} + +run_gnome_desktop_testing_runner() +{ + pass=0 + fail=0 + if [ x"$TESTS" = x ] ; then + TESTS='ibus' + fi + for tst in $TESTS; do + tst_dir="@INSTALLEDDIR@/$tst" + if [ ! -d "$tst_dir" ] ; then + print_log -e "${RED}FAIL${NC}: Not found %tst_dir" + fail=1 + continue + fi + gnome-desktop-testing-runner $tst 2>>$TEST_LOG 1>>$TEST_LOG + retval=$? + read pass fail << EOF + `count_case_result $retval $pass $fail` +EOF + done + echo $pass $fail +} + +run_test_suite() +{ + pass=0 + fail=0 + export GTK_IM_MODULE=ibus + export IBUS_COMPOSE_CACHE_DIR=$PWD + if [ x"$TESTING_RUNNER" = x ] ; then + TESTING_RUNNER="default" + fi + case $TESTING_RUNNER in + default) + # Get only the last value with do-while. + read pass fail << EOF_RUNNER + `run_direct_test_cases` +EOF_RUNNER + ;; + gnome) + read pass fail << EOF_RUNNER + `run_gnome_desktop_testing_runner` +EOF_RUNNER + ;; + esac echo "" - echo -e "# ${GREEN}PASS${NC}: $pass" - echo -e "# ${RED}FAIL${NC}: $fail" - if test -f ${TEST_LOG} ; then - echo "" - echo -e "${RED}See ${TEST_LOG}$NC" + if [ $pass -ne 0 ] ; then + print_log -e "${GREEN}PASS${NC}: $pass" fi + if [ $fail -ne 0 ] ; then + print_log -e "${RED}FAIL${NC}: $fail" + fi + echo "" + echo "See ${TEST_LOG}" } finit() @@ -240,14 +327,15 @@ finit() ibus exit fi kill $PID_GNOME_SESSION $PID_XORG + echo "Finished $PROGNAME testing" } main() { parse_args $@ init_desktop - run_dbus_daemon - run_desktop + run_dbus_daemon 2>>$TEST_LOG 1>>$TEST_LOG + run_desktop 2>>$TEST_LOG 1>>$TEST_LOG run_test_suite finit } -- 2.21.0 From 85b647a1c57c206779eb0b4b15a734c1b1f29c10 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Wed, 24 Jul 2019 17:27:37 +0900 Subject: [PATCH] src/tests: Fix IBus test cases for gnome-desktop-testing - dconf/config.c: Replaced dconf_client_write_fast() with dconf_client_write_sync() because dconf_client_write_fast() does not syn the data when ibus_config_get_values() is called immediately after ibus_config_set_value() is called. - ibus-compose-locales.in returns the return value of ibus-compose - ibus-compose: Set $NO_AT_BRIDGE to suppress a AT_SPI warning and call g_log_set_always_fatal() because GtkIMContextSimple does not support multiple compose outputs yet and the API can suppress a warning. - ibus-config: Delete async watch testings which causes several errors with gnome-shell testing and the testing is now deprecated and GSettings is recommended. - ibus-desktop-testing-runner.in: Support --output=log:stdout to cat the log to stdout and Use dbus-launch --exit-with-session instead of --sh-syntax and count PASS of test cases instead of PASS of gnome-desktop-testing and always run ibus exit and kill gnome-shell-calendar-server - ibus-engine-switch.c: Set xkb:jp::jpn if gnome-shell sets xkb:us::eng - ibus-inputcontext.c: Use ibus_bus_get_global_engine() instead of ibus_bus_list_active_engines() since ibus_bus_list_active_engines() does not work with gnome-shell and the API is now deprecated. - ibus-keypress.c: Set $NO_AT_BRIDGE to suppress a AT_SPI warning --- conf/dconf/config.c | 14 +- src/tests/Makefile.am | 19 +- src/tests/ibus-compose-locales.in | 4 +- src/tests/ibus-compose.c | 10 +- src/tests/ibus-config.c | 283 ----------------------- src/tests/ibus-desktop-testing-runner.in | 77 +++--- src/tests/ibus-engine-switch.c | 34 ++- src/tests/ibus-inputcontext.c | 29 +-- src/tests/ibus-keypress.c | 4 + 9 files changed, 126 insertions(+), 348 deletions(-) diff --git a/conf/dconf/config.c b/conf/dconf/config.c index 500ea1d8..30ac137d 100644 --- a/conf/dconf/config.c +++ b/conf/dconf/config.c @@ -335,7 +335,19 @@ ibus_config_dconf_set_value (IBusConfigService *config, } #ifdef DCONF_0_13_4 - retval = dconf_client_write_fast (client, gkey, value, error); + /* Use dconf_client_write_sync() instead of dconf_client_write_fast() + * because dconf_client_write_fast() does not sync the data when + * ibus_config_get_values() is called immediately after + * ibus_config_set_value() is called. + * We won't add a new API for the sync only since IBusConfig is + * now deprecated and GSettings is recommended. + */ + retval = dconf_client_write_sync (client, + gkey, + value, + NULL, + NULL, + error); #else retval = dconf_client_write (client, gkey, diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index 913e42fb..2e75932c 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -55,6 +55,8 @@ TESTS = \ ibus-util \ $(NULL) +CLEANFILES = + if ENABLE_ENGINE TESTS += ibus-engine-switch endif @@ -90,9 +92,17 @@ test_sources_DATA = \ $(NULL) test_sourcesdir = $(datadir)/installed-tests/ibus +CLEANFILES += \ + $(test_metas) \ + ibus-desktop-testing-runner \ + $(NULL) + test_execs_PROGRAMS = $(TESTS) if ENABLE_GTK3 test_execs_SCRIPTS = ibus-compose-locales +CLEANFILES += \ + ibus-compose-locales \ + $(NULL) endif test_execsdir = $(libexecdir)/installed-tests/ibus endif @@ -105,15 +115,14 @@ $(test_metas): $(test_metas_in) $(test_programs) $(NULL) ibus-compose-locales: ibus-compose-locales.in - INSTALLEDDIR=$(datadir)/installed-tests; \ - sed -e "s|@INSTALLEDDIR[@]|$$INSTALLEDDIR|g" $< > $@.tmp; \ + SRCDIR=$(test_sourcesdir); \ + sed -e "s|@SRCDIR[@]|$$SRCDIR|g" $< > $@.tmp; \ mv $@.tmp $@; \ $(NULL) - ibus-desktop-testing-runner.in \ ibus-desktop-testing-runner: ibus-desktop-testing-runner.in - SRCDIR=$(test_sourcesdir); \ - sed -e "s|@SRCDIR[@]|$$SRCDIR|g" $< > $@.tmp; \ + INSTALLEDDIR=$(datadir)/installed-tests; \ + sed -e "s|@INSTALLEDDIR[@]|$$INSTALLEDDIR|g" $< > $@.tmp; \ mv $@.tmp $@; \ $(NULL) diff --git a/src/tests/ibus-compose-locales.in b/src/tests/ibus-compose-locales.in index 8d2384d1..fad02965 100755 --- a/src/tests/ibus-compose-locales.in +++ b/src/tests/ibus-compose-locales.in @@ -6,6 +6,7 @@ BUILDDIR=`dirname $0` export IBUS_COMPOSE_CACHE_DIR=$PWD +retval=0 for var in `cat $SRCDIR/ibus-compose.env` do IS_COMMENT=`echo "$var" | grep "^#"` @@ -13,6 +14,7 @@ do continue fi env $var $BUILDDIR/ibus-compose $SRCDIR $@ + retval=`expr $retval + $?` CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then @@ -20,4 +22,4 @@ do rm $CACHE_FILES fi done - +exit $retval diff --git a/src/tests/ibus-compose.c b/src/tests/ibus-compose.c index c8d3c126..db359477 100644 --- a/src/tests/ibus-compose.c +++ b/src/tests/ibus-compose.c @@ -344,20 +344,26 @@ test_compose (void) int main (int argc, char *argv[]) { + GLogLevelFlags flags; const gchar *test_name; gchar *test_path; ibus_init (); + /* Avoid a warning of "AT-SPI: Could not obtain desktop path or name" + * with gtk_main(). + */ + g_setenv ("NO_AT_BRIDGE", "1", TRUE); g_test_init (&argc, &argv, NULL); /* FIXME: * IBusIMContext opens GtkIMContextSimple as the slave and * GtkIMContextSimple opens the compose table on el_GR.UTF-8, and the - * multiple outputs in el_GR's compose causes a warning in gtkcomposetable + * multiple outputs in el_GR's compose causes a warning in gtkcomposetable * and the warning always causes a fatal in GTest: " "GTK+ supports to output one char only: " */ - g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + flags = g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); gtk_init (&argc, &argv); + g_log_set_always_fatal (flags); m_srcdir = argc > 1 ? g_strdup (argv[1]) : g_strdup ("."); m_compose_file = g_strdup (g_getenv ("COMPOSE_FILE")); diff --git a/src/tests/ibus-config.c b/src/tests/ibus-config.c index c6141ab5..9b925ad9 100644 --- a/src/tests/ibus-config.c +++ b/src/tests/ibus-config.c @@ -133,254 +133,6 @@ test_config_set_get (void) g_object_unref (config); } -typedef struct { - GMainLoop *loop; - guint timeout_id; - gchar *section; - gchar *name; -} WatchData; - -typedef struct { - gchar *section; - gchar *name; -} WatchKey; - -typedef struct { - WatchKey *watched; /* watched keys (null-terminated) */ - WatchKey *changed; /* changed keys (null-terminated) */ - WatchKey *notified; /* notified keys (same length as - changed, not null-terminated) */ -} WatchTestData; - -static WatchKey default_watched[] = { - { NULL } -}; -static WatchKey default_changed[] = { - { "test/s1", "n1" }, - { "test/s1", "n2" }, - { "test/s2", "n1" }, - { "test/s2", "n2" }, - { NULL } -}; -static WatchKey default_notified[] = { - { "test/s1", "n1" }, - { "test/s1", "n2" }, - { "test/s2", "n1" }, - { "test/s2", "n2" } -}; -static WatchTestData default_data = { - default_watched, - default_changed, - default_notified -}; - -static WatchKey section_watched[] = { - { "test/s1", NULL }, - { NULL } -}; -static WatchKey section_notified[] = { - { "test/s1", "n1" }, - { "test/s1", "n2" }, - { NULL, NULL }, - { NULL, NULL }, -}; -static WatchTestData section_data = { - section_watched, - default_changed, - section_notified -}; - -static WatchKey section_multiple_watched[] = { - { "test/s1", NULL }, - { "test/s2", NULL }, - { NULL } -}; -static WatchKey section_multiple_notified[] = { - { "test/s1", "n1" }, - { "test/s1", "n2" }, - { "test/s2", "n1" }, - { "test/s2", "n2" }, -}; -static WatchTestData section_multiple_data = { - section_multiple_watched, - default_changed, - section_multiple_notified -}; - -static WatchKey section_name_watched[] = { - { "test/s1", "n1" }, - { NULL } -}; -static WatchKey section_name_notified[] = { - { "test/s1", "n1" }, - { NULL, NULL }, - { NULL, NULL }, - { NULL, NULL }, -}; -static WatchTestData section_name_data = { - section_name_watched, - default_changed, - section_name_notified -}; - -static WatchKey section_name_multiple_watched[] = { - { "test/s1", "n1" }, - { "test/s2", "n2" }, - { NULL } -}; -static WatchKey section_name_multiple_notified[] = { - { "test/s1", "n1" }, - { NULL, NULL }, - { NULL, NULL }, - { "test/s2", "n2" }, -}; -static WatchTestData section_name_multiple_data = { - section_name_multiple_watched, - default_changed, - section_name_multiple_notified -}; - -typedef struct { - IBusConfig *config; - WatchData data; -} WatchFixture; - -static void -value_changed_cb (IBusConfig *config, - const gchar *section, - const gchar *name, - GVariant *value, - gpointer user_data) -{ - WatchData *data = (WatchData *) user_data; - - data->section = g_strdup (section); - data->name = g_strdup (name); - - g_main_loop_quit (data->loop); -} - -static gboolean -timeout_cb (gpointer user_data) -{ - WatchData *data = (WatchData *) user_data; - g_main_loop_quit (data->loop); - data->timeout_id = 0; - return FALSE; -} - -static void -change_and_test (IBusConfig *config, - const gchar *section, - const gchar *name, - const gchar *expected_section, - const gchar *expected_name, - WatchData *data) -{ - gboolean retval; - GVariant *var; - - data->section = NULL; - data->name = NULL; - - /* Unset won't notify value-changed signal. */ - var = ibus_config_get_values (config, section); - if (var != NULL) { - GVariant *value = g_variant_lookup_value (var, name, - G_VARIANT_TYPE_VARIANT); - if (value != NULL) { - ibus_config_unset (config, section, name); - g_variant_unref (value); - } - g_variant_unref (var); - } - - data->timeout_id = g_timeout_add (1, timeout_cb, data); - g_main_loop_run (data->loop); - if (data->timeout_id != 0) { - g_source_remove (data->timeout_id); - } - - retval = ibus_config_set_value (config, section, name, - g_variant_new_int32 (1)); - g_assert (retval); - - data->timeout_id = g_timeout_add (1, timeout_cb, data); - g_main_loop_run (data->loop); - if (data->timeout_id != 0) { - g_source_remove (data->timeout_id); - } - - g_assert_cmpstr (data->section, ==, expected_section); - g_assert_cmpstr (data->name, ==, expected_name); - - g_free (data->section); - g_free (data->name); -} - -static void -watch_fixture_setup (WatchFixture *fixture, gconstpointer user_data) -{ - fixture->config = ibus_config_new (ibus_bus_get_connection (bus), - NULL, - NULL); - g_assert (fixture->config); - - fixture->data.loop = g_main_loop_new (NULL, FALSE); - g_signal_connect (fixture->config, "value-changed", - G_CALLBACK (value_changed_cb), &fixture->data); -} - -static void -watch_fixture_teardown (WatchFixture *fixture, gconstpointer user_data) -{ - g_main_loop_unref (fixture->data.loop); - - ibus_proxy_destroy (IBUS_PROXY (fixture->config)); - g_object_unref (fixture->config); -} - -static void -test_config_watch (WatchFixture *fixture, gconstpointer user_data) -{ - const WatchTestData *data = user_data; - gint i; - - for (i = 0; data->watched[i].section != NULL; i++) { - ibus_config_watch (fixture->config, - data->watched[i].section, - data->watched[i].name); - } - for (i = 0; data->changed[i].section != NULL; i++) { - change_and_test (fixture->config, - data->changed[i].section, - data->changed[i].name, - data->notified[i].section, - data->notified[i].name, - &fixture->data); - } - for (i = 0; data->watched[i].section != NULL; i++) { - ibus_config_unwatch (fixture->config, - data->watched[i].section, - data->watched[i].name); - } - if (i > 0) { - /* Check if the above unwatch takes effect. */ - for (i = 0; data->changed[i].section != NULL; i++) { - change_and_test (fixture->config, - data->changed[i].section, - data->changed[i].name, - NULL, - NULL, - &fixture->data); - } - } else { - /* Since we reuse single D-Bus connection, we need to remove the - default match rule for the next ibus_config_new() call. */ - ibus_config_unwatch (fixture->config, NULL, NULL); - } -} - gint main (gint argc, gchar **argv) @@ -390,41 +142,6 @@ main (gint argc, g_test_init (&argc, &argv, NULL); bus = ibus_bus_new (); - g_test_add ("/ibus/config-watch/default", - WatchFixture, - &default_data, - watch_fixture_setup, - test_config_watch, - watch_fixture_teardown); - - g_test_add ("/ibus/config-watch/section", - WatchFixture, - §ion_data, - watch_fixture_setup, - test_config_watch, - watch_fixture_teardown); - - g_test_add ("/ibus/config-watch/section-multiple", - WatchFixture, - §ion_multiple_data, - watch_fixture_setup, - test_config_watch, - watch_fixture_teardown); - - g_test_add ("/ibus/config-watch/section-name", - WatchFixture, - §ion_name_data, - watch_fixture_setup, - test_config_watch, - watch_fixture_teardown); - - g_test_add ("/ibus/config-watch/section-name-multiple", - WatchFixture, - §ion_name_multiple_data, - watch_fixture_setup, - test_config_watch, - watch_fixture_teardown); - g_test_add_func ("/ibus/create-config-async", test_create_config_async); g_test_add_func ("/ibus/config-set-get", test_config_set_get); diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index a90c1378..b7a72285 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -34,9 +34,10 @@ DISPLAY=:99.0 BUILDDIR="." SRCDIR="." TEST_LOG="test-suite.log" +TEST_LOG_STDOUT=0 RESULT_LOG="" HAVE_GRAPHICS=1 -DESKTOP_COMMAND="gnome-session" +DESKTOP_COMMAND="dbus-launch --exit-with-session gnome-session" PID_XORG=0 PID_GNOME_SESSION=0 TESTING_RUNNER="default" @@ -109,19 +110,26 @@ parse_args() init_desktop() { if [ "$RESULT_LOG" != "" ] ; then - rm $RESULT_LOG + if [ -f $RESULT_LOG ] ; then + rm $RESULT_LOG + fi + fi + HAS_STDOUT=`echo "$TEST_LOG" | grep ':stdout'` + if [ x"$HAS_STDOUT" != x ] ; then + TEST_LOG=`echo "$TEST_LOG" | sed -e 's|:stdout||'` + TEST_LOG_STDOUT=1 fi if [ "$TEST_LOG" = "" ] ; then print_log -e "${RED}FAIL${NC}: ${RED}ERROR${NC}: a log file is required to get return value with 'read' command" - abrt - else + exit -1 + elif [ -f $TEST_LOG ] ; then rm $TEST_LOG fi - if test x$FORCE_TEST != x ; then + if [ x$FORCE_TEST != x ] ; then RUN_ARGS="$RUN_ARGS --force" fi - if test ! -f $HOME/.config/gnome-initial-setup-done ; then + if [ ! -f $HOME/.config/gnome-initial-setup-done ] ; then IS_SYSTEM_ACCOUNT=false if [ "$USER" = "root" ] ; then IS_SYSTEM_ACCOUNT=true @@ -141,7 +149,7 @@ _EOF # Prevent from launching a XDG dialog XDG_LOCALE_FILE="$HOME/.config/user-dirs.locale" - if test -f $XDG_LOCALE_FILE ; then + if [ -f $XDG_LOCALE_FILE ] ; then XDG_LANG_ORIG=`cat $XDG_LOCALE_FILE` XDG_LANG_NEW=`echo $LANG | sed -e 's/\(.*\)\..*/\1/'` if [ "$XDG_LANG_ORIG" != "$XDG_LANG_NEW" ] ; then @@ -153,19 +161,8 @@ _EOF run_dbus_daemon() { - a=`ps -ef | grep dbus-daemon | grep "\-\-system" | grep -v session | grep -v grep` - if test x"$a" = x ; then - eval `dbus-launch --sh-syntax` - fi - SUSER=`echo "$USER" | cut -c 1-7` - a=`ps -ef | grep dbus-daemon | grep "$SUSER" | grep -v gdm | grep session | grep -v grep` - if test x"$a" = x ; then - systemctl --user start dbus - export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus - fi - systemctl --user status dbus | col -b - ps -ef | grep dbus-daemon | grep "$SUSER" | grep -v gdm | egrep 'session|system' | grep -v grep - systemctl --user show-environment | col -b + # Use dbus-launch --exit-with-session later instead of --sh-syntax + export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus } run_desktop() @@ -181,7 +178,8 @@ run_desktop() $DESKTOP_COMMAND & PID_GNOME_SESSION=$! sleep 30 - if test "$DESKTOP_COMMAND" != "gnome-session" ; then + HAS_GNOME=`echo $DESKTOP_COMMAND | grep gnome-session` + if [ x"$HAS_GNOME" = x ] ; then ibus-daemon --daemonize --verbose sleep 1 fi @@ -285,6 +283,16 @@ run_gnome_desktop_testing_runner() `count_case_result $retval $pass $fail` EOF done + child_pass=`grep '^PASS:' $TEST_LOG | wc -l` + child_fail=`grep '^FAIL:' $TEST_LOG | wc -l` + if [ $child_pass -ne 0 -o $child_fail -ne 0 ] ; then + pass=$child_pass + if [ $child_fail -ne 0 ] ; then + fail=`expr $child_fail / 2` + else + fail=0 + fi + fi echo $pass $fail } @@ -311,22 +319,29 @@ EOF_RUNNER ;; esac echo "" - if [ $pass -ne 0 ] ; then - print_log -e "${GREEN}PASS${NC}: $pass" - fi - if [ $fail -ne 0 ] ; then - print_log -e "${RED}FAIL${NC}: $fail" - fi + print_log -e "${GREEN}PASS${NC}: $pass" + print_log -e "${RED}FAIL${NC}: $fail" echo "" - echo "See ${TEST_LOG}" + if [ $TEST_LOG_STDOUT -eq 1 ] ; then + cat $TEST_LOG + else + echo "See $TEST_LOG" + fi } finit() { - if test "$DESKTOP_COMMAND" != "gnome-session" ; then - ibus exit - fi + echo "Killing left gnome-session and Xorg" kill $PID_GNOME_SESSION $PID_XORG + ibus exit + SUSER=`echo "$USER" | cut -c 1-7` + LEFT_CALENDAR=`ps -ef | grep gnome-shell-calendar-server | grep $SUSER | grep -v grep` + if [ x"$LEFT_CALENDAR" != x ] ; then + echo "Killing left gnome-shell-calendar-server" + echo "$LEFT_CALENDAR" + echo "$LEFT_CALENDAR" | awk '{print $2}' | xargs kill + fi + echo "Finished $PROGNAME testing" } diff --git a/src/tests/ibus-engine-switch.c b/src/tests/ibus-engine-switch.c index 5c2bd516..a1eeba2a 100644 --- a/src/tests/ibus-engine-switch.c +++ b/src/tests/ibus-engine-switch.c @@ -13,17 +13,25 @@ static const gchar *engine_names[] = { AFTER_ENGINE }; +static const gchar *engine_names2[] = { + AFTER_ENGINE, + BEFORE_ENGINE +}; + static void -change_global_engine (void) +change_global_engine (gboolean reverse) { gint i; for (i = 0; i < G_N_ELEMENTS (engine_names); i++) { - ibus_bus_set_global_engine (bus, engine_names[i]); + const gchar *engine_name = engine_names[i]; + if (reverse) + engine_name = engine_names2[i]; + ibus_bus_set_global_engine (bus, engine_name); IBusEngineDesc *engine_desc = ibus_bus_get_global_engine (bus); g_assert_cmpstr (ibus_engine_desc_get_name (engine_desc), ==, - engine_names[i]); + engine_name); g_object_unref (G_OBJECT (engine_desc)); } } @@ -46,6 +54,7 @@ typedef struct { gint count; guint timeout_id; guint idle_id; + gboolean reverse; } GlobalEngineChangedData; static void @@ -70,7 +79,7 @@ static gboolean change_global_engine_cb (gpointer user_data) { GlobalEngineChangedData *data = (GlobalEngineChangedData *) user_data; - change_global_engine (); + change_global_engine (data->reverse); data->idle_id = 0; return FALSE; } @@ -78,12 +87,25 @@ change_global_engine_cb (gpointer user_data) static void test_global_engine (void) { + GLogLevelFlags flags; + IBusEngineDesc *desc; GlobalEngineChangedData data; guint handler_id; if (!ibus_bus_get_use_global_engine (bus)) return; + /* "No global engine." warning is not critical message. */ + flags = g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + desc = ibus_bus_get_global_engine (bus); + g_log_set_always_fatal (flags); + if (desc && + !g_strcmp0 (BEFORE_ENGINE, ibus_engine_desc_get_name (desc))) { + data.reverse = TRUE; + } else { + data.reverse = FALSE; + } + data.count = 0; handler_id = g_signal_connect (bus, @@ -141,7 +163,7 @@ test_context_engine_set_by_global (void) /* ibus_bus_set_global_engine() changes focused context engine. */ ibus_input_context_focus_in (context); - change_global_engine (); + change_global_engine (FALSE); /* ibus_input_context_set_engine() does not take effect when global engine is used. */ @@ -170,7 +192,7 @@ test_context_engine_set_by_focus (void) ibus_input_context_focus_in (context); - change_global_engine (); + change_global_engine (FALSE); /* When focus is lost, context engine is set to "dummy". */ ibus_input_context_focus_in (another_context); diff --git a/src/tests/ibus-inputcontext.c b/src/tests/ibus-inputcontext.c index fab183aa..ed04bd64 100644 --- a/src/tests/ibus-inputcontext.c +++ b/src/tests/ibus-inputcontext.c @@ -37,18 +37,6 @@ fatal_handler(const gchar *log_domain, return TRUE; } -static gchar * -get_last_engine_id (const GList *engines) -{ - const char *result = NULL; - for (; engines; engines = g_list_next (engines)) { - IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (engines->data); - g_assert (engine_desc); - result = ibus_engine_desc_get_name (engine_desc); - } - return g_strdup (result); -} - static void call_basic_ipcs (IBusInputContext *context) { @@ -68,18 +56,23 @@ call_basic_ipcs (IBusInputContext *context) static void test_input_context (void) { - GList *engines; - gchar *active_engine_name = NULL; IBusInputContext *context; + GLogLevelFlags flags; IBusEngineDesc *engine_desc; + gchar *active_engine_name = NULL; gchar *current_ic; context = ibus_bus_create_input_context (bus, "test"); call_basic_ipcs (context); - engines = ibus_bus_list_active_engines (bus); - if (engines != NULL) { - active_engine_name = get_last_engine_id (engines); + /* "No global engine." warning is not critical message. */ + flags = g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + engine_desc = ibus_bus_get_global_engine (bus); + g_log_set_always_fatal (flags); + if (engine_desc != NULL) { + active_engine_name = g_strdup (ibus_engine_desc_get_name(engine_desc)); + g_object_unref (engine_desc); + engine_desc = NULL; } else { active_engine_name = g_strdup ("dummy"); } @@ -111,8 +104,6 @@ test_input_context (void) g_object_unref (context); g_free (active_engine_name); - g_list_foreach (engines, (GFunc) g_object_unref, NULL); - g_list_free (engines); } static void diff --git a/src/tests/ibus-keypress.c b/src/tests/ibus-keypress.c index 17920226..dd1b0042 100644 --- a/src/tests/ibus-keypress.c +++ b/src/tests/ibus-keypress.c @@ -288,6 +288,10 @@ int main (int argc, char *argv[]) { ibus_init (); + /* Avoid a warning of "AT-SPI: Could not obtain desktop path or name" + * with gtk_main(). + */ + g_setenv ("NO_AT_BRIDGE", "1", TRUE); g_test_init (&argc, &argv, NULL); gtk_init (&argc, &argv); -- 2.21.0 From f4463c0433c5f48a4fb2830e8c2ae9619fbb18d1 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Mon, 29 Jul 2019 19:05:43 +0900 Subject: [PATCH] src/tests: Fix a fatal error with g_warning I set g_log_set_always_fatal() before gtk_init() in ibus-compose for a compose warning of GtkIMContextSimple but actually the warning is output during gtk_main() due to GtkIMContextSimple.set_client_window() so I moved g_log_set_always_fatal() before gtk_main() in ibus-compose.c. Also set IFS in ibus-compose-locales to set the delimiter to '\n' for for-loop arguments. --- src/tests/ibus-compose-locales.in | 8 ++++++++ src/tests/ibus-compose.c | 21 ++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/tests/ibus-compose-locales.in b/src/tests/ibus-compose-locales.in index fad02965..f650b584 100755 --- a/src/tests/ibus-compose-locales.in +++ b/src/tests/ibus-compose-locales.in @@ -7,19 +7,27 @@ BUILDDIR=`dirname $0` export IBUS_COMPOSE_CACHE_DIR=$PWD retval=0 +# Let for-loop notice '\n' as a delimiter +IFS=$'\n' for var in `cat $SRCDIR/ibus-compose.env` do + # Revert IFS to recognize env a=foo b=foo + IFS=' ' IS_COMMENT=`echo "$var" | grep "^#"` if [ "x$IS_COMMENT" != x ] ; then continue fi + echo "# Starting $var $BUILDDIR/ibus-compose $SRCDIR $@" env $var $BUILDDIR/ibus-compose $SRCDIR $@ retval=`expr $retval + $?` + echo "# Finished $var $BUILDDIR/ibus-compose $SRCDIR $@ with $retval" CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then echo "Clean $CACHE_FILES" rm $CACHE_FILES fi + IFS=$'\n' done +IFS=' ' exit $retval diff --git a/src/tests/ibus-compose.c b/src/tests/ibus-compose.c index db359477..4b4c56e7 100644 --- a/src/tests/ibus-compose.c +++ b/src/tests/ibus-compose.c @@ -331,20 +331,28 @@ create_window () static void test_compose (void) { + GLogLevelFlags flags; if (!register_ibus_engine ()) { g_test_fail (); return; } create_window (); + /* FIXME: + * IBusIMContext opens GtkIMContextSimple as the slave and + * GtkIMContextSimple opens the compose table on el_GR.UTF-8, and the + * multiple outputs in el_GR's compose causes a warning in gtkcomposetable + * and the warning always causes a fatal in GTest: + " "GTK+ supports to output one char only: " + */ + flags = g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); gtk_main (); - + g_log_set_always_fatal (flags); } int main (int argc, char *argv[]) { - GLogLevelFlags flags; const gchar *test_name; gchar *test_path; @@ -354,16 +362,7 @@ main (int argc, char *argv[]) */ g_setenv ("NO_AT_BRIDGE", "1", TRUE); g_test_init (&argc, &argv, NULL); - /* FIXME: - * IBusIMContext opens GtkIMContextSimple as the slave and - * GtkIMContextSimple opens the compose table on el_GR.UTF-8, and the - * multiple outputs in el_GR's compose causes a warning in gtkcomposetable - * and the warning always causes a fatal in GTest: - " "GTK+ supports to output one char only: " - */ - flags = g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); gtk_init (&argc, &argv); - g_log_set_always_fatal (flags); m_srcdir = argc > 1 ? g_strdup (argv[1]) : g_strdup ("."); m_compose_file = g_strdup (g_getenv ("COMPOSE_FILE")); -- 2.21.0 From 7dde99600777f195da614130950ecbd339439d35 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Wed, 31 Jul 2019 16:27:49 +0900 Subject: [PATCH] src/tests: Fix wrong echo with direct runner in ibus-desktop-testing-runner The wrong echo prevent from counting the test results in the direct testing runner. --- src/tests/ibus-desktop-testing-runner.in | 33 +++++++++++++----------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index b7a72285..3045d601 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -153,7 +153,7 @@ _EOF XDG_LANG_ORIG=`cat $XDG_LOCALE_FILE` XDG_LANG_NEW=`echo $LANG | sed -e 's/\(.*\)\..*/\1/'` if [ "$XDG_LANG_ORIG" != "$XDG_LANG_NEW" ] ; then - echo "Overriding XDG locale $XDG_LANG_ORIG with $XDG_LANG_NEW" + echo "# Overriding XDG locale $XDG_LANG_ORIG with $XDG_LANG_NEW" echo "$XDG_LANG_NEW" > $XDG_LOCALE_FILE fi fi @@ -206,11 +206,9 @@ echo_case_result() subtst=${3:-''} if test $retval -eq 0 ; then - print_log -e "${GREEN}PASS${NC}: $tst $subtst" + echo "PASS: $tst $subtst" >>$TEST_LOG else - print_log -e "${RED}FAIL${NC}: $tst $subtst" - print_log "======================" - print_log "" + echo "FAIL: $tst $subtst" >>$TEST_LOG fi } @@ -232,32 +230,37 @@ EOF echo_case_result $retval $tst CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then - print_log "Clean $CACHE_FILES" + echo "# Clean $CACHE_FILES" >>$TEST_LOG rm $CACHE_FILES fi else - LANG_backup=$LANG i=1 + # Let for-loop notice '\n' as a delimiter + IFS=$'\n' for e in $ENVS; do + # Revert IFS to recognize env a=foo b=foo + IFS=' ' first=`echo "$e" | grep '^#'` if test x"$first" = x"#" ; then continue fi - export $e - $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG + echo "# Starting $e $BUILDDIR/$tst $SRCDIR" >>$TEST_LOG + env $e $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG retval=$? + echo "# Finished $e $BUILDDIR/$tst $SRCDIR with $retval" >>$TEST_LOG read pass fail << EOF `count_case_result $retval $pass $fail` EOF echo_case_result $retval $tst $e CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then - print_log "Clean $CACHE_FILES" + echo "# Clean $CACHE_FILES" >>$TEST_LOG rm $CACHE_FILES fi i=`expr $i + 1` + IFS=$'\n' done - export LANG=$LANG_backup + IFS=' ' fi done echo $pass $fail @@ -325,24 +328,24 @@ EOF_RUNNER if [ $TEST_LOG_STDOUT -eq 1 ] ; then cat $TEST_LOG else - echo "See $TEST_LOG" + echo "# See $TEST_LOG" fi } finit() { - echo "Killing left gnome-session and Xorg" + echo "# Killing left gnome-session and Xorg" kill $PID_GNOME_SESSION $PID_XORG ibus exit SUSER=`echo "$USER" | cut -c 1-7` LEFT_CALENDAR=`ps -ef | grep gnome-shell-calendar-server | grep $SUSER | grep -v grep` if [ x"$LEFT_CALENDAR" != x ] ; then - echo "Killing left gnome-shell-calendar-server" + echo "# Killing left gnome-shell-calendar-server" echo "$LEFT_CALENDAR" echo "$LEFT_CALENDAR" | awk '{print $2}' | xargs kill fi - echo "Finished $PROGNAME testing" + echo "# Finished $PROGNAME testing" } main() -- 2.21.0 From 28c10d64d282fa9fbc35a7bc44a096f6137d5e46 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Tue, 13 Aug 2019 20:06:51 +0900 Subject: [PATCH] src/tests: Set XDG_SESSION_TYPE in ibus-desktop-testing-runner mutter 3.33.90 or later exits the session without loginctl. Now ibus-desktop-testing-runner has XDG_SESSION_TYPE forcibly not to exit gnome-shell. --- src/tests/ibus-desktop-testing-runner.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 3045d601..141e9b5b 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -157,6 +157,8 @@ _EOF echo "$XDG_LANG_NEW" > $XDG_LOCALE_FILE fi fi + # `su` command does not run loginctl + export XDG_SESSION_TYPE='x11' } run_dbus_daemon() @@ -175,6 +177,7 @@ run_desktop() PID_XORG=$! sleep 1 export DISPLAY=$DISPLAY + echo "Running $DESKTOP_COMMAND with $USER in `tty`" $DESKTOP_COMMAND & PID_GNOME_SESSION=$! sleep 30 -- 2.21.0 From bccf94d5ec1c5fc80d5aeac622f2ab8007d5a28a Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Fri, 29 Nov 2019 20:28:49 +0900 Subject: [PATCH] src/tests: RHEL codereview for ibus-desktop-testing-runner --- src/tests/ibus-desktop-testing-runner.in | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 141e9b5b..72537cd4 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -28,6 +28,10 @@ # # /root/ibus/tests/test-console.sh --tests ibus-compose \ # --builddir /root/ibus/src/tests --srcdir /root/ibus/src/tests +# POSIX sh has no 'echo -e' +: ${ECHO:='/usr/bin/echo'} + + PROGNAME=`basename $0` VERSION=0.1 DISPLAY=:99.0 @@ -54,15 +58,15 @@ print_log() shift fi NO_ESCAPE=`echo $@ | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'` - echo $NO_ESCAPE >> $RESULT_LOG + $ECHO $NO_ESCAPE >> $RESULT_LOG else - echo $@ + $ECHO $@ fi } usage() { - echo -e \ + $ECHO -e \ "This test runs /usr/bin/ibus-daemon after install ibus\n" \ "$PROGNAME [OPTIONS…]\n" \ "\n" \ @@ -92,7 +96,7 @@ parse_args() while [ 1 ] ; do case "$1" in -h | --help ) usage; exit 0;; - -v | --version ) echo -e "$VERSION"; exit 0;; + -v | --version ) $ECHO -e "$VERSION"; exit 0;; -b | --builddir ) BUILDDIR="$2"; shift 2;; -s | --srcdir ) SRCDIR="$2"; shift 2;; -c | --no-graphics ) HAVE_GRAPHICS=0; shift;; @@ -121,7 +125,7 @@ init_desktop() fi if [ "$TEST_LOG" = "" ] ; then print_log -e "${RED}FAIL${NC}: ${RED}ERROR${NC}: a log file is required to get return value with 'read' command" - exit -1 + exit 255 elif [ -f $TEST_LOG ] ; then rm $TEST_LOG fi @@ -291,7 +295,7 @@ EOF done child_pass=`grep '^PASS:' $TEST_LOG | wc -l` child_fail=`grep '^FAIL:' $TEST_LOG | wc -l` - if [ $child_pass -ne 0 -o $child_fail -ne 0 ] ; then + if [ $child_pass -ne 0 ] || [ $child_fail -ne 0 ] ; then pass=$child_pass if [ $child_fail -ne 0 ] ; then fail=`expr $child_fail / 2` -- 2.21.0 From d50627f0b7a000ee13ea6dcc02a4162be1fa853d Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Tue, 3 Dec 2019 21:42:49 +0900 Subject: [PATCH] src/tests: RHEL codereview #2 for ibus-desktop-testing-runner --- src/tests/ibus-compose-locales.in | 21 +++++++-------- src/tests/ibus-desktop-testing-runner.in | 33 ++++++++++++------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/tests/ibus-compose-locales.in b/src/tests/ibus-compose-locales.in index f650b584..b36165fe 100755 --- a/src/tests/ibus-compose-locales.in +++ b/src/tests/ibus-compose-locales.in @@ -7,27 +7,26 @@ BUILDDIR=`dirname $0` export IBUS_COMPOSE_CACHE_DIR=$PWD retval=0 -# Let for-loop notice '\n' as a delimiter -IFS=$'\n' -for var in `cat $SRCDIR/ibus-compose.env` +# Deleted for var in `cat *.env` because IFS=$'\n' is not supported in POSIX sh +while read var do - # Revert IFS to recognize env a=foo b=foo - IFS=' ' IS_COMMENT=`echo "$var" | grep "^#"` if [ "x$IS_COMMENT" != x ] ; then continue fi - echo "# Starting $var $BUILDDIR/ibus-compose $SRCDIR $@" - env $var $BUILDDIR/ibus-compose $SRCDIR $@ + # Use $* instead of $@ not to mix strings and integers + echo "# Starting $var $BUILDDIR/ibus-compose $SRCDIR $*" + # Need to enclose $@ with double quotes not to split the array. + env $var $BUILDDIR/ibus-compose $SRCDIR "$@" retval=`expr $retval + $?` - echo "# Finished $var $BUILDDIR/ibus-compose $SRCDIR $@ with $retval" + echo "# Finished $var $BUILDDIR/ibus-compose $SRCDIR $* with $retval" CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then echo "Clean $CACHE_FILES" rm $CACHE_FILES fi - IFS=$'\n' -done -IFS=' ' +done << EOF_ENVS +`cat $SRCDIR/ibus-compose.env` +EOF_ENVS exit $retval diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 72537cd4..981941d5 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -30,6 +30,8 @@ # POSIX sh has no 'echo -e' : ${ECHO:='/usr/bin/echo'} +# POSIX sh has $UID +: ${UID:='`id -u`'} PROGNAME=`basename $0` @@ -57,10 +59,10 @@ print_log() if [ x"$1" = x'-e' ] ; then shift fi - NO_ESCAPE=`echo $@ | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'` + NO_ESCAPE=`echo "$@" | sed -e 's/\\\033\\[0;3.m//g' -e 's/\\\033\\[0m//g'` $ECHO $NO_ESCAPE >> $RESULT_LOG else - $ECHO $@ + $ECHO "$@" fi } @@ -231,9 +233,9 @@ run_direct_test_cases() if test x"$ENVS" = x ; then $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG retval=$? - read pass fail << EOF + read pass fail << EOF_COUNT `count_case_result $retval $pass $fail` -EOF +EOF_COUNT echo_case_result $retval $tst CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then @@ -242,11 +244,9 @@ EOF fi else i=1 - # Let for-loop notice '\n' as a delimiter - IFS=$'\n' - for e in $ENVS; do - # Revert IFS to recognize env a=foo b=foo - IFS=' ' + # Deleted for var in "$ENVS" because IFS=$'\n' is not supported + # in POSIX sh + while read e ; do first=`echo "$e" | grep '^#'` if test x"$first" = x"#" ; then continue @@ -255,9 +255,9 @@ EOF env $e $BUILDDIR/$tst $SRCDIR 2>>$TEST_LOG 1>>$TEST_LOG retval=$? echo "# Finished $e $BUILDDIR/$tst $SRCDIR with $retval" >>$TEST_LOG - read pass fail << EOF + read pass fail << EOF_COUNT `count_case_result $retval $pass $fail` -EOF +EOF_COUNT echo_case_result $retval $tst $e CACHE_FILES=`ls *.cache` if [ x"$CACHE_FILES" != x ] ; then @@ -265,9 +265,9 @@ EOF rm $CACHE_FILES fi i=`expr $i + 1` - IFS=$'\n' - done - IFS=' ' + done << EOF_ENVS + `echo "$ENVS"` +EOF_ENVS fi done echo $pass $fail @@ -357,7 +357,7 @@ finit() main() { - parse_args $@ + parse_args "$@" init_desktop run_dbus_daemon 2>>$TEST_LOG 1>>$TEST_LOG run_desktop 2>>$TEST_LOG 1>>$TEST_LOG @@ -365,4 +365,5 @@ main() finit } -main $@ +# Need to enclose $@ with double quotes not to split the array. +main "$@" -- 2.21.0 From 74863851e83972e86a5bdb3da3d99784fc8d4955 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Tue, 28 Jan 2020 18:46:13 +0900 Subject: [PATCH] src/tests: Increase sleep to 3 waiting for IBusConfig Sleep 1 would be too short for ibus-daemon which could run all components. ibus-config test requires the running IBusConfig and the test could fail in some slow systems. Sleep time will be increased to 3 to run all components. BUG=https://github.com/ibus/ibus/issues/2170 --- src/tests/ibus-config.c | 4 ++++ src/tests/ibus-desktop-testing-runner.in | 2 +- src/tests/runtest | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/tests/ibus-config.c b/src/tests/ibus-config.c index 5e845f10..0d9812a3 100644 --- a/src/tests/ibus-config.c +++ b/src/tests/ibus-config.c @@ -16,6 +16,10 @@ finish_create_config_async_success (GObject *source_object, IBusConfig *config = ibus_config_new_async_finish (res, &error); + if (error) { + g_message ("Failed to generate IBusConfig: %s", error->message); + g_error_free (error); + } g_assert (IBUS_IS_CONFIG (config)); /* Since we reuse single D-Bus connection, we need to remove the diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 981941d5..0d9a847c 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -190,7 +190,7 @@ run_desktop() HAS_GNOME=`echo $DESKTOP_COMMAND | grep gnome-session` if [ x"$HAS_GNOME" = x ] ; then ibus-daemon --daemonize --verbose - sleep 1 + sleep 3 fi } diff --git a/src/tests/runtest b/src/tests/runtest index ed38992f..a6e4194b 100755 --- a/src/tests/runtest +++ b/src/tests/runtest @@ -180,7 +180,7 @@ run_test_case() fi # Wait until all necessary components are up. - sleep 1 + sleep 3 export GTK_IM_MODULE=ibus fi -- 2.24.1 From 7b0d091839a4f1315ba216175fb2787e86f7fa31 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Tue, 3 Mar 2020 17:08:30 +0900 Subject: [PATCH] src/tests: Delete graves in substitution in ibus-desktop-testing-runner Delete the single quotations to enclose grave chracters because DASH saves the single quoted '`id -u`' as the raw string in the command substitution not to be extracted. BUG=https://github.com/ibus/ibus/issues/2189 --- src/tests/ibus-desktop-testing-runner.in | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index 0d9a847c..f9238e69 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -4,7 +4,7 @@ # # ibus - The Input Bus # -# Copyright (c) 2018-2019 Takao Fujiwara +# Copyright (c) 2018-2020 Takao Fujiwara # Copyright (c) 2018 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify @@ -31,7 +31,8 @@ # POSIX sh has no 'echo -e' : ${ECHO:='/usr/bin/echo'} # POSIX sh has $UID -: ${UID:='`id -u`'} +# DASH saves the graves in '``' as characters not to be extracted +: ${UID:=`id -u`} PROGNAME=`basename $0` @@ -170,7 +171,7 @@ _EOF run_dbus_daemon() { # Use dbus-launch --exit-with-session later instead of --sh-syntax - export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus + export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus" } run_desktop() -- 2.24.1 From 8da016764cee9616cca4658d1fb311d6b3bfc0df Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Wed, 15 Apr 2020 17:55:03 +0900 Subject: [PATCH] src/tests: Fix to get focus events with su in ibus-desktop-testing-runner GtkWindow haven't received focus events in any test cases since Fedora 31 whenever Ansible runs ibus-desktop-testing-runner after `su root`. Seems su command does not run systemd automatically and now systemd requires XDG_RUNTIME_DIR and Ansible requires root access with ssh. This fix requires to restart sshd with modified /etc/ssh/sshd_config with "PermitRootLogin yes" in order to run with su command. Ansible with ibus-desktop-testin-runner has worked fine if root console login is used without this patch because PAM runs systemd by login. --- src/tests/ibus-desktop-testing-runner.in | 36 ++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index f9238e69..f760fd5b 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -49,6 +49,7 @@ PID_XORG=0 PID_GNOME_SESSION=0 TESTING_RUNNER="default" TESTS="" +TIMEOUT=300 GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' @@ -84,6 +85,7 @@ usage() "-r, --runner=RUNNER Run TESTS programs with a test RUNNER.\n" \ " RUNNDER = gnome or default.\n" \ " default is an embedded runner.\n" \ +"-T, --timeout=TIMEOUT Set timeout (default TIMEOUT is 300 sec).\n" \ "-o, --output=OUTPUT_FILE OUtput the log to OUTPUT_FILE\n" \ "-O, --result=RESULT_FILE OUtput the result to RESULT_FILE\n" \ "" @@ -92,8 +94,8 @@ usage() parse_args() { # This is GNU getopt. "sudo port getopt" in BSD? - ARGS=`getopt -o hvb:s:cd:t:r:o:O: --long \ - help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,output:,result:\ + ARGS=`getopt -o hvb:s:cd:t:r:T:o:O: --long \ + help,version,builddir:,srcdir:,no-graphics,desktop:,tests:,runner:,timeout:,output:,result:\ -- "$@"`; eval set -- "$ARGS" while [ 1 ] ; do @@ -106,6 +108,7 @@ parse_args() -d | --desktop ) DESKTOP_COMMAND="$2"; shift 2;; -t | --tests ) TESTS="$2"; shift 2;; -r | --runner ) TESTING_RUNNER="$2"; shift 2;; + -T | --timeout ) TIMEOUT="$2"; shift 2;; -o | --output ) TEST_LOG="$2"; shift 2;; -O | --result ) RESULT_LOG="$2"; shift 2;; -- ) shift; break;; @@ -166,11 +169,37 @@ _EOF fi # `su` command does not run loginctl export XDG_SESSION_TYPE='x11' + export XDG_SESSION_CLASS=user + # `su` command does not get focus in events without this variable. + # Need to restart sshd after set "PermitRootLogin yes" in sshd_config + if [ "x$XDG_RUNTIME_DIR" = x ] ; then + export XDG_RUNTIME_DIR=/run/user/$UID + is_root_login=`grep "^PermitRootLogin" /etc/ssh/sshd_config | grep yes` + if [ "x$ANSIBLE" != x ] && [ "x$is_root_login" = x ] ; then + print_log -e "${RED}FAIL${NC}: No permission to get focus-in events in GtkWindow with ansible" + echo "su command does not configure necessary login info " \ + "with systemd and GtkWindow cannot receive focus-events " \ + "when ibus-desktop-testing-runner is executed by " \ + "ansible-playbook." >> $TEST_LOG + echo "Enabling root login via sshd, restarting sshd, set " \ + "XDG_RUNTIME_DIR can resolve the problem under " \ + "ansible-playbook." >> $TEST_LOG + exit 255 + fi + fi + # Do we need XDG_SESSION_ID and XDG_SEAT? + #export XDG_CONFIG_DIRS=/etc/xdg + #export XDG_SESSION_ID=10 + #export XDG_SESSION_DESKTOP=gnome + #export XDG_SEAT=seat0 } run_dbus_daemon() { # Use dbus-launch --exit-with-session later instead of --sh-syntax + # GNOME uses a unix:abstract address and it effects gsettings set values + # in each test case. + # TODO: Should we comment out this line? export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus" } @@ -288,7 +317,8 @@ run_gnome_desktop_testing_runner() fail=1 continue fi - gnome-desktop-testing-runner $tst 2>>$TEST_LOG 1>>$TEST_LOG + gnome-desktop-testing-runner --timeout=$TIMEOUT $tst \ + 2>>$TEST_LOG 1>>$TEST_LOG retval=$? read pass fail << EOF `count_case_result $retval $pass $fail` -- 2.24.1 From 0b9d9365988a96a2bc31c48624f9c2b8081601b6 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Wed, 22 Apr 2020 20:17:12 +0900 Subject: [PATCH] client/gtk2: Fix typo --- client/gtk2/ibusim.c | 4 ++-- src/tests/ibus-desktop-testing-runner.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tests/ibus-desktop-testing-runner.in b/src/tests/ibus-desktop-testing-runner.in index f760fd5b..4232c549 100755 --- a/src/tests/ibus-desktop-testing-runner.in +++ b/src/tests/ibus-desktop-testing-runner.in @@ -173,7 +173,7 @@ _EOF # `su` command does not get focus in events without this variable. # Need to restart sshd after set "PermitRootLogin yes" in sshd_config if [ "x$XDG_RUNTIME_DIR" = x ] ; then - export XDG_RUNTIME_DIR=/run/user/$UID + export XDG_RUNTIME_DIR="/run/user/$UID" is_root_login=`grep "^PermitRootLogin" /etc/ssh/sshd_config | grep yes` if [ "x$ANSIBLE" != x ] && [ "x$is_root_login" = x ] ; then print_log -e "${RED}FAIL${NC}: No permission to get focus-in events in GtkWindow with ansible" -- 2.24.1