diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2022-06-17 17:37:39 +0900 |
---|---|---|
committer | 坂本 貴史 <o-takashi@sakamocchi.jp> | 2022-06-19 18:56:37 +0900 |
commit | 92f4da2e447633b7a7260b6818086d39c301aa07 (patch) | |
tree | a9f4e4a364d3ee78137a2b1d27f955d192541e27 | |
parent | 7362318dc5460c7656c0ef6a4ae6945cc691f9ed (diff) | |
download | libhinoko-92f4da2e447633b7a7260b6818086d39c301aa07.tar.gz |
tests: refine helper function to test object
When implementing GObject interface, available properties, virtual
methods, and signals are not referred by attributes of object, while
available methods are available.
This commit expands current helper function to test object interface.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
-rw-r--r-- | tests/fw-iso-resource-auto | 19 | ||||
-rw-r--r-- | tests/fw-iso-resource-once | 16 | ||||
-rwxr-xr-x | tests/fw-iso-rx-multiple | 23 | ||||
-rwxr-xr-x | tests/fw-iso-rx-single | 28 | ||||
-rwxr-xr-x | tests/fw-iso-tx | 26 | ||||
-rw-r--r-- | tests/helper.py | 39 |
6 files changed, 114 insertions, 37 deletions
diff --git a/tests/fw-iso-resource-auto b/tests/fw-iso-resource-auto index d5cb3d4..7242586 100644 --- a/tests/fw-iso-resource-auto +++ b/tests/fw-iso-resource-auto @@ -14,24 +14,31 @@ props = ( 'is-allocated', 'channel', 'bandwidth', + # From interface. 'generation', ) methods = ( 'new', + 'deallocate_async', + 'deallocate_sync', + # From interface. 'open', 'create_source', 'allocate_async', - 'deallocate_async', 'allocate_sync', - 'deallocate_sync', ) vmethods = ( - #'do_allocated', - #'do_deallocated', + # From interface. + 'do_open', + 'do_allocate_async', + 'do_create_source', + 'do_allocated', + 'do_deallocated', ) signals = ( - #'allocated', - #'deallocated', + # From interface. + 'allocated', + 'deallocated', ) if not test_object(target_type, props, methods, vmethods, signals): diff --git a/tests/fw-iso-resource-once b/tests/fw-iso-resource-once index 44e2ccd..b4d475d 100644 --- a/tests/fw-iso-resource-once +++ b/tests/fw-iso-resource-once @@ -11,24 +11,28 @@ from gi.repository import Hinoko target_type = Hinoko.FwIsoResourceOnce props = ( + # From interface. 'generation', ) methods = ( 'new', + 'deallocate_async', + 'deallocate_sync', + # From interface. 'open', 'create_source', 'allocate_async', - 'deallocate_async', 'allocate_sync', - 'deallocate_sync', ) vmethods = ( - #'do_allocated', - #'do_deallocated', + # From interface. + 'do_allocated', + 'do_deallocated', ) signals = ( - #'allocated', - #'deallocated', + # From interface. + 'allocated', + 'deallocated', ) diff --git a/tests/fw-iso-rx-multiple b/tests/fw-iso-rx-multiple index a97a354..beeb1b2 100755 --- a/tests/fw-iso-rx-multiple +++ b/tests/fw-iso-rx-multiple @@ -12,22 +12,39 @@ from gi.repository import Hinoko target_type = Hinoko.FwIsoRxMultiple props = ( 'channels', + # From interface. + 'bytes-per-chunk', + 'chunks-per-buffer', ) methods = ( 'new', 'allocate', - 'release', 'map_buffer', - 'unmap_buffer', 'start', - 'stop', 'get_payload', + # From interface. + 'stop', + 'unmap_buffer', + 'release', + 'get_cycle_timer', + 'create_source', + 'flush_completions', ) vmethods = ( 'do_interrupted', + # From interface. + 'do_stop', + 'do_unmap_buffer', + 'do_release', + 'do_get_cycle_timer', + 'do_flush_completions', + 'do_create_source', + 'do_stopped', ) signals = ( 'interrupted', + # From interface. + 'stopped', ) if not test_object(target_type, props, methods, vmethods, signals): diff --git a/tests/fw-iso-rx-single b/tests/fw-iso-rx-single index 7fff430..07a0c59 100755 --- a/tests/fw-iso-rx-single +++ b/tests/fw-iso-rx-single @@ -10,23 +10,41 @@ gi.require_version('Hinoko', '0.0') from gi.repository import Hinoko target_type = Hinoko.FwIsoRxSingle -props = () +props = ( + # From interface. + 'bytes-per-chunk', + 'chunks-per-buffer', +) methods = ( 'new', 'allocate', - 'release', 'map_buffer', - 'unmap_buffer', - 'register_packet', 'start', - 'stop', 'get_payload', + 'register_packet', + # From interface. + 'stop', + 'unmap_buffer', + 'release', + 'get_cycle_timer', + 'create_source', + 'flush_completions', ) vmethods = ( 'do_interrupted', + # From interface. + 'do_stop', + 'do_unmap_buffer', + 'do_release', + 'do_get_cycle_timer', + 'do_flush_completions', + 'do_create_source', + 'do_stopped', ) signals = ( 'interrupted', + # From interface. + 'stopped', ) if not test_object(target_type, props, methods, vmethods, signals): diff --git a/tests/fw-iso-tx b/tests/fw-iso-tx index d6cb768..dfd6af2 100755 --- a/tests/fw-iso-tx +++ b/tests/fw-iso-tx @@ -10,22 +10,40 @@ gi.require_version('Hinoko', '0.0') from gi.repository import Hinoko target_type = Hinoko.FwIsoTx -props = () +props = ( + # From interface. + 'bytes-per-chunk', + 'chunks-per-buffer', +) methods = ( 'new', 'allocate', - 'release', 'map_buffer', - 'unmap_buffer', 'start', - 'stop', 'register_packet', + # From interface. + 'stop', + 'unmap_buffer', + 'release', + 'get_cycle_timer', + 'create_source', + 'flush_completions', ) vmethods = ( 'do_interrupted', + # From interface. + 'do_stop', + 'do_unmap_buffer', + 'do_release', + 'do_get_cycle_timer', + 'do_flush_completions', + 'do_create_source', + 'do_stopped', ) signals = ( 'interrupted', + # From interface. + 'stopped', ) if not test_object(target_type, props, methods, vmethods, signals): diff --git a/tests/helper.py b/tests/helper.py index 0bb6b5b..5a42934 100644 --- a/tests/helper.py +++ b/tests/helper.py @@ -1,24 +1,37 @@ -import gi -gi.require_version('GObject', '2.0') -from gi.repository import GObject +def test_object(target_type: object, props: tuple[str], methods: tuple[str], + vmethods: tuple[str], signals: tuple[str]) -> bool: + # All of available methods are put into the list of attribute. + for method in methods: + if not hasattr(target_type, method): + print('Method {0} is not produced.'.format(method)) + return False + + # The properties, virtual methods, and signals in interface are not put + # into the list of attribute in object implementing the interface. + prop_labels = [] + vmethod_labels = [] + signal_labels = [] + + # The gi.ObjectInfo and gi.InterfaceInfo keeps them. Let's traverse them. + for info in target_type.__mro__: + if hasattr(info, '__info__'): + for prop in info.__info__.get_properties(): + prop_labels.append(prop.get_name()) + for vfunc in info.__info__.get_vfuncs(): + vmethod_labels.append('do_' + vfunc.get_name()) + for signal in info.__info__.get_signals(): + signal_labels.append(signal.get_name()) -def test_object(target_type, props, methods, vmethods, signals) ->bool: - labels = [prop.name for prop in target_type.props] for prop in props: - if prop not in labels: + if prop not in prop_labels: print('Property {0} is not produced.'.format(prop)) return False - for method in methods: - if not hasattr(target_type, method): - print('Method {0} is not produced.'.format(method)) - return False for vmethod in vmethods: - if not hasattr(target_type, method): + if vmethod not in vmethod_labels: print('Vmethod {0} is not produced.'.format(vmethod)) return False - labels = GObject.signal_list_names(target_type) for signal in signals: - if signal not in labels: + if signal not in signal_labels: print('Signal {0} is not produced.'.format(signal)) return False return True |