package com.openxc.messages.formatters; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import com.openxc.messages.CanMessage; import com.openxc.messages.Command; import com.openxc.messages.CommandResponse; import com.openxc.messages.DiagnosticRequest; import com.openxc.messages.DiagnosticResponse; import com.openxc.messages.EventedSimpleVehicleMessage; import com.openxc.messages.NamedVehicleMessage; import com.openxc.messages.SerializationException; import com.openxc.messages.SimpleVehicleMessage; import com.openxc.messages.VehicleMessage; @RunWith(RobolectricTestRunner.class) public abstract class AbstractFormatterTestBase { protected abstract void serializeDeserializeAndCheckEqual( VehicleMessage message); @Test public void serializeFailedDiagnosticResponse() { int id = 42; int bus = 1; int mode = 2; int pid = 4; byte[] payload = new byte[] { 1, 2, 3, 4, 5, 6, 7 }; double value = 42.0; serializeDeserializeAndCheckEqual(new DiagnosticResponse(bus, id, mode, pid, payload, null, value)); } @Test public void serializeDiagnosticResponse() { serializeDeserializeAndCheckEqual(new DiagnosticResponse( 1, 2, 3, 4, new byte[]{1,2,3,4})); } @Test public void serializeDiagnosticResponseWithValue() { serializeDeserializeAndCheckEqual(new DiagnosticResponse( 1, 2, 3, 4, new byte[]{1,2,3,4}, null, 42.0)); } @Test public void serializeCommandResponse() { serializeDeserializeAndCheckEqual(new CommandResponse( Command.CommandType.DEVICE_ID, true)); } @Test public void serializeCommandResponseWithMessage() { serializeDeserializeAndCheckEqual(new CommandResponse( Command.CommandType.DEVICE_ID, true, "bar")); serializeDeserializeAndCheckEqual(new CommandResponse( Command.CommandType.VERSION, true, "bar")); } @Test public void serializeCommand() { serializeDeserializeAndCheckEqual(new Command( Command.CommandType.VERSION)); } @Test public void serializeCommandWithDiagnosticRequest() { DiagnosticRequest request = new DiagnosticRequest(1, 2, 3, 4); serializeDeserializeAndCheckEqual(new Command(request, "add")); } @Test public void serializeCommandWithDiagnosticRequestNoPid() { DiagnosticRequest request = new DiagnosticRequest(1, 2, 3); serializeDeserializeAndCheckEqual(new Command(request, "add")); } @Test public void serializeCanMessage() { serializeDeserializeAndCheckEqual(new CanMessage(1, 2, new byte[]{1,2,3,4})); } @Test public void serializeSimpleMessage() { serializeDeserializeAndCheckEqual(new SimpleVehicleMessage("foo", "bar")); serializeDeserializeAndCheckEqual(new SimpleVehicleMessage("foo", false)); serializeDeserializeAndCheckEqual(new SimpleVehicleMessage("foo", 42.0)); } @Test public void serializeEventedSimpleMessage() { serializeDeserializeAndCheckEqual(new EventedSimpleVehicleMessage( "foo", "bar", "baz")); serializeDeserializeAndCheckEqual(new EventedSimpleVehicleMessage( "foo", "bar", false)); serializeDeserializeAndCheckEqual(new EventedSimpleVehicleMessage( "foo", "bar", 42.0)); } @Test public void serializeNamedMessage() { serializeDeserializeAndCheckEqual(new NamedVehicleMessage("foo")); } @Test public void serializeDiagnosticRequestWithOptional() { DiagnosticRequest request = new DiagnosticRequest(1, 2, 3, 4); request.setPayload(new byte[]{1,2,3,4}); request.setMultipleResponses(false); request.setFrequency(2.0); request.setName("foo"); serializeDeserializeAndCheckEqual(new Command(request, "add")); } @Test(expected=SerializationException.class) public void serializeEmptyVehicleMessage() throws SerializationException { BinaryFormatter.serialize(new VehicleMessage()); } }