aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2022-06-17 17:37:39 +0900
committer坂本 貴史 <o-takashi@sakamocchi.jp>2022-06-19 18:56:37 +0900
commit92f4da2e447633b7a7260b6818086d39c301aa07 (patch)
treea9f4e4a364d3ee78137a2b1d27f955d192541e27
parent7362318dc5460c7656c0ef6a4ae6945cc691f9ed (diff)
downloadlibhinoko-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-auto19
-rw-r--r--tests/fw-iso-resource-once16
-rwxr-xr-xtests/fw-iso-rx-multiple23
-rwxr-xr-xtests/fw-iso-rx-single28
-rwxr-xr-xtests/fw-iso-tx26
-rw-r--r--tests/helper.py39
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