ibus-anthy/ibus-anthy-HEAD.patch

447 lines
15 KiB
Diff
Raw Normal View History

From 5a9e4858f1a2b6cad02ef1d272fc5bed959ec0bf Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 16 Oct 2019 17:58:55 +0900
Subject: [PATCH] Integrate anthy automation tests to
ibus-desktop-testing-runner
The test cases can be run with ibus-desktop-testing-runner:
% ibus-desktop-testing-runner \
--no-graphics \
--runner=gnome \
--tests='ibus-anthy' \
--output='./ibus-anthy.log' \
--result='./test.log'
ibus-desktop-testing-runner requires gnome-desktop-testing-runner
in case --runner option is given.
---
configure.ac | 14 +++++
tests/Makefile.am | 46 +++++++++++++--
tests/anthycases.py | 0
tests/anthytest.py | 135 +++++++++++++++++++++++++++-----------------
tests/meta.test.in | 4 ++
5 files changed, 142 insertions(+), 57 deletions(-)
mode change 100644 => 100755 tests/anthycases.py
mode change 100644 => 100755 tests/anthytest.py
create mode 100644 tests/meta.test.in
diff --git a/configure.ac b/configure.ac
index 06c4521..64afcc6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -398,6 +398,20 @@ LAYOUT_XML="<layout>${LAYOUT}</layout>"
AC_SUBST(LAYOUT)
AC_SUBST(LAYOUT_XML)
+dnl --enable-installed-tests
+AC_ARG_ENABLE(installed-tests,
+ AS_HELP_STRING([--enable-installed-tests],
+ [Enable to installed tests]),
+ [enable_installed_tests=$enableval],
+ [enable_installed_tests=no]
+)
+AM_CONDITIONAL([ENABLE_INSTALLED_TESTS],
+ [test x"$enable_installed_tests" = x"yes"])
+if test x"$enable_installed_tests" = x"no"; then
+ enable_installed_tests="no (disabled, use --enable-installed-tests to enable)"
+fi
+
+
dnl libtool versioning
dnl
dnl If LT_VERSION_INFO="lt_current:lt_revision:lt_age", libibus is
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b2d35d6..d891ff2 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -19,12 +19,48 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+CLEANFILES =
+
check:
+ @TAP_DIR=`python -m site --user-site`/tap; \
+ if test x"$$TAP_DIR" != x -a ! -d "$$TAP_DIR" ; then \
+ echo "pip install tap.py --user"; \
+ pip install tap.py --user; \
+ fi; \
bash -x $(srcdir)/test-build.sh --builddir=$(builddir) --srcdir=$(srcdir)
+if ENABLE_INSTALLED_TESTS
+test_execsdir = $(libexecdir)/installed-tests/ibus-anthy
+test_execs = anthytest
+test_execs_SCRIPTS = \
+ anthycases.py \
+ anthytest.py \
+ $(NULL)
+
+test_metas_in = meta.test.in
+test_metas = $(addsuffix .test, $(test_execs))
+test_sources_DATA = \
+ $(test_metas) \
+ $(NULL)
+test_sourcesdir = $(datadir)/installed-tests/ibus-anthy
+
+CLEANFILES += \
+ $(test_metas) \
+ $(NULL)
+endif
+
+$(test_metas): $(test_metas_in)
+ f=`echo $@ | sed -e 's/\.test//'`; \
+ TEST_EXEC=$(test_execsdir)/$${f}.py; \
+ sed -e "s|@TEST_EXEC[@]|$$TEST_EXEC|g" $(test_metas_in) > $@.tmp; \
+ mv $@.tmp $@; \
+ $(NULL)
+
EXTRA_DIST = \
- anthycases.py \
- anthytest.py \
- test-build.sh \
- test-console.sh \
- $(NULL)
+ anthycases.py \
+ anthytest.py \
+ meta.test.in \
+ test-build.sh \
+ test-console.sh \
+ $(NULL)
diff --git a/tests/anthycases.py b/tests/anthycases.py
old mode 100644
new mode 100755
diff --git a/tests/anthytest.py b/tests/anthytest.py
old mode 100644
new mode 100755
index 377576c..11d0e2b
--- a/tests/anthytest.py
+++ b/tests/anthytest.py
@@ -5,19 +5,28 @@ from __future__ import print_function
from gi import require_version as gi_require_version
gi_require_version('GLib', '2.0')
+gi_require_version('Gio', '2.0')
gi_require_version('Gtk', '3.0')
gi_require_version('IBus', '1.0')
from gi.repository import GLib
+from gi.repository import Gio
from gi.repository import Gtk
from gi.repository import IBus
+import argparse
import getopt
import os
import sys
import subprocess
+import unittest
+
+try:
+ from tap import TAPTestRunner
+except ModuleNotFoundError as err:
+ print('Ignore tap module: %s' % str(err))
PY3K = sys.version_info >= (3, 0)
-DONE_EXIT = False
+DONE_EXIT = True
if 'IBUS_ANTHY_ENGINE_PATH' in os.environ:
engine_path = os.environ['IBUS_ANTHY_ENGINE_PATH']
@@ -31,11 +40,28 @@ sys.path.append('/usr/share/ibus-anthy/engine')
from anthycases import TestCases
-class AnthyTest:
+# Need to flush the output against Gtk.main()
+def printflush(sentence):
+ try:
+ print(sentence, flush=True)
+ except IOError:
+ pass
+
+def printerr(sentence):
+ try:
+ print(sentence, flush=True, file=sys.stderr)
+ except IOError:
+ pass
+
+class AnthyTest(unittest.TestCase):
global DONE_EXIT
ENGINE_PATH = '/com/redhat/IBus/engines/Anthy/Test/Engine'
- def __init__(self):
+
+ @classmethod
+ def setUpClass(cls):
IBus.init()
+
+ def setUp(self):
self.__id = 0
self.__rerun = False
self.__test_index = 0
@@ -141,7 +167,6 @@ class AnthyTest:
if not self.__bus.set_global_engine_async_finish(res):
warning('set engine failed: ' + error.message)
return
- print('enabled engine')
self.__enable_hiragana()
self.__main_test()
@@ -173,28 +198,15 @@ class AnthyTest:
self.__run_cases('commit')
def __enable_hiragana(self):
- commands = ['gsettings', 'get',
- 'org.freedesktop.ibus.engine.anthy.common',
- 'input-mode'
- ]
- if PY3K:
- py3result = subprocess.run(commands, stdout=subprocess.PIPE)
- try:
- result = int(py3result.stdout)
- except ValueError:
- # No user data
- result = 0
- else:
- py2result = subprocess.check_output(commands)
- result = py2result
- if result == '':
- result = 0
+ settings = Gio.Settings(
+ schema = "org.freedesktop.ibus.engine.anthy.common");
+ result = settings.get_int('input-mode')
if result != 0:
- print('Enable hiragana', result)
+ printflush('Enable hiragana %d' % result)
key = TestCases['init']
self.__typing(key[0], key[1], key[2])
else:
- print('Already hiragana')
+ printflush('Already hiragana')
def __main_test(self):
self.__conversion_index = 0
@@ -214,7 +226,8 @@ class AnthyTest:
i = 0
if type == 'string':
if start == -1 and end == -1:
- print('test step:', tag, 'sequences: "' + cases['string'] + '"')
+ printflush('test step: %s sequences: "%s"' \
+ % (tag, str(cases['string'])))
for a in cases['string']:
if start >= 0 and i < start:
i += 1
@@ -222,12 +235,14 @@ class AnthyTest:
if end >= 0 and i >= end:
break;
if start != -1 or end != -1:
- print('test step:', tag, 'sequences: "' + cases['string'][i] + '"')
+ printflush('test step: %s sequences: "%s"' \
+ % (tag, str(cases['string'])))
self.__typing(ord(a), 0, 0)
i += 1
if type == 'keys':
if start == -1 and end == -1:
- print('test step:', tag, 'sequences:', cases['keys'])
+ printflush('test step: %s sequences: %s' \
+ % (tag, str(cases['keys'])))
for key in cases['keys']:
if start >= 0 and i < start:
i += 1
@@ -235,7 +250,8 @@ class AnthyTest:
if end >= 0 and i >= end:
break;
if start != -1 or end != -1:
- print('test step: %s sequences: [0x%X, 0x%X, 0x%X]' % (tag, key[0], key[1], key[2]))
+ printflush('test step: %s sequences: [0x%X, 0x%X, 0x%X]' \
+ % (tag, key[0], key[1], key[2]))
self.__typing(key[0], key[1], key[2])
i += 1
@@ -248,9 +264,10 @@ class AnthyTest:
tests = TestCases['tests'][self.__test_index]
cases = tests['result']
if cases['string'] == chars:
- print("OK: ", chars)
+ printflush('OK: %d %s' % (self.__test_index, chars))
else:
- print("NG: ", cases['string'], chars)
+ printflush('NG: %d %s %s' \
+ % (self.__test_index, str(cases['string']), chars))
self.__test_index += 1
if self.__test_index == len(TestCases['tests']):
if DONE_EXIT:
@@ -259,9 +276,15 @@ class AnthyTest:
self.__entry.set_text('')
self.__main_test()
- def run(self):
+ def main(self):
Gtk.main()
+ def test_typing(self):
+ if not self.register_ibus_engine():
+ sys.exit(-1)
+ self.create_window()
+ self.main()
+
def print_help(out, v = 0):
print('-e, --exit Exit this program after test is done.',
file=out)
@@ -285,25 +308,30 @@ def get_userhome():
return userhome
def main():
- shortopt = 'efh'
- longopt = ['exit', 'force', 'help']
force_run = False
- try:
- opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt)
- except getopt.GetoptError as err:
- print_help(sys.stderr, 1)
-
- for o, a in opts:
- if o in ('-e', '--exit'):
- global DONE_EXIT
- DONE_EXIT = True
- elif o in ('-f', '--force'):
- force_run = True
- elif o in ('-h', '--help'):
- print_help(sys.stderr)
- else:
- print('Unknown argument: %s' % o, file=sys.stderr)
- print_help(sys.stderr, 1)
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-k', '--keep', action='store_true',
+ help='keep this GtkWindow after test is done')
+ parser.add_argument('-f', '--force', action='store_true',
+ help='run this program forcibly with .anthy')
+ parser.add_argument('-t', '--tap', action='store_true',
+ help='enable TAP')
+ parser.add_argument('-F', '--unittest-failfast', action='store_true',
+ help='stop on first fail or error in unittest')
+ parser.add_argument('-H', '--unittest-help', action='store_true',
+ help='show unittest help message and exit')
+ args, unittest_args = parser.parse_known_args()
+ sys.argv[1:] = unittest_args
+ if args.keep:
+ global DONE_EXIT
+ DONE_EXIT = False
+ if args.force:
+ force_run = True
+ if args.unittest_failfast:
+ sys.argv.append('-f')
+ if args.unittest_help:
+ sys.argv.append('-h')
+ unittest.main()
for anthy_config in ['/.config/anthy', '/.anthy']:
anthy_user_dir = get_userhome() + anthy_config
@@ -312,11 +340,14 @@ def main():
print('Please remove %s before the test' % anthy_last_file,
file=sys.stderr)
sys.exit(-1)
- EngineTest = AnthyTest()
- if not EngineTest.register_ibus_engine():
- sys.exit(-1)
- EngineTest.create_window()
- EngineTest.run()
+
+ if args.tap:
+ loader = unittest.TestLoader()
+ runner = TAPTestRunner()
+ runner.set_stream(True)
+ unittest.main(testRunner=runner, testLoader=loader)
+ else:
+ unittest.main()
if __name__ == '__main__':
main()
diff --git a/tests/meta.test.in b/tests/meta.test.in
new file mode 100644
index 0000000..ae2b299
--- /dev/null
+++ b/tests/meta.test.in
@@ -0,0 +1,4 @@
+[Test]
+Type=session
+Exec=@TEST_EXEC@ --tap
+Output=TAP
--
2.21.0
2015-07-16 10:16:16 +00:00
From a2e418003b3733c5792fbab62a2e364a343a6e49 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 4 Dec 2019 16:58:52 +0900
Subject: [PATCH] configure: Fix to install zipcode dict with anthy-unicode
(#1779129)
---
configure.ac | 2 +-
setup/python2/main.py | 6 +++---
setup/python3/main.py | 6 +++---
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/configure.ac b/configure.ac
index 64afcc6..3fecd12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -236,7 +236,7 @@ AC_ARG_WITH(anthy-zipcode,
[AC_HELP_STRING([--with-anthy-zipcode=FILE],
[file path of Anty zipcode.t])],
[ANTHY_ZIPCODE_FILE="$withval"],
- [ANTHY_ZIPCODE_FILE="$datadir/anthy/zipcode.t"])
+ [ANTHY_ZIPCODE_FILE="$datadir/$ANTHY_PC/zipcode.t"])
test "x$prefix" = xNONE && prefix=$ac_default_prefix
eval ANTHY_ZIPCODE_FILE=$ANTHY_ZIPCODE_FILE
eval ANTHY_ZIPCODE_FILE=$ANTHY_ZIPCODE_FILE
diff --git a/setup/python2/main.py b/setup/python2/main.py
index 1fb5a67..4e6b15b 100644
--- a/setup/python2/main.py
+++ b/setup/python2/main.py
@@ -4,8 +4,8 @@
#
# Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
# Copyright (c) 2009 Hideaki ABE <abe.sendai@gmail.com>
-# Copyright (c) 2010-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2017 Red Hat, Inc.
+# Copyright (c) 2010-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2019 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
@@ -1460,7 +1460,7 @@ class AnthySetup(object):
Gtk.MessageType.ERROR)
return
if not path.exists(dict_file[0]):
- self.__run_message_dialog(_("Your file does not exist: ") + dict_file,
+ self.__run_message_dialog(_("Your file does not exist: ") + dict_file[0],
Gtk.MessageType.ERROR)
return
diff --git a/setup/python3/main.py b/setup/python3/main.py
index 5fd3040..340e8ef 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -4,8 +4,8 @@
#
# Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
# Copyright (c) 2009 Hideaki ABE <abe.sendai@gmail.com>
-# Copyright (c) 2010-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2017 Red Hat, Inc.
+# Copyright (c) 2010-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2019 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
@@ -1454,7 +1454,7 @@ class AnthySetup(object):
Gtk.MessageType.ERROR)
return
if not path.exists(dict_file[0]):
- self.__run_message_dialog(_("Your file does not exist: ") + dict_file,
+ self.__run_message_dialog(_("Your file does not exist: ") + dict_file[0],
Gtk.MessageType.ERROR)
return
--
2.21.0