def test_instrument_default_ack_expected():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    assert inst._ack_expected() is None
    assert inst._ack_expected("foobar") is None
def test_instrument_write():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    inst.write("foobar")
    inst._file.write.assert_called_with("foobar")
def test_instrument_query():
    """
    Expected order of operations:

    - IK sends command to instrument
    - Instrument sends ACK, commonly an echo of the command
    - ACK is verified with _ack_expected function
    - If ACK is good, do another read which contains our return data
    - Another read is done to capture the prompt characters sent by the
        instrument. Read should be equal to the length of the expected prompt
    - Exception is raised is prompt is not correct
    """
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst._file.query.return_value = "foobar?"
    inst.read = mock.MagicMock(side_effect=["foobar?", "datas", "> "])

    def new_ack(msg):
        return msg

    inst._ack_expected = new_ack
    inst.prompt = "> "

    assert inst.query("foobar?") == "datas"
    inst.read.assert_any_call(-1)
    inst.read.assert_any_call(2)
    inst._file.query.assert_called_with("foobar?", size=0)
    assert inst.read.call_count == 3
def test_instrument_sendcmd_noack_noprompt():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    inst.sendcmd("foobar")

    inst._file.sendcmd.assert_called_with("foobar")
def test_instrument_query_noack_noprompt():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst._file.query.return_value = "datas"

    assert inst.query("foobar?") == "datas"

    inst._file.query.assert_called_with("foobar?", -1)
def test_instrument_init():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    assert inst._testing is False
    assert inst._prompt is None
    assert inst._terminator == "\n"
    assert inst._file == mock_filelike
Example #7
0
def test_instrument_sendcmd_noack_bad_prompt():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    inst.prompt = "> "
    inst.read = mock.MagicMock(return_value="* ")

    inst.sendcmd("foobar")
Example #8
0
def test_instrument_query_noack_bad_prompt():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst._file.query.return_value = "datas"

    inst.prompt = "> "
    inst.read = mock.MagicMock(return_value="* ")

    _ = inst.query("foobar?")
def test_instrument_sendcmd_noack():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    inst.prompt = "> "
    inst.read = mock.MagicMock(return_value="> ")

    inst.sendcmd("foobar")
    inst.read.assert_called_with(2)
    inst._file.sendcmd.assert_called_with("foobar")
Example #10
0
def test_instrument_query_bad_ack():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst.read = mock.MagicMock(return_value="derp")

    def new_ack(msg):
        return msg

    inst._ack_expected = new_ack

    _ = inst.query("foobar?")
def test_instrument_prompt():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    assert inst.prompt is None

    inst.prompt = "> "
    assert inst.prompt == "> "

    inst.prompt = None
    assert inst.prompt is None
def test_instrument_terminator():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    terminator = mock.PropertyMock(return_value="\n")
    type(inst._file).terminator = terminator

    assert inst.terminator == "\n"
    terminator.assert_called_with()

    inst.terminator = "*"
    terminator.assert_called_with("*")
def test_instrument_timeout():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    timeout = mock.PropertyMock(return_value=1)
    type(inst._file).timeout = timeout

    assert inst.timeout == 1
    timeout.assert_called_with()

    inst.timeout = 5
    timeout.assert_called_with(5)
def test_instrument_address():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    address = mock.PropertyMock(return_value="/dev/foobar")
    type(inst._file).address = address

    assert inst.address == "/dev/foobar"
    address.assert_called_with()

    inst.address = "COM1"
    address.assert_called_with("COM1")
def test_instrument_sendcmd_bad_ack():
    with pytest.raises(AcknowledgementError):
        mock_filelike = mock.MagicMock()
        mock_filelike.__class__ = AbstractCommunicator
        inst = ik.Instrument(mock_filelike)

        def new_ack(msg):
            return msg

        inst._ack_expected = new_ack
        inst.read = mock.MagicMock(return_value="derp")

        inst.sendcmd("foobar")
def test_instrument_read():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst._file.read.return_value = "foobar"

    assert inst.read() == "foobar"
    inst._file.read.assert_called_with(-1, 'utf-8')

    inst._file = mock.MagicMock()
    inst._file.read.return_value = "foobar"

    assert inst.read(6) == "foobar"
    inst._file.read.assert_called_with(6, 'utf-8')
def test_instrument_sendcmd_noprompt():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    def new_ack(msg):
        return msg

    inst._ack_expected = new_ack
    inst.read = mock.MagicMock(return_value="foobar")

    inst.sendcmd("foobar")
    inst.read.assert_called_with()
    inst._file.sendcmd.assert_called_with("foobar")
def test_instrument_sendcmd_noprompt_multiple_ack():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    def new_ack(msg):
        return [msg, "second ack"]

    inst._ack_expected = new_ack
    inst.read = mock.MagicMock(side_effect=["foobar", "second ack"])

    inst.sendcmd("foobar")
    inst.read.assert_called_with()
    inst._file.sendcmd.assert_called_with("foobar")
def test_instrument_sendcmd():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)

    def new_ack(msg):
        return msg

    inst._ack_expected = new_ack
    inst.prompt = "> "
    inst.read = mock.MagicMock(side_effect=["foobar", "> "])

    inst.sendcmd("foobar")
    inst.read.assert_any_call()
    inst.read.assert_any_call(2)
    inst._file.sendcmd.assert_called_with("foobar")
    assert inst.read.call_count == 2
def test_instrument_query_noack():
    """
    Expected order of operations:

    - IK sends command to instrument and gets responce containing our data
    - Another read is done to capture the prompt characters sent by the
        instrument. Read should be equal to the length of the expected prompt
    - Exception is raised is prompt is not correct
    """
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst._file.query.return_value = "datas"

    inst.prompt = "> "
    inst.read = mock.MagicMock(return_value="> ")

    assert inst.query("foobar?") == "datas"
    inst._file.query.assert_called_with("foobar?", -1)
    inst.read.assert_called_with(2)
def test_instrument_query_noprompt():
    """
    Expected order of operations:

    - IK sends command to instrument
    - Instrument sends ACK, commonly an echo of the command
    - ACK is verified with _ack_expected function
    - If ACK is good, do another read which contains our return data
    """
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = AbstractCommunicator
    inst = ik.Instrument(mock_filelike)
    inst.read = mock.MagicMock(side_effect=["foobar?", "datas"])

    def new_ack(msg):
        return msg

    inst._ack_expected = new_ack

    assert inst.query("foobar?") == "datas"
    inst._file.query.assert_called_with("foobar?", size=0)
    inst.read.assert_called_with(-1)
Example #22
0
def test_instrument_init_bad_filelike():
    _ = ik.Instrument(mock.MagicMock())
def test_instrument_init_bad_filelike():
    with pytest.raises(TypeError):
        _ = ik.Instrument(mock.MagicMock())
def test_instrument_init_loopbackcomm():
    mock_filelike = mock.MagicMock()
    mock_filelike.__class__ = LoopbackCommunicator
    inst = ik.Instrument(mock_filelike)

    assert inst._testing is True