diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl deleted file mode 100644 index 626c33b251..0000000000 --- a/rules_bazel/java/java_diff_test.bzl +++ /dev/null @@ -1,84 +0,0 @@ -def _overwrite_golden_impl(ctx): - test_class = ctx.attr.test_class - inputs = ctx.files.srcs - goldens_output_zip = ctx.outputs.goldens_output_zip - test_runner = ctx.executable.test_runner - - # Generate the goldens from tests. - generate_goldens_script = """ - mkdir local_tmp - TEST_OUTPUT_HOME="$(pwd)/local_tmp" {test_runner_path} $@ - cd local_tmp - # Zip all files under local_tmp with all nested parent folders except for local_tmp itself. - # Zip files because there are cases that one Junit test can produce multiple goldens. - zip -r ../{goldens_output_zip} . - """.format( - test_runner_path = test_runner.path, - goldens_output_zip = goldens_output_zip.path, - ) - - ctx.actions.run_shell( - inputs = inputs, - outputs = [goldens_output_zip], - arguments = [test_class], - tools = [test_runner], - command = generate_goldens_script, - ) - - # Overwrite the goldens. - golden_update_script_content = """ - #!/bin/bash - cd ${{BUILD_WORKSPACE_DIRECTORY}} - unzip -ao {goldens_output_zip} -d src/test/java - """.format( - goldens_output_zip = goldens_output_zip.path, - ) - ctx.actions.write( - output = ctx.outputs.golden_update_script, - content = golden_update_script_content, - is_executable = True, - ) - return [DefaultInfo(executable = ctx.outputs.golden_update_script)] - -overwrite_golden = rule( - attrs = { - "test_class": attr.string(mandatory = True), - "srcs": attr.label_list( - allow_files = True, - mandatory = True, - ), - "test_runner": attr.label( - mandatory = True, - executable = True, - cfg = "host", - ), - }, - outputs = { - "goldens_output_zip": "%{name}.zip", - "golden_update_script": "%{name}.sh", - }, - executable = True, - implementation = _overwrite_golden_impl, -) - -def golden_update( - name, - srcs, - test_class, - data = [], - deps = []): - golden_junit_runner_name = "%s_junit_runner" % name - native.java_binary( - name = golden_junit_runner_name, - srcs = srcs, - data = data, - main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", - deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"] + deps, - ) - - overwrite_golden( - name = name, - test_class = test_class, - test_runner = ":%s" % golden_junit_runner_name, - srcs = srcs + data, - ) diff --git a/src/test/java/com/google/api/generator/engine/BUILD.bazel b/src/test/java/com/google/api/generator/engine/BUILD.bazel index e52ef62387..a066fd38e3 100644 --- a/src/test/java/com/google/api/generator/engine/BUILD.bazel +++ b/src/test/java/com/google/api/generator/engine/BUILD.bazel @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_test") -load("//:rules_bazel/java/java_diff_test.bzl", "golden_update") package(default_visibility = ["//visibility:public"]) @@ -26,20 +25,20 @@ TEST_DEPS = [ [java_test( name = test_name, - srcs = ["{0}.java".format(test_name)], + srcs = ["%s.java" % test_name], data = ["//src/test/java/com/google/api/generator/engine/goldens:goldens_files"], - test_class = "com.google.api.generator.engine.{0}".format(test_name), + test_class = "com.google.api.generator.engine.%s" % test_name, deps = TEST_DEPS, ) for test_name in TESTS] -TEST_CLASS_NAME = "com.google.api.generator.engine.JavaCodeGeneratorTest" - # Run `bazel run src/test/java/com/google/api/generator/engine:JavaCodeGeneratorTest_update` # to update goldens as expected generated code. -[golden_update( - name = "{0}_update".format(test_name), - srcs = ["{0}.java".format(test_name)], +[java_binary( + name = "%s_update" % test_name, + srcs = ["%s.java" % test_name], data = ["//src/test/java/com/google/api/generator/engine/goldens:goldens_files"], - test_class = "com.google.api.generator.engine.{0}".format(test_name), + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + args = ["com.google.api.generator.engine.%s" % test_name], deps = TEST_DEPS, + runtime_deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"], ) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel index 1ad263ea22..bb4dcb4084 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/BUILD.bazel @@ -1,14 +1,11 @@ load("@rules_java//java:defs.bzl", "java_proto_library", "java_test") -load("//:rules_bazel/java/java_diff_test.bzl", "golden_update") package(default_visibility = ["//visibility:public"]) -UPDATE_GOLDENS_TESTS = [ +TESTS = [ "ComposerTest", ] -TESTS = UPDATE_GOLDENS_TESTS - TEST_DEPS = [ ":common_resources_java_proto", "//:service_config_java_proto", @@ -60,14 +57,14 @@ java_proto_library( [java_test( name = test_name, srcs = [ - "{0}.java".format(test_name), + "%s.java" % test_name, ], data = [ "//src/test/java/com/google/api/generator/gapic/composer/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.{0}".format(test_name), + test_class = "com.google.api.generator.gapic.composer.%s" % test_name, deps = TEST_DEPS, ) for test_name in TESTS] @@ -75,16 +72,16 @@ java_proto_library( # to update goldens as expected generated code. # `ServiceClient*` tests are not supported now since they are still in active development. -[golden_update( - name = "{0}_update".format(test_name), - srcs = [ - "{0}.java".format(test_name), - ], +[java_binary( + name = "%s_update" % test_name, + srcs = ["%s.java" % test_name], data = [ "//src/test/java/com/google/api/generator/gapic/composer/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.{0}".format(test_name), + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + args = ["com.google.api.generator.gapic.composer.%s" % test_name], deps = TEST_DEPS, -) for test_name in UPDATE_GOLDENS_TESTS] + runtime_deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"], +) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/common/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/common/BUILD.bazel index 28a4bfc8b4..6ec76efdc2 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/common/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/common/BUILD.bazel @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_proto_library", "java_test") -load("//:rules_bazel/java/java_diff_test.bzl", "golden_update") package(default_visibility = ["//visibility:public"]) @@ -70,14 +69,14 @@ java_proto_library( [java_test( name = test_name, srcs = [ - "{0}.java".format(test_name), + "%s.java" % test_name, ], data = [ "//src/test/java/com/google/api/generator/gapic/composer/common/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.common.{0}".format(test_name), + test_class = "com.google.api.generator.gapic.composer.common.%s" % test_name, deps = TEST_DEPS + [":common"], ) for test_name in TESTS] @@ -85,16 +84,16 @@ java_proto_library( # to update goldens as expected generated code. # `ServiceClient*` tests are not supported now since they are still in active development. -[golden_update( - name = "{0}_update".format(test_name), - srcs = [ - "{0}.java".format(test_name), - ], +[java_binary( + name = "%s_update" % test_name, + srcs = ["%s.java" % test_name], data = [ "//src/test/java/com/google/api/generator/gapic/composer/common/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.common.{0}".format(test_name), + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + args = ["com.google.api.generator.gapic.composer.common.%s" % test_name], deps = TEST_DEPS + [":common"], + runtime_deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"], ) for test_name in UPDATE_GOLDENS_TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/grpc/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/grpc/BUILD.bazel index 825635a75e..3537002a84 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/grpc/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/grpc/BUILD.bazel @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_proto_library", "java_test") -load("//:rules_bazel/java/java_diff_test.bzl", "golden_update") package(default_visibility = ["//visibility:public"]) @@ -64,14 +63,14 @@ java_proto_library( name = test_name, size = "medium", srcs = [ - "{0}.java".format(test_name), + "%s.java" % test_name, ] + COMMON_SRCS, data = [ "//src/test/java/com/google/api/generator/gapic/composer/grpc/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.grpc.{0}".format(test_name), + test_class = "com.google.api.generator.gapic.composer.grpc.%s" % test_name, deps = TEST_DEPS, ) for test_name in TESTS] @@ -79,16 +78,16 @@ java_proto_library( # to update goldens as expected generated code. # `ServiceClient*` tests are not supported now since they are still in active development. -[golden_update( - name = "{0}_update".format(test_name), - srcs = [ - "{0}.java".format(test_name), - ] + COMMON_SRCS, +[java_binary( + name = "%s_update" % test_name, + srcs = ["%s.java" % test_name] + COMMON_SRCS, data = [ "//src/test/java/com/google/api/generator/gapic/composer/grpc/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.grpc.{0}".format(test_name), + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + args = ["com.google.api.generator.gapic.composer.grpc.%s" % test_name], deps = TEST_DEPS, + runtime_deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"], ) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel index c62de44173..02ebf06533 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_proto_library", "java_test") -load("//:rules_bazel/java/java_diff_test.bzl", "golden_update") package(default_visibility = ["//visibility:public"]) @@ -13,7 +12,7 @@ TESTS = UPDATE_GOLDENS_TESTS + [ filegroup( name = "resourcename_files", - srcs = ["{0}.java".format(f) for f in TESTS], + srcs = ["%s.java" % f for f in TESTS], ) TEST_DEPS = [ @@ -40,13 +39,13 @@ TEST_DEPS = [ [java_test( name = test_name, - srcs = ["{0}.java".format(test_name)], + srcs = ["%s.java" % test_name], data = [ "//src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.resourcename.{0}".format(test_name), + test_class = "com.google.api.generator.gapic.composer.resourcename.%s" % test_name, deps = TEST_DEPS, ) for test_name in TESTS] @@ -61,16 +60,16 @@ java_proto_library( # to update goldens as expected generated code. # `ServiceClient*` tests are not supported now since they are still in active development. -[golden_update( - name = "{0}_update".format(test_name), - srcs = [ - "{0}.java".format(test_name), - ], +[java_binary( + name = "%s_update" % test_name, + srcs = ["%s.java" % test_name], data = [ "//src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.resourcename.{0}".format(test_name), + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + args = ["com.google.api.generator.gapic.composer.resourcename.%s" % test_name], deps = TEST_DEPS, + runtime_deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"], ) for test_name in UPDATE_GOLDENS_TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/rest/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/rest/BUILD.bazel index c4532b3599..6d470e99fb 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/rest/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/rest/BUILD.bazel @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_proto_library", "java_test") -load("//:rules_bazel/java/java_diff_test.bzl", "golden_update") package(default_visibility = ["//visibility:public"]) @@ -62,14 +61,14 @@ java_proto_library( name = test_name, size = "medium", srcs = [ - "{0}.java".format(test_name), + "%s.java" % test_name, ] + COMMON_SRCS, data = [ "//src/test/java/com/google/api/generator/gapic/composer/rest/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.rest.{0}".format(test_name), + test_class = "com.google.api.generator.gapic.composer.rest.%s" % test_name, deps = TEST_DEPS, ) for test_name in TESTS] @@ -77,16 +76,16 @@ java_proto_library( # to update goldens as expected generated code. # `ServiceClient*` tests are not supported now since they are still in active development. -[golden_update( - name = "{0}_update".format(test_name), - srcs = [ - "{0}.java".format(test_name), - ] + COMMON_SRCS, +[java_binary( + name = "%s_update" % test_name, + srcs = ["%s.java" % test_name] + COMMON_SRCS, data = [ "//src/test/java/com/google/api/generator/gapic/composer/rest/goldens:goldens_files", "//src/test/java/com/google/api/generator/gapic/testdata:gapic_config_files", "//src/test/java/com/google/api/generator/gapic/testdata:service_config_files", ], - test_class = "com.google.api.generator.gapic.composer.rest.{0}".format(test_name), + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + args = ["com.google.api.generator.gapic.composer.rest.%s" % test_name], deps = TEST_DEPS, + runtime_deps = ["//src/test/java/com/google/api/generator/test/framework:junit_runner"], ) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/test/framework/BUILD.bazel b/src/test/java/com/google/api/generator/test/framework/BUILD.bazel index c9f4b9ce74..99800b9c3f 100644 --- a/src/test/java/com/google/api/generator/test/framework/BUILD.bazel +++ b/src/test/java/com/google/api/generator/test/framework/BUILD.bazel @@ -27,9 +27,7 @@ java_library( java_library( name = "junit_runner", - srcs = [ - "SingleJUnitTestRunner.java", - ], + srcs = ["SingleJUnitTestRunner.java"], deps = [ ":utils", "@junit_junit//jar", diff --git a/src/test/java/com/google/api/generator/test/framework/SingleJUnitTestRunner.java b/src/test/java/com/google/api/generator/test/framework/SingleJUnitTestRunner.java index eda4ae7f8c..d5d3fb35fc 100644 --- a/src/test/java/com/google/api/generator/test/framework/SingleJUnitTestRunner.java +++ b/src/test/java/com/google/api/generator/test/framework/SingleJUnitTestRunner.java @@ -45,19 +45,11 @@ public static class JUnitClassNotFoundException extends RuntimeException { public JUnitClassNotFoundException(String errorMessage) { super(errorMessage); } - - public JUnitClassNotFoundException(String errorMessage, Throwable cause) { - super(errorMessage, cause); - } } public static class MissingRequiredArgException extends RuntimeException { public MissingRequiredArgException(String errorMessage) { super(errorMessage); } - - public MissingRequiredArgException(String errorMessage, Throwable cause) { - super(errorMessage, cause); - } } } diff --git a/src/test/java/com/google/api/generator/test/framework/Utils.java b/src/test/java/com/google/api/generator/test/framework/Utils.java index d38142a582..255bf3c949 100644 --- a/src/test/java/com/google/api/generator/test/framework/Utils.java +++ b/src/test/java/com/google/api/generator/test/framework/Utils.java @@ -21,8 +21,7 @@ public class Utils { /** - * Save the generated code from JUnit test to a file for updating goldens. These files will be - * saved as a zip file, then unzipped to overwrite goldens files. The relative path + * Save the generated code from JUnit test to a file for updating goldens. The relative path * `com/google/..` which is identical with the location of goldens files which will help us easily * replace the original goldens. For example: * `src/test/java/com/google/api/generator/gapic/composer/ComposerTest.java` will save the @@ -30,24 +29,26 @@ public class Utils { * `$TEST_OUTPUT_HOME/com/google/api/generator/gapic/composer/goldens/ComposerTest.golden`. * * @param clazz the test class. - * @param fileName the name of saved file, usually it is test method name with suffix `.golden`. - * @param codegen the generated code from JUnit test. + * @param fileName the name of saved file, usually a test method name with suffix `.golden` + * @param codegen the generated code from JUnit test */ public static void saveCodegenToFile(Class clazz, String fileName, String codegen) { // This system environment variable `TEST_OUTPUT_HOME` is used to specify a folder - // which contains generated output from JUnit test. - // It will be set when running `bazel run testTarget_update` command. - String testOutputHome = System.getenv("TEST_OUTPUT_HOME"); + // which contains generated output from JUnit test. However, when running `bazel run + // testTarget_update` command, the environment variable will be ignored, and the correct + // folder in the workspace will be auto-detected. + String workspaceDir = System.getenv("BUILD_WORKSPACE_DIRECTORY"); + String testOutputHome = + workspaceDir != null ? workspaceDir + "/src/test/java" : System.getenv("TEST_OUTPUT_HOME"); String relativeGoldenDir = getTestoutGoldenDir(clazz); Path testOutputDir = Paths.get(testOutputHome, relativeGoldenDir); testOutputDir.toFile().mkdirs(); - try (FileWriter myWriter = - new FileWriter(Paths.get(testOutputHome, relativeGoldenDir, fileName).toFile())) { + try (FileWriter myWriter = new FileWriter(testOutputDir.resolve(fileName).toFile())) { myWriter.write(codegen); } catch (IOException e) { throw new SaveCodegenToFileException( String.format( - "Error occured when saving codegen to file %s/%s", relativeGoldenDir, fileName)); + "Error occurred when saving codegen to file %s/%s", relativeGoldenDir, fileName)); } } @@ -56,20 +57,12 @@ private static String getTestoutGoldenDir(Class clazz) { } public static String getGoldenDir(Class clazz) { - return "src/test/java/" + clazz.getPackage().getName().replace(".", "/") + "/goldens/"; - } - - public static String getClassName(Class clazz) { - return clazz.getSimpleName(); + return "src/test/java/" + getTestoutGoldenDir(clazz); } public static class SaveCodegenToFileException extends RuntimeException { public SaveCodegenToFileException(String errorMessage) { super(errorMessage); } - - public SaveCodegenToFileException(String errorMessage, Throwable cause) { - super(errorMessage, cause); - } } }