aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
diff options
context:
space:
mode:
authorGravatar Jon Brandvein <brandjon@google.com>2016-10-11 17:51:06 +0000
committerGravatar Yue Gan <yueg@google.com>2016-10-12 08:55:43 +0000
commit1171a7fb55ae9928cd976d4c3963f4874d58f60c (patch)
treea6a49c86b189798c7d28b6729583fd989daa3186 /src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
parent7bbf70ba0029c9480d61633973d8c293157e9407 (diff)
Make EvalUtils.getDataTypeNameFromClass() look for @SkylarkModules in parent classes
This is needed to let subclasses of @SkylarkModules have the same type() string as their superclass, without requiring a second annotation for the subclass. -- MOS_MIGRATED_REVID=135814343
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
index 4172024e2a..23fc0b39d3 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkInterfaceUtilsTest.java
@@ -81,6 +81,41 @@ public class SkylarkInterfaceUtilsTest {
public void foo() {}
}
+ /** MockClassZ */
+ public static class MockClassZ {
+ }
+
+ @Test
+ public void testGetSkylarkModuleBasic() throws Exception {
+ // Normal case.
+ SkylarkModule ann = SkylarkInterfaceUtils.getSkylarkModule(MockClassA.class);
+ assertThat(ann).isNotNull();
+ assertThat(ann.doc()).isEqualTo("MockClassA");
+ }
+
+ @Test
+ public void testGetSkylarkModuleSubclass() throws Exception {
+ // Subclass's annotation is used.
+ SkylarkModule ann = SkylarkInterfaceUtils.getSkylarkModule(MockClassC.class);
+ assertThat(ann).isNotNull();
+ assertThat(ann.doc()).isEqualTo("MockClassC");
+ }
+
+ @Test
+ public void testGetSkylarkModuleSubclassNoSubannotation() throws Exception {
+ // Falls back on superclass's annotation.
+ SkylarkModule ann = SkylarkInterfaceUtils.getSkylarkModule(MockClassD.class);
+ assertThat(ann).isNotNull();
+ assertThat(ann.doc()).isEqualTo("MockClassC");
+ }
+
+ @Test
+ public void testGetSkylarkModuleNotFound() throws Exception {
+ // Doesn't exist.
+ SkylarkModule ann = SkylarkInterfaceUtils.getSkylarkModule(MockClassZ.class);
+ assertThat(ann).isNull();
+ }
+
@Test
public void testGetSkylarkCallableBasic() throws Exception {
// Normal case. Ensure two-arg form is consistent with one-arg form.
@@ -127,10 +162,15 @@ public class SkylarkInterfaceUtilsTest {
SkylarkCallable ann = SkylarkInterfaceUtils.getSkylarkCallable(method);
assertThat(ann).isNull();
- // ... including when it's only present in a subclass that was bypassed.
+ // ... including when it's only present in a subclass that was bypassed...
method = MockClassC.class.getMethod("baz");
ann = SkylarkInterfaceUtils.getSkylarkCallable(MockClassA.class, method);
assertThat(ann).isNull();
+
+ // ... or when the method itself is only in the subclass that was bypassed.
+ method = MockClassC.class.getMethod("qux");
+ ann = SkylarkInterfaceUtils.getSkylarkCallable(MockClassA.class, method);
+ assertThat(ann).isNull();
}
@Test