Blame tests/test_gi.py

Packit Service 93d855
#!/usr/bin/python
Packit Service 93d855
#
Packit Service 93d855
# Test GI binding of libxklavier
Packit Service 93d855
# Copyright (C) 2011 Martin Pitt <martin.pitt@ubuntu.com>
Packit Service 93d855
#
Packit Service 93d855
# This library is free software; you can redistribute it and/or
Packit Service 93d855
# modify it under the terms of the GNU Lesser General Public
Packit Service 93d855
# License as published by the Free Software Foundation; either
Packit Service 93d855
# version 2 of the License, or (at your option) any later version.
Packit Service 93d855
#
Packit Service 93d855
# This library is distributed in the hope that it will be useful,
Packit Service 93d855
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 93d855
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 93d855
# Lesser General Public License for more details.
Packit Service 93d855
Packit Service 93d855
import sys
Packit Service 93d855
import os
Packit Service 93d855
Packit Service 93d855
# use source tree typelib
Packit Service 93d855
os.environ['GI_TYPELIB_PATH'] = 'libxklavier:' + os.environ.get('GI_TYPELIB_PATH', '')
Packit Service 93d855
Packit Service 93d855
from gi.repository import Xkl, Gdk, GdkX11
Packit Service 93d855
Packit Service 93d855
def item_str(s):
Packit Service 93d855
    '''Convert a zero-terminated byte array to a proper str'''
Packit Service 93d855
Packit Service 93d855
    i = s.find(b'\x00')
Packit Service 93d855
    return s[:i].decode()
Packit Service 93d855
Packit Service 93d855
display = GdkX11.x11_get_default_xdisplay()
Packit Service 93d855
Packit Service 93d855
print('== Engine ==')
Packit Service 93d855
engine = Xkl.Engine.get_instance(display)
Packit Service 93d855
Packit Service 93d855
print('indicator names:', engine.get_indicators_names())
Packit Service 93d855
print('group names:', engine.get_groups_names())
Packit Service 93d855
print('default layout:', engine.get_groups_names()[engine.get_default_group()])
Packit Service 93d855
print('features: %X' % engine.get_features())
Packit Service 93d855
st = engine.get_current_state()
Packit Service 93d855
print('current state: group: %i, indicators: %u' % (st.group, st.indicators))
Packit Service 93d855
Packit Service 93d855
# check ConfigItem ctor with data
Packit Service 93d855
i = Xkl.ConfigItem()
Packit Service 93d855
assert item_str(i.name) == ''
Packit Service 93d855
i.set_name('fr')
Packit Service 93d855
assert item_str(i.name) == 'fr'
Packit Service 93d855
Packit Service 93d855
# load registry
Packit Service 93d855
registry = Xkl.ConfigRegistry.get_instance(engine)
Packit Service 93d855
Packit Service 93d855
if not registry.load(False):
Packit Service 93d855
    print('Failed to load registry')
Packit Service 93d855
    sys.exit(1)
Packit Service 93d855
Packit Service 93d855
print('\n== Available Layouts ==')
Packit Service 93d855
def layout_iter(registry, item, data):
Packit Service 93d855
    print('[%s] %s, ' % (item_str(item.name), item_str(item.description)))
Packit Service 93d855
Packit Service 93d855
registry.foreach_layout(layout_iter, None)
Packit Service 93d855
print()
Packit Service 93d855
Packit Service 93d855
print('\n== ConfigRec ==')
Packit Service 93d855
rec = Xkl.ConfigRec()
Packit Service 93d855
if not rec.get_from_server(engine):
Packit Service 93d855
    print('Failed to get configuration from server')
Packit Service 93d855
    sys.exit(1)
Packit Service 93d855
Packit Service 93d855
print('Curent configuration:')
Packit Service 93d855
print('  Model:', rec.model)
Packit Service 93d855
print('  Layouts:', rec.layouts)
Packit Service 93d855
print('  Variants:', rec.variants)
Packit Service 93d855
print('  Options:', rec.options)
Packit Service 93d855
Packit Service 93d855
print('Adding Danish layout...')
Packit Service 93d855
rec.set_layouts(rec.layouts + ['dk'])
Packit Service 93d855
rec.set_variants(rec.variants + [''])
Packit Service 93d855
if not rec.activate(engine):
Packit Service 93d855
    print('Failed to activate new configuration')
Packit Service 93d855
Packit Service 93d855
print('Curent configuration:')
Packit Service 93d855
rec = Xkl.ConfigRec()
Packit Service 93d855
if not rec.get_from_server(engine):
Packit Service 93d855
    print('Failed to get configuration from server')
Packit Service 93d855
    sys.exit(1)
Packit Service 93d855
print('  Model:', rec.model)
Packit Service 93d855
print('  Layouts:', rec.layouts)
Packit Service 93d855
print('  Variants:', rec.variants)
Packit Service 93d855
print('  Options:', rec.options)
Packit Service 93d855
Packit Service 93d855
print('Removing Danish layout...')
Packit Service 93d855
rec.set_layouts(rec.layouts[:-1])
Packit Service 93d855
rec.set_variants(rec.variants[:-1])
Packit Service 93d855
if not rec.activate(engine):
Packit Service 93d855
    print('Failed to activate new configuration')
Packit Service 93d855
Packit Service 93d855
print('Curent configuration:')
Packit Service 93d855
rec = Xkl.ConfigRec()
Packit Service 93d855
if not rec.get_from_server(engine):
Packit Service 93d855
    print('Failed to get configuration from server')
Packit Service 93d855
    sys.exit(1)
Packit Service 93d855
print('  Model:', rec.model)
Packit Service 93d855
print('  Layouts:', rec.layouts)
Packit Service 93d855
print('  Variants:', rec.variants)
Packit Service 93d855
print('  Options:', rec.options)
Packit Service 93d855
Packit Service 93d855
print('Changing model to "pc105"...')
Packit Service 93d855
original_model = rec.model
Packit Service 93d855
rec.set_model("pc105")
Packit Service 93d855
Packit Service 93d855
print('Curent configuration:')
Packit Service 93d855
print('  Model:', rec.model)
Packit Service 93d855
print('  Layouts:', rec.layouts)
Packit Service 93d855
print('  Variants:', rec.variants)
Packit Service 93d855
print('  Options:', rec.options)
Packit Service 93d855
Packit Service 93d855
print('Changing back to original model...')
Packit Service 93d855
rec.set_model(original_model)
Packit Service 93d855
Packit Service 93d855
print('Curent configuration:')
Packit Service 93d855
print('  Model:', rec.model)
Packit Service 93d855
print('  Layouts:', rec.layouts)
Packit Service 93d855
print('  Variants:', rec.variants)
Packit Service 93d855
print('  Options:', rec.options)
Packit Service 93d855
Packit Service 93d855
print
Packit Service 93d855
original_options = rec.options[:]
Packit Service 93d855
if not any("toggle" in opt for opt in rec.options):
Packit Service 93d855
    print('Adding Alt+Shift as an option for switching layouts...')
Packit Service 93d855
    rec.set_options(rec.options + ["grp:alt_shift_toggle"])
Packit Service 93d855
    if not rec.activate(engine):
Packit Service 93d855
        print('Failed to activate new configuration')
Packit Service 93d855
Packit Service 93d855
original_layouts = rec.layouts[:]
Packit Service 93d855
original_variants = rec.variants[:]
Packit Service 93d855
if len(rec.layouts) == 1:
Packit Service 93d855
    print('Adding Danish layout...')
Packit Service 93d855
    rec.set_layouts(rec.layouts + ['dk'])
Packit Service 93d855
    rec.set_variants(rec.variants + [''])
Packit Service 93d855
    if not rec.activate(engine):
Packit Service 93d855
        print('Failed to activate new configuration')
Packit Service 93d855
Packit Service 93d855
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
Packit Service 93d855
groups_names = engine.get_groups_names()
Packit Service 93d855
state = engine.get_current_state()
Packit Service 93d855
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
Packit Service 93d855
curent_layout = groups_names[state.group]
Packit Service 93d855
Packit Service 93d855
print('Curent active layout: %s' % curent_layout)
Packit Service 93d855
raw_input('Please change your layout and hit ENTER')
Packit Service 93d855
Packit Service 93d855
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
Packit Service 93d855
groups_names = engine.get_groups_names()
Packit Service 93d855
state = engine.get_current_state()
Packit Service 93d855
engine.start_listen(Xkl.EngineListenModes.TRACK_KEYBOARD_STATE)
Packit Service 93d855
curent_layout = groups_names[state.group]
Packit Service 93d855
Packit Service 93d855
print('Curent active layout: %s' % curent_layout)
Packit Service 93d855
Packit Service 93d855
print('Restoring original configuration...')
Packit Service 93d855
rec.set_layouts(original_layouts)
Packit Service 93d855
rec.set_variants(original_variants)
Packit Service 93d855
rec.set_options(original_options)
Packit Service 93d855
if not rec.activate(engine):
Packit Service 93d855
    print('Failed to activate new configuration')