Skip to content

Commit

Permalink
Add integration tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rogerhu committed Jul 25, 2023
1 parent b4f3219 commit 1d7d527
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public List<TargetInfo> doExpandDirectoryTargets(
return runQuery(project, getQueryString(directories, shouldManualTargetSync), context);
}

private static String getQueryString(ImportRoots directories, boolean allowManualTargetsSync) {
protected static String getQueryString(ImportRoots directories, boolean allowManualTargetsSync) {
StringBuilder targets = new StringBuilder();
targets.append(
directories.rootDirectories().stream()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.google.idea.blaze.java.sync;

import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.base.dependencies.BlazeQueryDirectoryToTargetProvider;
import com.google.idea.blaze.base.dependencies.TargetInfo;
import com.google.idea.blaze.base.model.primitives.Label;
import com.google.idea.blaze.base.scope.BlazeContext;
import com.google.idea.blaze.base.sync.projectview.ImportRoots;
import com.google.idea.blaze.base.sync.workspace.WorkspacePathResolver;
import com.intellij.openapi.project.Project;

import javax.annotation.Nullable;
import java.util.List;

/**
* Need to mock out this target provider since it attempts to execute Bazel outside of the sandbox
* environment. Used primarily within JavaSyncTest to validate the behavior of the
* allow_manual_targets_sync: option.
*/
class FakeBlazeQueryProvider extends BlazeQueryDirectoryToTargetProvider {

private static final String MANUAL_EXCLUDE_TAG = "((?!manual)";

// Need to override in order to be able to execute getQueryString().
@Nullable
@Override
public List<TargetInfo> doExpandDirectoryTargets(
Project project,
Boolean shouldManualTargetSync,
ImportRoots directories,
WorkspacePathResolver pathResolver,
BlazeContext context) {
return runQuery(project, getQueryString(directories, shouldManualTargetSync), context);
}

@Nullable
private static ImmutableList<TargetInfo> runQuery(Project project, String query, BlazeContext context) {
if (!query.contains(MANUAL_EXCLUDE_TAG)) {
TargetInfo targetInfo = TargetInfo.builder(Label.create("//java/com/google:lib"), "java_library").build();
return ImmutableList.of(targetInfo);
} else {
return ImmutableList.of();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;

import com.google.common.collect.ImmutableList;
import com.google.idea.blaze.base.dependencies.BlazeQueryDirectoryToTargetProvider;
import com.google.idea.blaze.base.dependencies.DirectoryToTargetProvider;
import com.google.idea.blaze.base.ideinfo.JavaIdeInfo;
import com.google.idea.blaze.base.ideinfo.TargetIdeInfo;
import com.google.idea.blaze.base.ideinfo.TargetMap;
Expand Down Expand Up @@ -155,6 +157,83 @@ public void testSimpleSync() throws Exception {
.isEqualTo(WorkspaceType.JAVA);
}

public void runWorkspaceSync() {
workspace.createFile(
new WorkspacePath("java/com/google/Source.java"),
"package com.google;",
"public class Source {}");

workspace.createFile(
new WorkspacePath("java/com/google/Other.java"),
"package com.google;",
"public class Other {}");

TargetMap targetMap =
TargetMapBuilder.builder()
.addTarget(
TargetIdeInfo.builder()
.setBuildFile(sourceRoot("java/com/google/BUILD"))
.setLabel("//java/com/google:lib")
.setKind("java_library")
.addTag("manual")
.addSource(sourceRoot("java/com/google/Source.java"))
.addSource(sourceRoot("java/com/google/Other.java")))
.build();

setTargetMap(targetMap);

runBlazeSync(
BlazeSyncParams.builder()
.setTitle("Sync")
.setSyncMode(SyncMode.INCREMENTAL)
.setSyncOrigin("test")
.setAddProjectViewTargets(true)
.build());
}

void mockBazelQueryDirectorProvider() {
DirectoryToTargetProvider.EP_NAME.getPoint().unregisterExtension(BlazeQueryDirectoryToTargetProvider.class);
registerExtensionFirst(DirectoryToTargetProvider.EP_NAME, new FakeBlazeQueryProvider());
}

@Test
public void testManualTargetSyncTrue() throws Exception {
mockBazelQueryDirectorProvider();

setProjectView(
"directories:",
" java/com/google",
"derive_targets_from_directories: true",
"allow_manual_targets_sync: true");
runWorkspaceSync();

errorCollector.assertNoIssues();
List<SyncStats> syncStatsList = getSyncStats();
SyncStats syncStats = syncStatsList.get(0);

assertThat(syncStats.buildPhaseStats().get(0).targets()).hasSize(1);
}

@Test
public void testManualTargetSyncFalse() throws Exception {
mockBazelQueryDirectorProvider();

setProjectView(
"directories:",
" java/com/google",
"derive_targets_from_directories: true",
"allow_manual_targets_sync: false");

runWorkspaceSync();

errorCollector.assertNoIssues();
List<SyncStats> syncStatsList = getSyncStats();
SyncStats syncStats = syncStatsList.get(0);

assertThat(syncStats.buildPhaseStats().get(0).targets()).hasSize(0);
}


@Test
public void testSimpleSyncLogging() throws Exception {
setProjectView("directories:", " java/com/google", "targets:", " //java/com/google:lib");
Expand Down

0 comments on commit 1d7d527

Please sign in to comment.