diff --git a/bbq/java/com/google/bbq/QueryResponseSender.java b/bbq/java/com/google/bbq/QueryResponseSender.java index cc46888..25f6688 100644 --- a/bbq/java/com/google/bbq/QueryResponseSender.java +++ b/bbq/java/com/google/bbq/QueryResponseSender.java @@ -16,6 +16,7 @@ import static org.hamcrest.CoreMatchers.notNullValue; import static org.valid4j.Assertive.require; +import static org.valid4j.Validation.validate; import android.content.Context; import android.content.Intent; @@ -49,7 +50,7 @@ public QueryResponseSender(@NonNull Context context) { public void sendResponse( @NonNull BroadcastQuery query, @Nullable byte[] responseMessage) { - require(query, notNullValue()); + validate(query, notNullValue(), NullPointerException.class); BroadcastQueryResponse.Builder responseBuilder = createResponseBuilder(query); if (responseMessage != null) { diff --git a/bbq/javatests/java/com/google/bbq/QueryResponseSenderTest.java b/bbq/javatests/java/com/google/bbq/QueryResponseSenderTest.java index a98f503..aa58851 100644 --- a/bbq/javatests/java/com/google/bbq/QueryResponseSenderTest.java +++ b/bbq/javatests/java/com/google/bbq/QueryResponseSenderTest.java @@ -16,64 +16,88 @@ package com.google.bbq; -import static org.mockito.Mockito.verify; -import static org.mockito.internal.verification.VerificationModeFactory.times; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; -import android.content.Context; import android.content.Intent; -import android.support.annotation.NonNull; import com.google.bbq.Protobufs.BroadcastQuery; import com.google.bbq.Protobufs.BroadcastQueryResponse; +import com.google.protobuf.ByteString; +import com.google.protobuf.InvalidProtocolBufferException; + import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.valid4j.errors.RequireViolation; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; +import org.robolectric.annotation.Config; + +import java.util.List; /** * This class contains a set of tests for QueryResponseSenderTest. */ +@RunWith(RobolectricTestRunner.class) +@Config(manifest = Config.NONE) public class QueryResponseSenderTest { - @Mock - Context mockContext; - @Mock - Intent mockIntent; - BroadcastQuery mockQuery; - - private QueryResponseSender underTest; + private BroadcastQuery mQuery; + private QueryResponseSender mResponseSender; @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - //set mock values. - mockQuery = BroadcastQuery.newBuilder() - .setDataType("dataType") - .setRequestingApp("requestingApp") + mQuery = BroadcastQuery.newBuilder() + .setDataType("example") + .setRequestingApp("com.example.app") .setRequestId(128L) .setResponseId(256L) .build(); - //Create a test object for the QueryResponseSender using the mock - underTest = new QueryResponseSender(mockContext) { - @NonNull - @Override - Intent getIntentForQuery(@NonNull BroadcastQuery query, BroadcastQueryResponse.Builder responseBuilder) { - return mockIntent; - } - }; + mResponseSender = new QueryResponseSender(RuntimeEnvironment.application); + } + + @Test + public void sendResponse() throws Exception { + byte[] responseMessageBytes = new byte[] { 0, 1, 2 }; + mResponseSender.sendResponse(mQuery, responseMessageBytes); + checkBroadcastResponse(ByteString.copyFrom(responseMessageBytes)); } @Test public void sendResponse_nonNullQuery_nullReponse() throws Exception { - underTest.sendResponse(mockQuery, null); - verify(mockContext, times(1)).sendBroadcast(mockIntent); + mResponseSender.sendResponse(mQuery, null); + checkBroadcastResponse(ByteString.EMPTY); } - @Test(expected = RequireViolation.class) + private void checkBroadcastResponse(ByteString expectedResponseBytes) + throws InvalidProtocolBufferException { + List broadcasts = + Shadows.shadowOf(RuntimeEnvironment.application).getBroadcastIntents(); + + assertThat(broadcasts.size()).isEqualTo(1); + Intent broadcastIntent = broadcasts.get(0); + + assertThat(broadcastIntent.getAction()) + .isEqualTo("example:0000000000000080"); + assertThat(broadcastIntent.getCategories()).containsExactly(QueryUtil.BBQ_CATEGORY); + assertThat(broadcastIntent.getPackage()).isEqualTo(mQuery.getRequestingApp()); + assertThat(broadcastIntent.getByteArrayExtra(QueryUtil.EXTRA_RESPONSE_MESSAGE)).isNotNull(); + + byte[] responseBytes = broadcastIntent.getByteArrayExtra(QueryUtil.EXTRA_RESPONSE_MESSAGE); + BroadcastQueryResponse response = BroadcastQueryResponse.parseFrom(responseBytes); + + assertThat(response.getRequestId()).isEqualTo(mQuery.getRequestId()); + assertThat(response.getResponseId()).isEqualTo(mQuery.getResponseId()); + assertThat(response.getResponseMessage()).isEqualTo(expectedResponseBytes); + } + + @SuppressWarnings("ConstantConditions") + @Test public void sendResponse_nullQuery_nullReponse() throws Exception { - underTest.sendResponse(null, null); + assertThatThrownBy(() -> mResponseSender.sendResponse(null, null)) + .isInstanceOf(NullPointerException.class); } -} \ No newline at end of file +}