def test_can_attach_external_outgoing_io_to_moler_connection(): from moler.connection import Connection sent_data = [] def write_to_external_io(data): sent_data.append(data) moler_conn = Connection(how2send=write_to_external_io) moler_conn.send(data="outgoing data") assert "outgoing data" in sent_data
def test_not_attaching_external_outgoing_io_raises_exception_at_send_trial(): from moler.connection import Connection from moler.exceptions import WrongUsage moler_conn = Connection() with pytest.raises(WrongUsage) as err: moler_conn.send(data="outgoing data") assert "Can't send('outgoing data')" in str(err.value) assert "You haven't installed sending method of external-IO system" in str(err.value) assert "Do it either during connection construction: Connection(how2send=external_io_send)" in str(err.value) assert "or later via attribute direct set: connection.how2send = external_io_send" in str(err.value)
def test_can_attach_instance_method_as_external_outgoing_io(): from moler.connection import Connection class ExternalIO(object): def __init__(self): self.sent_data = [] def sendall(self, data): # external-IO native naming for outgoing data, f.ex. see socket self.sent_data.append(data) used_io = ExternalIO() unused_io = ExternalIO() moler_conn = Connection(how2send=used_io.sendall) moler_conn.send(data="outgoing data") assert "outgoing data" in used_io.sent_data assert "outgoing data" not in unused_io.sent_data
def test_can_encode_data_for_external_io_needs__encoder_via_composition(): from moler.connection import Connection class ExternalIO(object): def __init__(self): self.sent_data = [] def write(self, bytes): self.sent_data.append(bytes) used_io = ExternalIO() # compose Moler connection with external encoder hexlified_connection = Connection(how2send=used_io.write, encoder=lambda data: binascii.hexlify(bytearray(source=data, encoding="utf-8"))) hexlified_connection.send(data="hi") # 'h' is ASCII 0x68 'i' is ASCII 0x69 assert b'6869' in used_io.sent_data