package com.openxc.messages; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import com.openxc.messages.DiagnosticResponse; import android.os.Parcel; @RunWith(RobolectricTestRunner.class) public class DiagnosticResponseTest { DiagnosticResponse response; DiagnosticResponse simpleResponse; int id = 42; int bus = 1; int mode = 2; int pid = 4; byte[] payload = new byte[] { 1, 2, 3, 4, 5, 6, 7 }; @Before public void setup() { response = new DiagnosticResponse(bus, id, mode, pid, payload); simpleResponse = new DiagnosticResponse(bus, id, mode); } @Test public void simpleComplexResponseNotEqual() { assertThat(response, not(equalTo(simpleResponse))); } @Test public void requiredFieldsEqual() { assertEquals(response.getBusId(), simpleResponse.getBusId()); assertEquals(response.getId(), simpleResponse.getId()); assertEquals(response.getMode(), simpleResponse.getMode()); } @Test public void nonEssentialFieldsNotEqual() { assertThat(response.getPid(), not(equalTo(simpleResponse.getPid()))); assertThat(response.getPayload(), not(equalTo(simpleResponse.getPayload()))); } @Test public void getIdReturnsId() { assertEquals(id, response.getId()); } @Test public void getBusReturnsBus() { assertEquals(bus, response.getBusId()); } @Test public void getModeReturnsMode() { assertEquals(mode, response.getMode()); } @Test public void getPayloadReturnsPayload() { assertArrayEquals(payload, response.getPayload()); } @Test public void nullNegativeResponseMeansSuccess() { double value = 42.0; response = new DiagnosticResponse(bus, id, mode, pid, payload, null, value); assertTrue(response.isSuccessful()); assertEquals(response.getNegativeResponseCode(), DiagnosticResponse.NegativeResponseCode.NONE); } @Test public void withNrcNotSuccessful() { response = new DiagnosticResponse(bus, id, mode, pid, payload, DiagnosticResponse.NegativeResponseCode.WRONG_BLOCK_SEQUENCE_COUNTER, 42); assertFalse(response.isSuccessful()); } @Test public void getValueReturnsValue() { double value = 42.0; response = new DiagnosticResponse(bus, id, mode, pid, payload, DiagnosticResponse.NegativeResponseCode.NONE, value); assertTrue(response.hasValue()); assertThat(response.getValue(), equalTo(value)); } @Test public void getValueNoValueReturnsNull() { assertFalse(response.hasValue()); assertThat(response.getValue(), nullValue()); } @Test public void clearPayload() { response.setPayload(null); assertThat(response.getPayload(), nullValue()); } @Test public void sameEquals() { assertEquals(response, response); } @Test public void differentIdNotEqual() { DiagnosticResponse anotherResponse = new DiagnosticResponse( bus, id + 1, mode, pid, payload); anotherResponse.setPayload(payload); assertThat(response, not(equalTo(anotherResponse))); } @Test public void differentBusNotEqual() { DiagnosticResponse anotherResponse = new DiagnosticResponse( bus + 1, id, mode, pid, payload); anotherResponse.setPayload(payload); assertThat(response, not(equalTo(anotherResponse))); } @Test public void differentModeNotEqual() { DiagnosticResponse anotherResponse = new DiagnosticResponse( bus, id, mode + 1, pid, payload); anotherResponse.setPayload(payload); assertThat(response, not(equalTo(anotherResponse))); } @Test public void differentPayloadNotEqual() { payload[1] = (byte) (payload[1] + 1); DiagnosticResponse anotherResponse = new DiagnosticResponse( bus, id, mode, pid, payload); anotherResponse.setPayload(payload); assertThat(response, not(equalTo(anotherResponse))); } @Test public void sameValueEqual() { double value = 42.0; response = new DiagnosticResponse(bus, id, mode, pid, payload, null, value); DiagnosticResponse anotherResponse = new DiagnosticResponse( bus, id, mode, pid, payload, null, value); assertThat(response, equalTo(anotherResponse)); } @Test public void differentValueNotEqual() { double value = 42.0; response = new DiagnosticResponse(bus, id, mode, pid, payload, null, value); DiagnosticResponse anotherResponse = new DiagnosticResponse( bus, id, mode, pid, payload, null, value + 1); assertThat(response, not(equalTo(anotherResponse))); } @Test public void differentNrcNotEqual() { double value = 42.0; response = new DiagnosticResponse(bus, id, mode, pid, payload, null, value); DiagnosticResponse anotherResponse = new DiagnosticResponse(bus, id, mode, pid, payload, DiagnosticResponse.NegativeResponseCode.WRONG_BLOCK_SEQUENCE_COUNTER, value); assertThat(response, not(equalTo(anotherResponse))); } @Test public void toStringNotNull() { assertThat(response.toString(), notNullValue()); } @Test public void parcelWithNoPayload() { response.setPayload(null); Parcel parcel = Parcel.obtain(); response.writeToParcel(parcel, 0); // Reset parcel for reading parcel.setDataPosition(0); VehicleMessage createdFromParcel = VehicleMessage.CREATOR.createFromParcel(parcel); assertThat(createdFromParcel, instanceOf(DiagnosticResponse.class)); assertEquals(response, createdFromParcel); assertThat(response.getPayload(), nullValue()); } @Test public void writeAndReadFromParcel() { Parcel parcel = Parcel.obtain(); response.writeToParcel(parcel, 0); // Reset parcel for reading parcel.setDataPosition(0); VehicleMessage createdFromParcel = VehicleMessage.CREATOR.createFromParcel(parcel); assertThat(createdFromParcel, instanceOf(DiagnosticResponse.class)); assertEquals(response, createdFromParcel); } @Test public void keyNotNull() { assertThat(response.getKey(), notNullValue()); } }