aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
index 8f692515b6..a7ee7213bb 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.bazel.repository.skylark;
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
@@ -24,6 +25,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.config.ConfigurationFactory;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
import com.google.devtools.build.lib.packages.util.MockCcSupport;
import com.google.devtools.build.lib.packages.util.MockToolsConfig;
import com.google.devtools.build.lib.rules.repository.LocalRepositoryFunction;
@@ -250,4 +252,52 @@ public class SkylarkRepositoryIntegrationTest extends BuildViewTestCase {
Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path");
assertThat(path).isEqualTo("foobar");
}
+
+ @Test
+ public void testCycleErrorWhenCallingRandomTarget() throws Exception {
+ reporter.removeHandler(failFastHandler);
+ scratch.file("/repo2/data.txt", "data");
+ scratch.file("/repo2/BUILD", "exports_files_(['data.txt'])");
+ scratch.file("/repo2/def.bzl", "def macro():", " print('bleh')");
+ scratch.file("/repo2/WORKSPACE");
+ scratch.overwriteFile(
+ rootDirectory.getRelative("WORKSPACE").getPathString(),
+ "load('@foo//:def.bzl', 'repo')",
+ "repo(name='foobar')",
+ "local_repository(name='foo', path='/repo2')");
+ try {
+ invalidatePackages();
+ getTarget("@foobar//:data.txt");
+ fail();
+ } catch (BuildFileContainsErrorsException e) {
+ // This is expected
+ }
+ assertDoesNotContainEvent("cycle");
+ assertContainsEvent("Maybe repository 'foo' was defined later in your WORKSPACE file?");
+ assertContainsEvent("Failed to load Skylark extension '@foo//:def.bzl'.");
+ }
+
+ @Test
+ public void testCycleErrorWhenCallingCycleTarget() throws Exception {
+ reporter.removeHandler(failFastHandler);
+ scratch.file("/repo2/data.txt", "data");
+ scratch.file("/repo2/BUILD", "exports_files_(['data.txt'])");
+ scratch.file("/repo2/def.bzl", "def macro():", " print('bleh')");
+ scratch.file("/repo2/WORKSPACE");
+ scratch.overwriteFile(
+ rootDirectory.getRelative("WORKSPACE").getPathString(),
+ "load('@foo//:def.bzl', 'repo')",
+ "repo(name='foobar')",
+ "local_repository(name='foo', path='/repo2')");
+ try {
+ invalidatePackages();
+ getTarget("@foo//:data.txt");
+ fail();
+ } catch (BuildFileContainsErrorsException e) {
+ // This is expected
+ }
+ assertDoesNotContainEvent("cycle");
+ assertContainsEvent("Maybe repository 'foo' was defined later in your WORKSPACE file?");
+ assertContainsEvent("Failed to load Skylark extension '@foo//:def.bzl'.");
+ }
}