diff options
author | Laurent Le Brun <laurentlb@google.com> | 2017-01-05 17:22:19 +0000 |
---|---|---|
committer | John Cater <jcater@google.com> | 2017-01-05 21:10:13 +0000 |
commit | 66bee178015781114f377e26de7a33d629f34f35 (patch) | |
tree | 4519b598551461d66d00526365fa03c3c0c91ba0 /src/test/java/com/google/devtools/build/lib | |
parent | 8741940d69de538cc4cf9b7296828cead5fc8621 (diff) |
Fix cycle detection between .bzl files.
The code assumed that the last element before a cycle was a BUILD file. It can
also be a .bzl file.
--
PiperOrigin-RevId: 143673940
MOS_MIGRATED_REVID=143673940
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java index bf6fc78420..9ebc6d587a 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java @@ -1120,7 +1120,6 @@ public class SkylarkIntegrationTest extends BuildViewTestCase { getConfiguredTarget("//test/skylark:cr4"); } - @Test public void testRecursiveImport() throws Exception { scratch.file("test/skylark/ext2.bzl", "load('/test/skylark/ext1', 'symbol2')"); @@ -1140,13 +1139,42 @@ public class SkylarkIntegrationTest extends BuildViewTestCase { // This is expected } assertContainsEvent( - "test/skylark/BUILD: cycle in referenced extension files: \n" + "cycle detected in extension files: \n" + + " test/skylark/BUILD\n" + ".-> //test/skylark:ext1.bzl\n" + "| //test/skylark:ext2.bzl\n" + "`-- //test/skylark:ext1.bzl"); } @Test + public void testRecursiveImport2() throws Exception { + scratch.file("test/skylark/ext1.bzl", "load('//test/skylark:ext2.bzl', 'symbol2')"); + scratch.file("test/skylark/ext2.bzl", "load('//test/skylark:ext3.bzl', 'symbol3')"); + scratch.file("test/skylark/ext3.bzl", "load('//test/skylark:ext4.bzl', 'symbol4')"); + scratch.file("test/skylark/ext4.bzl", "load('//test/skylark:ext2.bzl', 'symbol2')"); + + scratch.file( + "test/skylark/BUILD", + "load('//test/skylark:ext1.bzl', 'custom_rule')", + "genrule(name = 'rule')"); + + reporter.removeHandler(failFastHandler); + try { + getTarget("//test/skylark:rule"); + fail(); + } catch (BuildFileContainsErrorsException e) { + // This is expected + } + assertContainsEvent( + "cycle detected in extension files: \n" + + " //test/skylark:ext1.bzl\n" + + ".-> //test/skylark:ext2.bzl\n" + + "| //test/skylark:ext3.bzl\n" + + "| //test/skylark:ext4.bzl\n" + + "`-- //test/skylark:ext2.bzl"); + } + + @Test public void testSymbolPropagateThroughImports() throws Exception { scratch.file("test/skylark/implementation.bzl", "def custom_rule_impl(ctx):", " return None"); @@ -1226,5 +1254,35 @@ public class SkylarkIntegrationTest extends BuildViewTestCase { assertContainsEvent("Loading of target '//test/skylark:rule' failed; build aborted"); assertThat(eventCollector).hasSize(1); } + + @Override + @Test + public void testRecursiveImport2() throws Exception { + scratch.file("test/skylark/ext1.bzl", "load('//test/skylark:ext2.bzl', 'symbol2')"); + scratch.file("test/skylark/ext2.bzl", "load('//test/skylark:ext3.bzl', 'symbol3')"); + scratch.file("test/skylark/ext3.bzl", "load('//test/skylark:ext4.bzl', 'symbol4')"); + scratch.file("test/skylark/ext4.bzl", "load('//test/skylark:ext2.bzl', 'symbol2')"); + + scratch.file( + "test/skylark/BUILD", + "load('//test/skylark:ext1.bzl', 'custom_rule')", + "genrule(name = 'rule')"); + + reporter.removeHandler(failFastHandler); + try { + ensureTargetsVisited("//test/skylark:rule"); + getTarget("//test/skylark:rule"); + fail(); + } catch (BuildFileContainsErrorsException e) { + // This is expected + } + assertContainsEvent("//test/skylark:ext2.bzl"); + assertContainsEvent("//test/skylark:ext3.bzl"); + assertContainsEvent("//test/skylark:ext4.bzl"); + assertContainsEvent("Skylark import cycle"); + assertContainsEvent("Loading of target '//test/skylark:rule' failed; build aborted"); + assertThat(eventCollector).hasSize(1); + } + } } |