def test_float_properties(): sender = FloatPropertiesChannel() receiver = FloatPropertiesChannel() sender.set_property("prop1", 1.0) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) val = receiver.get_property("prop1") assert val == 1.0 val = receiver.get_property("prop2") assert val is None sender.set_property("prop2", 2.0) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) val = receiver.get_property("prop1") assert val == 1.0 val = receiver.get_property("prop2") assert val == 2.0 assert len(receiver.list_properties()) == 2 assert "prop1" in receiver.list_properties() assert "prop2" in receiver.list_properties() val = sender.get_property("prop1") assert val == 1.0 assert receiver.get_property_dict_copy() == {"prop1": 1.0, "prop2": 2.0} assert receiver.get_property_dict_copy() == sender.get_property_dict_copy()
def test_int_channel(): sender = IntChannel() receiver = IntChannel() sender.send_int(5) sender.send_int(6) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) assert receiver.list_int[0] == 5 assert receiver.list_int[1] == 6
def test_raw_bytes(): sender = RawBytesChannel() receiver = RawBytesChannel() sender.send_raw_data("foo".encode("ascii")) sender.send_raw_data("bar".encode("ascii")) data = UnityEnvironment._generate_side_channel_data( {sender.channel_type: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_type: receiver}, data) messages = receiver.get_and_clear_received_messages() assert len(messages) == 2 assert messages[0].decode("ascii") == "foo" assert messages[1].decode("ascii") == "bar" messages = receiver.get_and_clear_received_messages() assert len(messages) == 0
def test_environment_parameters(): sender = EnvironmentParametersChannel() # We use a raw bytes channel to interpred the data receiver = RawBytesChannel(sender.channel_id) sender.set_float_parameter("param-1", 0.1) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) message = IncomingMessage(receiver.get_and_clear_received_messages()[0]) key = message.read_string() dtype = message.read_int32() value = message.read_float32() assert key == "param-1" assert dtype == EnvironmentParametersChannel.EnvironmentDataTypes.FLOAT assert value - 0.1 < 1e-8 sender.set_float_parameter("param-1", 0.1) sender.set_float_parameter("param-2", 0.1) sender.set_float_parameter("param-3", 0.1) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) assert len(receiver.get_and_clear_received_messages()) == 3 with pytest.raises(UnityCommunicationException): # try to send data to the EngineConfigurationChannel sender.set_float_parameter("param-1", 0.1) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: sender}, data)
def test_engine_configuration(): sender = EngineConfigurationChannel() # We use a raw bytes channel to interpred the data receiver = RawBytesChannel(sender.channel_id) config = EngineConfig.default_config() sender.set_configuration(config) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) received_data = receiver.get_and_clear_received_messages() assert len(received_data) == 5 # 5 different messages one for each setting sent_time_scale = 4.5 sender.set_configuration_parameters(time_scale=sent_time_scale) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: receiver}, data) message = IncomingMessage(receiver.get_and_clear_received_messages()[0]) message.read_int32() time_scale = message.read_float32() assert time_scale == sent_time_scale with pytest.raises(UnitySideChannelException): sender.set_configuration_parameters(width=None, height=42) with pytest.raises(UnityCommunicationException): # try to send data to the EngineConfigurationChannel sender.set_configuration_parameters(time_scale=sent_time_scale) data = UnityEnvironment._generate_side_channel_data( {sender.channel_id: sender}) UnityEnvironment._parse_side_channel_message( {receiver.channel_id: sender}, data)