diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2016-03-17 16:40:42 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2016-03-18 12:45:10 +0000 |
commit | 36532fced0440d231c43dba3d16be775c9c1fd19 (patch) | |
tree | 5aae3f26ea0dcf6024219176956b98a98d35f4b3 /src/test/java | |
parent | 22fb90cd7bcc6aafd1cf30de3c77e3025b5c48c2 (diff) |
Add detection of WORKSPACE cycles due to load statements
Cycle when looking for a repository name will now shows a user-understable error.
Fixes #877.
--
MOS_MIGRATED_REVID=117453646
Diffstat (limited to 'src/test/java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java | 50 |
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'."); + } } |