aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skylark
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2017-03-01 17:45:12 +0000
committerGravatar Yue Gan <yueg@google.com>2017-03-02 13:31:45 +0000
commit950310ff911da6c26339f4dc0b124487adc0cdbb (patch)
treef8cd128c2506b79ee39021db80cca2d838ad1919 /src/test/java/com/google/devtools/build/lib/skylark
parent30490512eb0e48a3774cc4e4ef78680e77dd4e47 (diff)
*** Reason for rollback *** Roll-forward of commit 01120026dc313ee7ad9ea95069a29252eb19173b with fix. *** Original change description *** Automated [] rollback of commit 01120026dc313ee7ad9ea95069a29252eb19173b. -- PiperOrigin-RevId: 148897534 MOS_MIGRATED_REVID=148897534
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skylark')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java86
1 files changed, 71 insertions, 15 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 37d4cea027..9067b89952 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -37,17 +37,18 @@ import com.google.devtools.build.lib.packages.RequiredProviders;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.packages.SkylarkAspect;
+import com.google.devtools.build.lib.packages.SkylarkAspectClass;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.rules.SkylarkAttr;
import com.google.devtools.build.lib.rules.SkylarkFileType;
-import com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions;
import com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions.RuleFunction;
+import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
+import com.google.devtools.build.lib.syntax.BuildFileAST;
import com.google.devtools.build.lib.syntax.ClassObject;
import com.google.devtools.build.lib.syntax.Environment;
-import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalUtils;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
@@ -96,36 +97,37 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
@Test
public void testCannotOverrideBuiltInAttribute() throws Exception {
- ev.setFailFast(true);
+ ev.setFailFast(false);
try {
evalAndExport(
"def impl(ctx): return", "r = rule(impl, attrs = {'tags': attr.string_list()})");
Assert.fail("Expected error '"
+ "There is already a built-in attribute 'tags' which cannot be overridden"
+ "' but got no error");
- } catch (EvalException e) {
- assertThat(e).hasMessage(
+ } catch (AssertionError e) {
+ assertThat(e.getMessage()).contains(
"There is already a built-in attribute 'tags' which cannot be overridden");
}
}
@Test
public void testCannotOverrideBuiltInAttributeName() throws Exception {
- ev.setFailFast(true);
+ ev.setFailFast(false);
try {
evalAndExport(
"def impl(ctx): return", "r = rule(impl, attrs = {'name': attr.string()})");
Assert.fail("Expected error '"
+ "There is already a built-in attribute 'name' which cannot be overridden"
+ "' but got no error");
- } catch (EvalException e) {
- assertThat(e).hasMessage(
+ } catch (AssertionError e) {
+ assertThat(e.getMessage()).contains(
"There is already a built-in attribute 'name' which cannot be overridden");
}
}
@Test
public void testImplicitArgsAttribute() throws Exception {
+ ev.setFailFast(false);
evalAndExport(
"def _impl(ctx):",
" pass",
@@ -263,18 +265,32 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
@Test
public void testLabelListWithAspects() throws Exception {
- SkylarkAttr.Descriptor attr =
- (SkylarkAttr.Descriptor) evalRuleClassCode(
+ evalAndExport(
"def _impl(target, ctx):",
" pass",
"my_aspect = aspect(implementation = _impl)",
- "attr.label_list(aspects = [my_aspect])");
- Object aspect = ev.lookup("my_aspect");
+ "a = attr.label_list(aspects = [my_aspect])");
+ SkylarkAttr.Descriptor attr = (SkylarkAttr.Descriptor) ev.lookup("a");
+ SkylarkAspect aspect = (SkylarkAspect) ev.lookup("my_aspect");
assertThat(aspect).isNotNull();
- assertThat(attr.getAspects()).containsExactly(aspect);
+ assertThat(attr.build("xxx").getAspectClasses()).containsExactly(aspect.getAspectClass());
}
@Test
+ public void testLabelWithAspects() throws Exception {
+ evalAndExport(
+ "def _impl(target, ctx):",
+ " pass",
+ "my_aspect = aspect(implementation = _impl)",
+ "a = attr.label(aspects = [my_aspect])");
+ SkylarkAttr.Descriptor attr = (SkylarkAttr.Descriptor) ev.lookup("a");
+ SkylarkAspect aspect = (SkylarkAspect) ev.lookup("my_aspect");
+ assertThat(aspect).isNotNull();
+ assertThat(attr.build("xxx").getAspectClasses()).containsExactly(aspect.getAspectClass());
+ }
+
+
+ @Test
public void testLabelListWithAspectsError() throws Exception {
checkErrorContains(
"expected type 'Aspect' for 'aspects' element but got type 'int' instead",
@@ -492,8 +508,10 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
}
protected void evalAndExport(String... lines) throws Exception {
- eval(lines);
- SkylarkRuleClassFunctions.exportRuleFunctionsAndAspects(ev.getEnvironment(), FAKE_LABEL);
+ BuildFileAST buildFileAST = BuildFileAST.parseAndValidateSkylarkString(
+ ev.getEnvironment(), lines);
+ SkylarkImportLookupFunction.execAndExport(
+ buildFileAST, FAKE_LABEL, ev.getEventHandler(), ev.getEnvironment());
}
@Test
@@ -1221,6 +1239,44 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.EMPTY)).isFalse();
}
+ @Test
+ public void fancyExports() throws Exception {
+ evalAndExport(
+ "def _impla(target, ctx): pass",
+ "p, (a, p1) = [",
+ " provider(),",
+ " [ aspect(_impla),",
+ " provider() ]",
+ "]"
+ );
+ SkylarkClassObjectConstructor p = (SkylarkClassObjectConstructor) lookup("p");
+ SkylarkAspect a = (SkylarkAspect) lookup("a");
+ SkylarkClassObjectConstructor p1 = (SkylarkClassObjectConstructor) lookup("p1");
+ assertThat(p.getPrintableName()).isEqualTo("p");
+ assertThat(p.getKey())
+ .isEqualTo(new SkylarkClassObjectConstructor.SkylarkKey(FAKE_LABEL, "p"));
+ assertThat(p1.getPrintableName()).isEqualTo("p1");
+ assertThat(p1.getKey())
+ .isEqualTo(new SkylarkClassObjectConstructor.SkylarkKey(FAKE_LABEL, "p1"));
+ assertThat(a.getAspectClass()).isEqualTo(
+ new SkylarkAspectClass(FAKE_LABEL, "a")
+ );
+ }
+
+ @Test
+ public void multipleTopLevels() throws Exception {
+ evalAndExport(
+ "p = provider()",
+ "p1 = p"
+ );
+ SkylarkClassObjectConstructor p = (SkylarkClassObjectConstructor) lookup("p");
+ SkylarkClassObjectConstructor p1 = (SkylarkClassObjectConstructor) lookup("p1");
+ assertThat(p).isEqualTo(p1);
+ assertThat(p.getKey())
+ .isEqualTo(new SkylarkClassObjectConstructor.SkylarkKey(FAKE_LABEL, "p"));
+ assertThat(p1.getKey())
+ .isEqualTo(new SkylarkClassObjectConstructor.SkylarkKey(FAKE_LABEL, "p"));
+ }
@Test