add StringIO.writeline, improve StringIO.multicomm
- StringIO.writeline sends a command and does not expect a reply - StringIO.multicomm and BytesIO.multicomm is improved in order to insert individual delays in between lines and individual noreply flags + fix a bug in tutorial_t_control + improve readability of frappy.lib.classdoc.indent_description Change-Id: I9dea113e19147684ec41aca5267a79816bbf202c Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32267 Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
98
test/test_io.py
Normal file
98
test/test_io.py
Normal file
@ -0,0 +1,98 @@
|
||||
# *****************************************************************************
|
||||
#
|
||||
# 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 the Free Software
|
||||
# Foundation; either version 2 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
# details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along with
|
||||
# this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Module authors:
|
||||
# Markus Zolliker <markus.zolliker@psi.ch>
|
||||
#
|
||||
# *****************************************************************************
|
||||
|
||||
|
||||
import time
|
||||
import pytest
|
||||
from frappy.io import StringIO
|
||||
|
||||
|
||||
class Time:
|
||||
def __init__(self, items):
|
||||
self.items = items
|
||||
|
||||
def sleep(self, seconds):
|
||||
self.items.append(seconds)
|
||||
|
||||
|
||||
class IO(StringIO):
|
||||
def __init__(self):
|
||||
self.items = []
|
||||
self.propertyValues = {}
|
||||
self.earlyInit()
|
||||
|
||||
def communicate(self, command, noreply=False):
|
||||
self.items.append(command)
|
||||
return command.upper()
|
||||
|
||||
|
||||
class AppendedIO(IO):
|
||||
def communicate(self, command, noreply=False):
|
||||
self.items.append(command)
|
||||
if noreply:
|
||||
assert not '?' in command
|
||||
return None
|
||||
assert '?' in command
|
||||
return '1'
|
||||
|
||||
def writeline(self, command):
|
||||
assert self.communicate(command + ';*OPC?') == '1'
|
||||
|
||||
|
||||
class CompositeIO(AppendedIO):
|
||||
def writeline(self, command):
|
||||
# the following is not possible, as multicomm is recursively calling writeline:
|
||||
# self.multicomm([(command, False, 0), ('*OPC?', True, 0)])
|
||||
# anyway, above code is less nice
|
||||
with self._lock:
|
||||
self.communicate(command, noreply=True)
|
||||
self.communicate('*OPC?')
|
||||
|
||||
|
||||
def test_writeline_pure():
|
||||
io = IO()
|
||||
assert io.writeline('noreply') is None
|
||||
assert io.items == ['noreply']
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'ioclass, cmds', [
|
||||
(AppendedIO, ['SETP 1,1;*OPC?']),
|
||||
(CompositeIO, ['SETP 1,1', '*OPC?']),
|
||||
])
|
||||
def test_writeline_extended(ioclass, cmds):
|
||||
io = ioclass()
|
||||
io.writeline('SETP 1,1')
|
||||
assert io.items == cmds
|
||||
|
||||
|
||||
def test_multicomm_simple():
|
||||
io = IO()
|
||||
assert io.multicomm(['first', 'second']) == ['FIRST', 'SECOND']
|
||||
assert io.items == ['first', 'second']
|
||||
|
||||
|
||||
def test_multicomm_with_delay(monkeypatch):
|
||||
io = IO()
|
||||
tm = Time(io.items)
|
||||
monkeypatch.setattr(time, 'sleep', tm.sleep)
|
||||
assert io.multicomm([('noreply', False, 1), ('reply', True, 2)]) == ['REPLY']
|
||||
assert io.items == ['noreply', 1, 'reply', 2]
|
Reference in New Issue
Block a user