Skip to content

Commit

Permalink
Add regression tests for bazelbuild#12605
Browse files Browse the repository at this point in the history
  • Loading branch information
comius committed Jan 11, 2021
1 parent 7984c2e commit f6f7dfc
Show file tree
Hide file tree
Showing 3 changed files with 303 additions and 0 deletions.
100 changes: 100 additions & 0 deletions src/test/shell/bazel/bazel_java14_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -134,4 +134,104 @@ EOF
expect_log "0"
}

# Regression test for https://github.com/bazelbuild/bazel/issues/12605
function test_java15_plugins() {
mkdir -p java/main
cat >java/main/BUILD <<EOF
java_library(
name = "Anno",
srcs = ["Anno.java"],
)
java_plugin(
name = "Proc",
srcs = ["Proc.java"],
deps = [":Anno"],
processor_class = "ex.Proc",
generates_api = True,
)
java_library(
name = "C1",
srcs = ["C1.java"],
deps = [":Anno"],
plugins = [":Proc"],
)
java_library(
name = "C2",
srcs = ["C2.java"],
deps = [":C1"],
)
EOF

cat >java/main/C1.java <<EOF
package ex;
public class C1 {
@Anno
@Deprecated
public void m() {}
}
EOF


cat >java/main/C2.java <<EOF
package ex;
public class C2 {
public void m() {
new C1().m();
}
}
EOF

cat >java/main/Anno.java <<EOF
package ex;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Anno {}
EOF

cat >java/main/Proc.java <<EOF
package ex;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.tools.Diagnostic.Kind;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("ex.Anno")
public class Proc extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Elements els = processingEnv.getElementUtils();
for (Element el : roundEnv.getElementsAnnotatedWith(Anno.class)) {
if (els.isDeprecated(el)) {
processingEnv.getMessager().printMessage(Kind.WARNING, "deprecated");
}
}
return true;
}
}
EOF

bazel build //java/main:C2 &>"${TEST_log}" || fail "Expected to build"
}

run_suite "Tests new Java 14 language features"
102 changes: 102 additions & 0 deletions src/test/shell/bazel/bazel_java15_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,106 @@ EOF
expect_log "^World\$"
}

# Regression test for https://github.com/bazelbuild/bazel/issues/12605
function test_java15_plugins() {
mkdir -p java/main
cat >java/main/BUILD <<EOF
java_library(
name = "Anno",
srcs = ["Anno.java"],
)
java_plugin(
name = "Proc",
srcs = ["Proc.java"],
deps = [":Anno"],
processor_class = "ex.Proc",
generates_api = True,
)
java_library(
name = "C1",
srcs = ["C1.java"],
deps = [":Anno"],
plugins = [":Proc"],
)
java_library(
name = "C2",
srcs = ["C2.java"],
deps = [":C1"],
)
EOF

cat >java/main/C1.java <<EOF
package ex;
public class C1 {
@Anno
@Deprecated
public void m() {}
}
EOF


cat >java/main/C2.java <<EOF
package ex;
public class C2 {
public void m() {
new C1().m();
}
}
EOF

cat >java/main/Anno.java <<EOF
package ex;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Anno {}
EOF

cat >java/main/Proc.java <<EOF
package ex;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.tools.Diagnostic.Kind;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("ex.Anno")
public class Proc extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Elements els = processingEnv.getElementUtils();
for (Element el : roundEnv.getElementsAnnotatedWith(Anno.class)) {
if (els.isDeprecated(el)) {
processingEnv.getMessager().printMessage(Kind.WARNING, "deprecated");
}
}
return true;
}
}
EOF

bazel build //java/main:C2 &>"${TEST_log}" || fail "Expected to build"
}



run_suite "Tests new Java 15 language features"
101 changes: 101 additions & 0 deletions src/test/shell/bazel/bazel_java_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1655,4 +1655,105 @@ EOF
expect_log "hello 123"
}

# Regression test for https://github.com/bazelbuild/bazel/issues/12605
function test_java15_plugins() {
mkdir -p java/main
cat >java/main/BUILD <<EOF
java_library(
name = "Anno",
srcs = ["Anno.java"],
)
java_plugin(
name = "Proc",
srcs = ["Proc.java"],
deps = [":Anno"],
processor_class = "ex.Proc",
generates_api = True,
)
java_library(
name = "C1",
srcs = ["C1.java"],
deps = [":Anno"],
plugins = [":Proc"],
)
java_library(
name = "C2",
srcs = ["C2.java"],
deps = [":C1"],
)
EOF

cat >java/main/C1.java <<EOF
package ex;
public class C1 {
@Anno
@Deprecated
public void m() {}
}
EOF


cat >java/main/C2.java <<EOF
package ex;
public class C2 {
public void m() {
new C1().m();
}
}
EOF

cat >java/main/Anno.java <<EOF
package ex;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Anno {}
EOF

cat >java/main/Proc.java <<EOF
package ex;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.tools.Diagnostic.Kind;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("ex.Anno")
public class Proc extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Elements els = processingEnv.getElementUtils();
for (Element el : roundEnv.getElementsAnnotatedWith(Anno.class)) {
if (els.isDeprecated(el)) {
processingEnv.getMessager().printMessage(Kind.WARNING, "deprecated");
}
}
return true;
}
}
EOF

bazel build //java/main:C2 &>"${TEST_log}" || fail "Expected to build"
}


run_suite "Java integration tests"

0 comments on commit f6f7dfc

Please sign in to comment.