use of com.google.idea.blaze.android.run.runner.BlazeInstrumentationTestApkBuildStep in project intellij by bazelbuild.
the class BlazeInstrumentationTestApkBuildStepIntegrationTest method getInstrumentorToTargetPair_separateInstrumentorAndTestTargets.
@Test
public void getInstrumentorToTargetPair_separateInstrumentorAndTestTargets() {
setupProject();
MessageCollector messageCollector = new MessageCollector();
BlazeContext context = BlazeContext.create();
context.addOutputSink(IssueOutput.class, messageCollector);
BlazeInstrumentationTestApkBuildStep buildStep = new BlazeInstrumentationTestApkBuildStep(getProject(), Label.create("//java/com/foo/app:instrumentation_test"), ImmutableList.of());
InstrumentorToTarget pair = buildStep.getInstrumentorToTargetPair(context, BlazeProjectDataManager.getInstance(getProject()).getBlazeProjectData());
assertThat(pair.instrumentor).isEqualTo(Label.create("//java/com/foo/app:test_app"));
assertThat(pair.target).isEqualTo(Label.create("//java/com/foo/app:app"));
assertThat(pair.isSelfInstrumentingTest()).isFalse();
assertThat(messageCollector.getMessages()).isEmpty();
}
use of com.google.idea.blaze.android.run.runner.BlazeInstrumentationTestApkBuildStep in project intellij by bazelbuild.
the class BlazeInstrumentationTestApkBuildStepIntegrationTest method deployInfoBuiltCorrectly_selfInstrumentingTest.
@Test
public void deployInfoBuiltCorrectly_selfInstrumentingTest() throws GetDeployInfoException, ApkProvisionException {
setupProject();
Label testTarget = Label.create("//java/com/foo/app:self_instrumenting_test");
Label instrumentorTarget = Label.create("//java/com/foo/app:test_app_self_instrumenting");
BlazeContext context = BlazeContext.create();
ImmutableList<String> blazeFlags = ImmutableList.of("some_blaze_flag", "some_other_flag");
// Setup interceptor for fake running of blaze commands and capture details.
ExternalTaskInterceptor externalTaskInterceptor = new ExternalTaskInterceptor();
registerApplicationService(ExternalTaskProvider.class, externalTaskInterceptor);
// Return fake deploy info proto and mocked deploy info data object.
BlazeApkDeployInfoProtoHelper helper = mock(BlazeApkDeployInfoProtoHelper.class);
AndroidDeployInfo fakeInstrumentorProto = AndroidDeployInfo.newBuilder().build();
BlazeAndroidDeployInfo mockDeployInfo = mock(BlazeAndroidDeployInfo.class);
when(helper.readDeployInfoProtoForTarget(eq(instrumentorTarget), any(BuildResultHelper.class), any())).thenReturn(fakeInstrumentorProto);
when(helper.extractDeployInfoAndInvalidateManifests(eq(getProject()), eq(new File(getExecRoot())), eq(fakeInstrumentorProto))).thenReturn(mockDeployInfo);
// Perform
BlazeInstrumentationTestApkBuildStep buildStep = new BlazeInstrumentationTestApkBuildStep(getProject(), testTarget, blazeFlags, helper);
buildStep.build(context, new DeviceSession(null, null, null));
// Verify
assertThat(buildStep.getDeployInfo()).isNotNull();
assertThat(buildStep.getDeployInfo()).isEqualTo(mockDeployInfo);
assertThat(externalTaskInterceptor.context).isEqualTo(context);
assertThat(externalTaskInterceptor.command).contains(instrumentorTarget.toString());
assertThat(externalTaskInterceptor.command).contains("--output_groups=+android_deploy_info");
assertThat(externalTaskInterceptor.command).containsAllIn(blazeFlags);
}
use of com.google.idea.blaze.android.run.runner.BlazeInstrumentationTestApkBuildStep in project intellij by bazelbuild.
the class BlazeInstrumentationTestApkBuildStepIntegrationTest method exceptionDuringDeployInfoExtraction.
@Test
public void exceptionDuringDeployInfoExtraction() throws GetDeployInfoException {
setupProject();
Label testTarget = Label.create("//java/com/foo/app:instrumentation_test");
Label instrumentorTarget = Label.create("//java/com/foo/app:test_app");
Label appTarget = Label.create("//java/com/foo/app:app");
MessageCollector messageCollector = new MessageCollector();
BlazeContext context = BlazeContext.create();
context.addOutputSink(IssueOutput.class, messageCollector);
// Make blaze command invocation always pass.
registerApplicationService(ExternalTaskProvider.class, builder -> scopes -> 0);
// Return fake deploy info proto and mocked deploy info data object.
BlazeApkDeployInfoProtoHelper helper = mock(BlazeApkDeployInfoProtoHelper.class);
AndroidDeployInfo fakeInstrumentorProto = AndroidDeployInfo.newBuilder().build();
AndroidDeployInfo fakeAppProto = AndroidDeployInfo.newBuilder().build();
when(helper.readDeployInfoProtoForTarget(eq(instrumentorTarget), any(BuildResultHelper.class), any())).thenReturn(fakeInstrumentorProto);
when(helper.readDeployInfoProtoForTarget(eq(appTarget), any(BuildResultHelper.class), any())).thenReturn(fakeAppProto);
when(helper.extractInstrumentationTestDeployInfoAndInvalidateManifests(any(), any(), any(), any())).thenThrow(new GetDeployInfoException("Fake Exception"));
// Perform
BlazeInstrumentationTestApkBuildStep buildStep = new BlazeInstrumentationTestApkBuildStep(getProject(), testTarget, ImmutableList.of(), helper);
buildStep.build(context, new DeviceSession(null, null, null));
// Verify
assertThat(context.hasErrors()).isTrue();
assertThat(messageCollector.getMessages()).contains("Could not read apk deploy info from build: Fake Exception");
}
use of com.google.idea.blaze.android.run.runner.BlazeInstrumentationTestApkBuildStep in project intellij by bazelbuild.
the class BlazeInstrumentationTestApkBuildStepIntegrationTest method getInstrumentorToTargetPair_selfInstrumentingTest.
@Test
public void getInstrumentorToTargetPair_selfInstrumentingTest() {
setupProject();
MessageCollector messageCollector = new MessageCollector();
BlazeContext context = BlazeContext.create();
context.addOutputSink(IssueOutput.class, messageCollector);
BlazeInstrumentationTestApkBuildStep buildStep = new BlazeInstrumentationTestApkBuildStep(getProject(), Label.create("//java/com/foo/app:self_instrumenting_test"), ImmutableList.of());
InstrumentorToTarget pair = buildStep.getInstrumentorToTargetPair(context, BlazeProjectDataManager.getInstance(getProject()).getBlazeProjectData());
assertThat(pair.instrumentor).isEqualTo(Label.create("//java/com/foo/app:test_app_self_instrumenting"));
assertThat(pair.target).isNull();
assertThat(pair.isSelfInstrumentingTest()).isTrue();
assertThat(messageCollector.getMessages()).isEmpty();
}
use of com.google.idea.blaze.android.run.runner.BlazeInstrumentationTestApkBuildStep in project intellij by bazelbuild.
the class BlazeInstrumentationTestApkBuildStepIntegrationTest method blazeCommandFailed.
@Test
public void blazeCommandFailed() throws GetDeployInfoException {
setupProject();
Label testTarget = Label.create("//java/com/foo/app:instrumentation_test");
Label instrumentorTarget = Label.create("//java/com/foo/app:test_app");
Label appTarget = Label.create("//java/com/foo/app:app");
MessageCollector messageCollector = new MessageCollector();
BlazeContext context = BlazeContext.create();
context.addOutputSink(IssueOutput.class, messageCollector);
// Return a non-zero value to indicate blaze command run failure.
registerApplicationService(ExternalTaskProvider.class, builder -> scopes -> 1337);
// Return fake deploy info proto and mocked deploy info data object.
BlazeApkDeployInfoProtoHelper helper = mock(BlazeApkDeployInfoProtoHelper.class);
AndroidDeployInfo fakeInstrumentorProto = AndroidDeployInfo.newBuilder().build();
AndroidDeployInfo fakeAppProto = AndroidDeployInfo.newBuilder().build();
BlazeAndroidDeployInfo mockDeployInfo = mock(BlazeAndroidDeployInfo.class);
when(helper.readDeployInfoProtoForTarget(eq(instrumentorTarget), any(BuildResultHelper.class), any())).thenReturn(fakeInstrumentorProto);
when(helper.readDeployInfoProtoForTarget(eq(appTarget), any(BuildResultHelper.class), any())).thenReturn(fakeAppProto);
when(helper.extractInstrumentationTestDeployInfoAndInvalidateManifests(eq(getProject()), eq(new File(getExecRoot())), eq(fakeInstrumentorProto), eq(fakeAppProto))).thenReturn(mockDeployInfo);
// Perform
BlazeInstrumentationTestApkBuildStep buildStep = new BlazeInstrumentationTestApkBuildStep(getProject(), testTarget, ImmutableList.of(), helper);
buildStep.build(context, new DeviceSession(null, null, null));
// Verify
assertThat(context.hasErrors()).isTrue();
assertThat(messageCollector.getMessages()).contains("Blaze build failed. See Blaze Console for details.");
}
Aggregations