mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-19 20:34:30 +00:00
146 lines
3.9 KiB
Python
146 lines
3.9 KiB
Python
"""Louie plugin tests."""
|
|
|
|
import unittest
|
|
|
|
import louie
|
|
|
|
try:
|
|
import qt
|
|
if not hasattr(qt.qApp, 'for_testing'):
|
|
_app = qt.QApplication([])
|
|
_app.for_testing = True
|
|
qt.qApp = _app
|
|
except ImportError:
|
|
qt = None
|
|
|
|
|
|
class ReceiverBase(object):
|
|
|
|
def __init__(self):
|
|
self.args = []
|
|
self.live = True
|
|
|
|
def __call__(self, arg):
|
|
self.args.append(arg)
|
|
|
|
class Receiver1(ReceiverBase):
|
|
pass
|
|
|
|
class Receiver2(ReceiverBase):
|
|
pass
|
|
|
|
|
|
class Plugin1(louie.Plugin):
|
|
|
|
def is_live(self, receiver):
|
|
"""ReceiverBase instances are only live if their `live`
|
|
attribute is True"""
|
|
if isinstance(receiver, ReceiverBase):
|
|
return receiver.live
|
|
return True
|
|
|
|
|
|
class Plugin2(louie.Plugin):
|
|
|
|
def is_live(self, receiver):
|
|
"""Pretend all Receiver2 instances are not live."""
|
|
if isinstance(receiver, Receiver2):
|
|
return False
|
|
return True
|
|
|
|
|
|
def test_only_one_instance():
|
|
louie.reset()
|
|
plugin1a = Plugin1()
|
|
plugin1b = Plugin1()
|
|
louie.install_plugin(plugin1a)
|
|
# XXX: Move these tests into test cases so we can use unittest's
|
|
# 'assertRaises' method.
|
|
try:
|
|
louie.install_plugin(plugin1b)
|
|
except louie.error.PluginTypeError:
|
|
pass
|
|
else:
|
|
raise Exception('PluginTypeError not raised')
|
|
|
|
|
|
def test_is_live():
|
|
louie.reset()
|
|
# Create receivers.
|
|
receiver1a = Receiver1()
|
|
receiver1b = Receiver1()
|
|
receiver2a = Receiver2()
|
|
receiver2b = Receiver2()
|
|
# Connect signals.
|
|
louie.connect(receiver1a, 'sig')
|
|
louie.connect(receiver1b, 'sig')
|
|
louie.connect(receiver2a, 'sig')
|
|
louie.connect(receiver2b, 'sig')
|
|
# Check reception without plugins.
|
|
louie.send('sig', arg='foo')
|
|
assert receiver1a.args == ['foo']
|
|
assert receiver1b.args == ['foo']
|
|
assert receiver2a.args == ['foo']
|
|
assert receiver2b.args == ['foo']
|
|
# Install plugin 1.
|
|
plugin1 = Plugin1()
|
|
louie.install_plugin(plugin1)
|
|
# Make some receivers not live.
|
|
receiver1a.live = False
|
|
receiver2b.live = False
|
|
# Check reception.
|
|
louie.send('sig', arg='bar')
|
|
assert receiver1a.args == ['foo']
|
|
assert receiver1b.args == ['foo', 'bar']
|
|
assert receiver2a.args == ['foo', 'bar']
|
|
assert receiver2b.args == ['foo']
|
|
# Remove plugin 1, install plugin 2.
|
|
plugin2 = Plugin2()
|
|
louie.remove_plugin(plugin1)
|
|
louie.install_plugin(plugin2)
|
|
# Check reception.
|
|
louie.send('sig', arg='baz')
|
|
assert receiver1a.args == ['foo', 'baz']
|
|
assert receiver1b.args == ['foo', 'bar', 'baz']
|
|
assert receiver2a.args == ['foo', 'bar']
|
|
assert receiver2b.args == ['foo']
|
|
# Install plugin 1 alongside plugin 2.
|
|
louie.install_plugin(plugin1)
|
|
# Check reception.
|
|
louie.send('sig', arg='fob')
|
|
assert receiver1a.args == ['foo', 'baz']
|
|
assert receiver1b.args == ['foo', 'bar', 'baz', 'fob']
|
|
assert receiver2a.args == ['foo', 'bar']
|
|
assert receiver2b.args == ['foo']
|
|
|
|
|
|
if qt is not None:
|
|
def test_qt_plugin():
|
|
louie.reset()
|
|
# Create receivers.
|
|
class Receiver(qt.QWidget):
|
|
def __init__(self):
|
|
qt.QObject.__init__(self)
|
|
self.args = []
|
|
def receive(self, arg):
|
|
self.args.append(arg)
|
|
receiver1 = Receiver()
|
|
receiver2 = Receiver()
|
|
# Connect signals.
|
|
louie.connect(receiver1.receive, 'sig')
|
|
louie.connect(receiver2.receive, 'sig')
|
|
# Destroy receiver2 so only a shell is left.
|
|
receiver2.close(True)
|
|
# Check reception without plugins.
|
|
louie.send('sig', arg='foo')
|
|
assert receiver1.args == ['foo']
|
|
assert receiver2.args == ['foo']
|
|
# Install plugin.
|
|
plugin = louie.QtWidgetPlugin()
|
|
louie.install_plugin(plugin)
|
|
# Check reception with plugins.
|
|
louie.send('sig', arg='bar')
|
|
assert receiver1.args == ['foo', 'bar']
|
|
assert receiver2.args == ['foo']
|
|
|