aswb/querysync/javatests/com/google/idea/blaze/qsync/java/AddCompiledJavaDepsTest.kt (136 lines of code) (raw):
/*
* Copyright 2024 The Bazel Authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.idea.blaze.qsync.java
import com.google.common.collect.ImmutableList
import com.google.common.collect.ImmutableSet
import com.google.common.truth.Truth
import com.google.idea.blaze.common.Label.Companion.of
import com.google.idea.blaze.common.NoopContext
import com.google.idea.blaze.qsync.artifacts.BuildArtifact
import com.google.idea.blaze.qsync.deps.ArtifactTracker
import com.google.idea.blaze.qsync.deps.JavaArtifactInfo
import com.google.idea.blaze.qsync.deps.ProjectProtoUpdate
import com.google.idea.blaze.qsync.project.BuildGraphData
import com.google.idea.blaze.qsync.project.ProjectProto
import com.google.idea.blaze.qsync.project.ProjectProto.ProjectArtifact.ArtifactTransform
import com.google.idea.blaze.qsync.testdata.ProjectProtos
import com.google.idea.blaze.qsync.testdata.TestData
import java.nio.file.Path
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class AddCompiledJavaDepsTest {
@Test
@Throws(Exception::class)
fun no_deps_built() {
val javaDeps = AddCompiledJavaDeps(ImmutableSet.of())
no_deps_built(javaDeps)
}
@Throws(Exception::class)
private fun no_deps_built(javaDeps: AddCompiledJavaDeps) {
val original =
ProjectProtos.forTestProject(TestData.JAVA_LIBRARY_EXTERNAL_DEP_QUERY)
val update =
ProjectProtoUpdate(original, BuildGraphData.EMPTY, NoopContext())
javaDeps.update(update, ArtifactTracker.State.EMPTY, NoopContext())
val newProject = update.build()
Truth.assertThat(newProject.getLibraryList()).isEqualTo(original.getLibraryList())
Truth.assertThat(newProject.getModulesList()).isEqualTo(original.getModulesList())
Truth.assertThat(newProject.getArtifactDirectories().getDirectoriesMap().keys)
.containsExactly(".bazel/javadeps")
Truth.assertThat(
newProject
.getArtifactDirectories()
.getDirectoriesMap()
.get(".bazel/javadeps")!!
.getContentsMap()
)
.isEmpty()
}
@Test
@Throws(Exception::class)
fun dep_built() {
val javaDeps = AddCompiledJavaDeps(ImmutableSet.of())
val artifactState = ArtifactTracker.State.forJavaArtifacts(
JavaArtifactInfo.empty(of("//java/com/google/common/collect:collect")).toBuilder()
.setJars(
ImmutableList.of(
BuildArtifact.create(
"jardigest",
Path.of("build-out/java/com/google/common/collect/libcollect.jar"),
of("//java/com/google/common/collect:collect")
)
)
)
.build()
)
val expectedLibraries =
arrayOf<ProjectProto.Library>(
ProjectProto.Library.newBuilder().setName("//java/com/google/common/collect:collect")
.addClassesJar(
ProjectProto.JarDirectory.newBuilder()
.setPath(".bazel/javadeps/build-out/java/com/google/common/collect/libcollect.jar")
.setRecursive(false)
.build()
).build()
)
val original =
ProjectProtos.forTestProject(TestData.JAVA_LIBRARY_EXTERNAL_DEP_QUERY)
val update =
ProjectProtoUpdate(original, BuildGraphData.EMPTY, NoopContext())
javaDeps.update(update, artifactState, NoopContext())
val newProject = update.build()
Truth.assertThat(newProject.getLibraryList()).containsExactly(*expectedLibraries)
Truth.assertThat(newProject.getArtifactDirectories().getDirectoriesMap().keys)
.containsExactly(".bazel/javadeps")
Truth.assertThat(
newProject
.getArtifactDirectories()
.getDirectoriesMap()[".bazel/javadeps"]!!
.getContentsMap()
)
.containsExactly(
"build-out/java/com/google/common/collect/libcollect.jar",
ProjectProto.ProjectArtifact.newBuilder()
.setBuildArtifact(ProjectProto.BuildArtifact.newBuilder().setDigest("jardigest"))
.setTransform(ArtifactTransform.COPY)
.setTarget("//java/com/google/common/collect:collect")
.build()
)
}
@Test
@Throws(Exception::class)
fun dep_built_empty_jar() {
val javaDeps = AddCompiledJavaDeps(ImmutableSet.of("empty_jar_digest"))
val artifactState = ArtifactTracker.State.forJavaArtifacts(
JavaArtifactInfo.empty(of("//java/com/google/common/collect:collect")).toBuilder()
.setJars(
ImmutableList.of(
BuildArtifact.create(
"empty_jar_digest",
Path.of("build-out/java/com/google/common/collect/libcollect.jar"),
of("//java/com/google/common/collect:collect")
)
)
)
.build()
)
val expectedLibraries = arrayOf<ProjectProto.Library>()
val original =
ProjectProtos.forTestProject(TestData.JAVA_LIBRARY_EXTERNAL_DEP_QUERY)
val update =
ProjectProtoUpdate(original, BuildGraphData.EMPTY, NoopContext())
javaDeps.update(update, artifactState, NoopContext())
val newProject = update.build()
Truth.assertThat(newProject.getLibraryList()).containsExactly(*expectedLibraries)
Truth.assertThat(newProject.getArtifactDirectories().getDirectoriesMap().keys)
.containsExactly(".bazel/javadeps")
Truth.assertThat(
newProject
.getArtifactDirectories()
.getDirectoriesMap()
.get(".bazel/javadeps")!!
.getContentsMap()
)
.isEmpty()
}
}