From 42db152aafa0a0861a0dfa3d47055bee9f08d2ff Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Tue, 8 Sep 2020 17:56:39 -0700 Subject: [PATCH 01/39] add fileDiffUtils --- BUILD.bazel | 1 + dependencies.properties | 1 + .../com/google/api/generator/diff/BUILD.bazel | 17 +++++ .../api/generator/diff/FileDiffUtils.java | 62 +++++++++++++++++++ .../google/api/generator/engine/BUILD.bazel | 1 + 5 files changed, 82 insertions(+) create mode 100644 src/test/java/com/google/api/generator/diff/BUILD.bazel create mode 100644 src/test/java/com/google/api/generator/diff/FileDiffUtils.java diff --git a/BUILD.bazel b/BUILD.bazel index 7574fb74b9..67efa50d44 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -13,6 +13,7 @@ JAVA_SRCS = [ TEST_SRCS = [ "//src/test/java/com/google/api/generator/engine:engine_files", "//src/test/java/com/google/api/generator/gapic:gapic_files", + "//src/test/java/com/google/api/generator/diff:diff_files", ] # ============= Proto wrappers ================= diff --git a/dependencies.properties b/dependencies.properties index 05ca128d8f..aad3ef747f 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -21,6 +21,7 @@ maven.com_google_code_findbugs_jsr305=com.google.code.findbugs:jsr305:3.0.0 maven.com_google_auto_value_auto_value=com.google.auto.value:auto-value:1.7.2 maven.com_google_auto_value_auto_value_annotations=com.google.auto.value:auto-value-annotations:1.7.2 maven.com_google_protobuf_protobuf_java=com.google.protobuf:protobuf-java:3.12.2 +maven.io_github_java_diff_utils=io.github.java-diff-utils:java-diff-utils:4.0 # Gapic YAML parsing for batching settings. maven.org_yaml_snakeyaml=org.yaml:snakeyaml:1.26 diff --git a/src/test/java/com/google/api/generator/diff/BUILD.bazel b/src/test/java/com/google/api/generator/diff/BUILD.bazel new file mode 100644 index 0000000000..8f8badeddb --- /dev/null +++ b/src/test/java/com/google/api/generator/diff/BUILD.bazel @@ -0,0 +1,17 @@ +package(default_visibility = ["//visibility:public"]) +filegroup( + name = "diff_files", + srcs = glob(["*.java"]), +) + +java_library( + name = "diff", + srcs = [ + ":diff_files", + ], + deps = [ + "@com_google_guava_guava//jar", + "@io_github_java_diff_utils//jar", + "@google_java_format_all_deps//jar", + ], +) diff --git a/src/test/java/com/google/api/generator/diff/FileDiffUtils.java b/src/test/java/com/google/api/generator/diff/FileDiffUtils.java new file mode 100644 index 0000000000..aeb3358fa3 --- /dev/null +++ b/src/test/java/com/google/api/generator/diff/FileDiffUtils.java @@ -0,0 +1,62 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.diff; + +import com.github.difflib.DiffUtils; +import com.github.difflib.UnifiedDiffUtils; +import com.github.difflib.algorithm.DiffException; +import com.github.difflib.patch.Patch; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Arrays; +import java.util.List; + +public class FileDiffUtils { + public static List diffStringAndFile(String actualContent, String goldenFilePath) { + List original = Arrays.asList(actualContent.split("\\r?\\n")); + List revised = null; + Patch diff = null; + try { + revised = Files.readAllLines(new File(goldenFilePath).toPath()); + } catch (IOException e) { + throw new GoldenFileNotFoundException( + String.format("Golden File %s is not found.", goldenFilePath)); + } + + try { + diff = DiffUtils.diff(original, revised); + } catch (DiffException e) { + throw new FileDiffException( + "Could not compute the difference between actual codegen and golden file."); + } + + List unifiedDiff = + UnifiedDiffUtils.generateUnifiedDiff("sample", goldenFilePath, original, diff, 2); + return unifiedDiff; + } + + private static class GoldenFileNotFoundException extends RuntimeException { + public GoldenFileNotFoundException(String errorMessage) { + super(errorMessage); + } + } + + private static class FileDiffException extends RuntimeException { + public FileDiffException(String errorMessage) { + super(errorMessage); + } + } +} 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 e4cead379e..494c0edcbd 100644 --- a/src/test/java/com/google/api/generator/engine/BUILD.bazel +++ b/src/test/java/com/google/api/generator/engine/BUILD.bazel @@ -20,6 +20,7 @@ TESTS = [ deps = [ "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", + "//src/test/java/com/google/api/generator/diff", "@junit_junit//jar", ], ) for test_name in TESTS] From 7c4b6a71e3b79118ca40430fd82a98f119ebfbe6 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Tue, 8 Sep 2020 18:24:14 -0700 Subject: [PATCH 02/39] add new dummy unit test --- .../api/generator/gapic/composer/BUILD.bazel | 1 + .../composer/FileDiffInfraDummyTest.java | 94 +++++++++++++++++++ .../gapic/composer/goldens/BUILD.bazel | 6 ++ ...leDiffInfraDummyTestClassWithHeader.golden | 19 ++++ .../FileDiffInfraDummyTestSimpleClass.golden | 4 + 5 files changed, 124 insertions(+) create mode 100644 src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java create mode 100644 src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel create mode 100644 src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestClassWithHeader.golden create mode 100644 src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden 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 740ba1b5f2..89dd8025b8 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 @@ -14,6 +14,7 @@ TESTS = [ "ServiceSettingsClassComposerTest", "ServiceStubSettingsClassComposerTest", "ServiceStubClassComposerTest", + "FileDiffInfraDummyTest", ] filegroup( diff --git a/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java new file mode 100644 index 0000000000..d1b8628b49 --- /dev/null +++ b/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java @@ -0,0 +1,94 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.gapic.composer; + +import static junit.framework.Assert.assertEquals; + +import com.google.api.generator.engine.ast.ClassDefinition; +import com.google.api.generator.engine.ast.CommentStatement; +import com.google.api.generator.engine.ast.LineComment; +import com.google.api.generator.engine.ast.ScopeNode; +import com.google.api.generator.engine.writer.JavaWriterVisitor; +import com.google.api.generator.gapic.model.GapicClass; +import com.google.api.generator.gapic.model.GapicClass.Kind; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; + +public class FileDiffInfraDummyTest { + // Add two simple tests for testing the file-diff infra. + // 1. The two unit tests create simple gapic classes since here is gapic/composer folder. + // 2. Two unit tests are created because we have the case of two expceted strings comparison + // in one test class e.g. ResourceNameHelperClassComposer. In that case, two golden files will be + // created. + // + // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and tested well. + @Test + public void simpleGapicClass() { + ClassDefinition classDef = + ClassDefinition.builder() + .setHeaderCommentStatements( + Arrays.asList( + CommentStatement.withComment( + LineComment.withComment("This is a test class for file-diff infra")))) + .setPackageString("com.google.showcase.v1beta1.stub") + .setName("EchoStubSettings") + .setScope(ScopeNode.PUBLIC) + .build(); + GapicClass gapicClass = GapicClass.create(Kind.TEST, classDef); + JavaWriterVisitor visitor = new JavaWriterVisitor(); + gapicClass.classDefinition().accept(visitor); + assertEquals(visitor.write(), EXPECTED_CLASS_STRING_SIMPLE); + } + + @Test + public void gapicClassWithHeader() { + ClassDefinition classDef = + ClassDefinition.builder() + .setPackageString("com.google.showcase.v1beta1.stub") + .setName("EchoStubSettings") + .setScope(ScopeNode.PUBLIC) + .build(); + List gapicClassWithHeaderList = + Composer.addApacheLicense(Arrays.asList(GapicClass.create(Kind.TEST, classDef))); + JavaWriterVisitor visitor = new JavaWriterVisitor(); + gapicClassWithHeaderList.get(0).classDefinition().accept(visitor); + assertEquals(visitor.write(), EXPECTED_CLASS_STRING_WITH_HEADER); + } + + private static final String EXPECTED_CLASS_STRING_SIMPLE = + "package com.google.showcase.v1beta1.stub;\n\n" + + "// This is a test class for file-diff infra\n" + + "public class EchoStubSettings {}\n"; + + private static final String EXPECTED_CLASS_STRING_WITH_HEADER = + "/*\n" + + " * Copyright 2020 Google LLC\n" + + " *\n" + + " * Licensed under the Apache License, Version 2.0 (the \"License\");\n" + + " * you may not use this file except in compliance with the License.\n" + + " * You may obtain a copy of the License at\n" + + " *\n" + + " * https://www.apache.org/licenses/LICENSE-2.0\n" + + " *\n" + + " * Unless required by applicable law or agreed to in writing, software\n" + + " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" + + " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + + " * See the License for the specific language governing permissions and\n" + + " * limitations under the License.\n" + + " */\n\n" + + "package com.google.showcase.v1beta1.stub;\n\n" + + "public class EchoStubSettings {}\n"; +} diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel new file mode 100644 index 0000000000..cf5efe56d1 --- /dev/null +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel @@ -0,0 +1,6 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "goldens_files", + srcs = glob(["*.golden"]), +) \ No newline at end of file diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestClassWithHeader.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestClassWithHeader.golden new file mode 100644 index 0000000000..ad531d6d09 --- /dev/null +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestClassWithHeader.golden @@ -0,0 +1,19 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.showcase.v1beta1.stub; + +public class EchoStubSettings {} diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden new file mode 100644 index 0000000000..0586b32707 --- /dev/null +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden @@ -0,0 +1,4 @@ +package com.google.showcase.v1beta1.stub; + +// This is a test class for file-diff infra +public class EchoStubSettings {} \ No newline at end of file From f42d269ed77fbe645f1d7feb39f7d8bd651d773b Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Tue, 8 Sep 2020 18:34:31 -0700 Subject: [PATCH 03/39] format --- .../api/generator/gapic/composer/FileDiffInfraDummyTest.java | 4 ++-- .../google/api/generator/gapic/composer/goldens/BUILD.bazel | 2 +- .../composer/goldens/FileDiffInfraDummyTestSimpleClass.golden | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java index d1b8628b49..4d5d1bfe95 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java @@ -30,11 +30,11 @@ public class FileDiffInfraDummyTest { // Add two simple tests for testing the file-diff infra. // 1. The two unit tests create simple gapic classes since here is gapic/composer folder. - // 2. Two unit tests are created because we have the case of two expceted strings comparison + // 2. Two unit tests are created because we have the case of two expected strings comparison // in one test class e.g. ResourceNameHelperClassComposer. In that case, two golden files will be // created. // - // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and tested well. + // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and well-tested. @Test public void simpleGapicClass() { ClassDefinition classDef = diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel index cf5efe56d1..85ac1a519e 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel @@ -3,4 +3,4 @@ package(default_visibility = ["//visibility:public"]) filegroup( name = "goldens_files", srcs = glob(["*.golden"]), -) \ No newline at end of file +) diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden b/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden index 0586b32707..82eb2e6b92 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden @@ -1,4 +1,4 @@ package com.google.showcase.v1beta1.stub; // This is a test class for file-diff infra -public class EchoStubSettings {} \ No newline at end of file +public class EchoStubSettings {} From 7224b5ae7e05a489a076659cbaca864802a3c8e8 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 9 Sep 2020 17:32:25 -0700 Subject: [PATCH 04/39] add assertUtils --- .../api/generator/assertUtils/Assert.java | 28 +++++++++++++++++++ .../api/generator/assertUtils/BUILD.bazel | 18 ++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/test/java/com/google/api/generator/assertUtils/Assert.java create mode 100644 src/test/java/com/google/api/generator/assertUtils/BUILD.bazel diff --git a/src/test/java/com/google/api/generator/assertUtils/Assert.java b/src/test/java/com/google/api/generator/assertUtils/Assert.java new file mode 100644 index 0000000000..38f9af17fe --- /dev/null +++ b/src/test/java/com/google/api/generator/assertUtils/Assert.java @@ -0,0 +1,28 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.assertUtils; + +import java.util.List; + +import com.google.api.generator.diff.FileDiffUtils; + +public class Assert { + public void assertCodeEquals(String actualContent, String goldenPath){ + List diffList = FileDiffUtils.diffStringAndFile(actualContent, goldenPath); + if(!diffList.isEmpty()){ + throw new AssertionFailedError("Difference found: " + diffList); + } + } +} diff --git a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel new file mode 100644 index 0000000000..beedb0a82c --- /dev/null +++ b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel @@ -0,0 +1,18 @@ +package(default_visibility = ["//visibility:public"]) +filegroup( + name = "assert_files", + srcs = glob(["*.java"]), +) + +java_library( + name = "assert", + srcs = [ + ":assert_files", + ], + deps = [ + "//src/test/java/com/google/api/generator/diff", + "@com_google_guava_guava//jar", + "@io_github_java_diff_utils//jar", + "@google_java_format_all_deps//jar", + ], +) From 62ddbe614fe7a1679a0d224b9d96dc036bab2ee3 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 9 Sep 2020 17:33:53 -0700 Subject: [PATCH 05/39] format --- src/test/java/com/google/api/generator/assertUtils/BUILD.bazel | 3 ++- src/test/java/com/google/api/generator/diff/BUILD.bazel | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel index beedb0a82c..5fe1e73f4c 100644 --- a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel +++ b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel @@ -1,4 +1,5 @@ package(default_visibility = ["//visibility:public"]) + filegroup( name = "assert_files", srcs = glob(["*.java"]), @@ -12,7 +13,7 @@ java_library( deps = [ "//src/test/java/com/google/api/generator/diff", "@com_google_guava_guava//jar", - "@io_github_java_diff_utils//jar", "@google_java_format_all_deps//jar", + "@io_github_java_diff_utils//jar", ], ) diff --git a/src/test/java/com/google/api/generator/diff/BUILD.bazel b/src/test/java/com/google/api/generator/diff/BUILD.bazel index 8f8badeddb..f723485cc2 100644 --- a/src/test/java/com/google/api/generator/diff/BUILD.bazel +++ b/src/test/java/com/google/api/generator/diff/BUILD.bazel @@ -1,4 +1,5 @@ package(default_visibility = ["//visibility:public"]) + filegroup( name = "diff_files", srcs = glob(["*.java"]), @@ -11,7 +12,7 @@ java_library( ], deps = [ "@com_google_guava_guava//jar", - "@io_github_java_diff_utils//jar", "@google_java_format_all_deps//jar", + "@io_github_java_diff_utils//jar", ], ) From d9fbb0a0976e0dff9286e18711b265b201caf2bd Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 9 Sep 2020 17:52:59 -0700 Subject: [PATCH 06/39] move dummy test to separate folder --- .../google/api/generator/gapic/BUILD.bazel | 1 + .../api/generator/gapic/composer/BUILD.bazel | 1 - .../api/generator/gapic/dummy/BUILD.bazel | 21 ++++++++++++ .../FileDiffInfraDummyTest.java | 34 ++++++++++++------- .../{composer => dummy}/goldens/BUILD.bazel | 0 ...leDiffInfraDummyTestClassWithHeader.golden | 0 .../FileDiffInfraDummyTestSimpleClass.golden | 0 7 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel rename src/test/java/com/google/api/generator/gapic/{composer => dummy}/FileDiffInfraDummyTest.java (74%) rename src/test/java/com/google/api/generator/gapic/{composer => dummy}/goldens/BUILD.bazel (100%) rename src/test/java/com/google/api/generator/gapic/{composer => dummy}/goldens/FileDiffInfraDummyTestClassWithHeader.golden (100%) rename src/test/java/com/google/api/generator/gapic/{composer => dummy}/goldens/FileDiffInfraDummyTestSimpleClass.golden (100%) diff --git a/src/test/java/com/google/api/generator/gapic/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/BUILD.bazel index ef1035d943..7a9cbd0da5 100644 --- a/src/test/java/com/google/api/generator/gapic/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/BUILD.bazel @@ -4,6 +4,7 @@ filegroup( name = "gapic_files", srcs = [ "//src/test/java/com/google/api/generator/gapic/composer:composer_files", + "//src/test/java/com/google/api/generator/gapic/dummy:dummy_files", "//src/test/java/com/google/api/generator/gapic/model:model_files", "//src/test/java/com/google/api/generator/gapic/protoparser:protoparser_files", ], 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 89dd8025b8..740ba1b5f2 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 @@ -14,7 +14,6 @@ TESTS = [ "ServiceSettingsClassComposerTest", "ServiceStubSettingsClassComposerTest", "ServiceStubClassComposerTest", - "FileDiffInfraDummyTest", ] filegroup( diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel new file mode 100644 index 0000000000..84e4febc7a --- /dev/null +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -0,0 +1,21 @@ +package(default_visibility = ["//visibility:public"]) + +TESTS = [ + "FileDiffInfraDummyTest", +] + +filegroup( + name = "dummy_files", + srcs = ["{0}.java".format(f) for f in TESTS], +) + +[java_test( + name = test_name, + srcs = ["{0}.java".format(test_name)], + test_class = "com.google.api.generator.gapic.dummy.{0}".format(test_name), + deps = [ + "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", + "@junit_junit//jar", + ], +) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java similarity index 74% rename from src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java rename to src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 4d5d1bfe95..9dcc0ce252 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -12,31 +12,29 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.api.generator.gapic.composer; +package com.google.api.generator.gapic.dummy; import static junit.framework.Assert.assertEquals; +import com.google.api.generator.engine.ast.BlockComment; import com.google.api.generator.engine.ast.ClassDefinition; import com.google.api.generator.engine.ast.CommentStatement; import com.google.api.generator.engine.ast.LineComment; import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; -import com.google.api.generator.gapic.model.GapicClass; -import com.google.api.generator.gapic.model.GapicClass.Kind; import java.util.Arrays; -import java.util.List; import org.junit.Test; public class FileDiffInfraDummyTest { // Add two simple tests for testing the file-diff infra. - // 1. The two unit tests create simple gapic classes since here is gapic/composer folder. + // 1. The two unit tests create simple java classes. // 2. Two unit tests are created because we have the case of two expected strings comparison // in one test class e.g. ResourceNameHelperClassComposer. In that case, two golden files will be // created. // // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and well-tested. @Test - public void simpleGapicClass() { + public void simpleClass() { ClassDefinition classDef = ClassDefinition.builder() .setHeaderCommentStatements( @@ -47,27 +45,39 @@ public void simpleGapicClass() { .setName("EchoStubSettings") .setScope(ScopeNode.PUBLIC) .build(); - GapicClass gapicClass = GapicClass.create(Kind.TEST, classDef); JavaWriterVisitor visitor = new JavaWriterVisitor(); - gapicClass.classDefinition().accept(visitor); + classDef.accept(visitor); assertEquals(visitor.write(), EXPECTED_CLASS_STRING_SIMPLE); } @Test - public void gapicClassWithHeader() { + public void classWithHeader() { ClassDefinition classDef = ClassDefinition.builder() + .setFileHeader( + Arrays.asList( + CommentStatement.withComment(BlockComment.withComment(APACHE_LICENSE_STRING)))) .setPackageString("com.google.showcase.v1beta1.stub") .setName("EchoStubSettings") .setScope(ScopeNode.PUBLIC) .build(); - List gapicClassWithHeaderList = - Composer.addApacheLicense(Arrays.asList(GapicClass.create(Kind.TEST, classDef))); JavaWriterVisitor visitor = new JavaWriterVisitor(); - gapicClassWithHeaderList.get(0).classDefinition().accept(visitor); + classDef.accept(visitor); assertEquals(visitor.write(), EXPECTED_CLASS_STRING_WITH_HEADER); } + private static final String APACHE_LICENSE_STRING = + "Copyright 2020 Google LLC\n\n" + + "Licensed under the Apache License, Version 2.0 (the \"License\");\n" + + "you may not use this file except in compliance with the License.\n" + + "You may obtain a copy of the License at\n\n" + + " https://www.apache.org/licenses/LICENSE-2.0\n\n" + + "Unless required by applicable law or agreed to in writing, software\n" + + "distributed under the License is distributed on an \"AS IS\" BASIS,\n" + + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + + "See the License for the specific language governing permissions and\n" + + "limitations under the License."; + private static final String EXPECTED_CLASS_STRING_SIMPLE = "package com.google.showcase.v1beta1.stub;\n\n" + "// This is a test class for file-diff infra\n" diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel similarity index 100% rename from src/test/java/com/google/api/generator/gapic/composer/goldens/BUILD.bazel rename to src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestClassWithHeader.golden b/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden similarity index 100% rename from src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestClassWithHeader.golden rename to src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden diff --git a/src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden b/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestSimpleClass.golden similarity index 100% rename from src/test/java/com/google/api/generator/gapic/composer/goldens/FileDiffInfraDummyTestSimpleClass.golden rename to src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestSimpleClass.golden From 0e63a94d0cc618a5be08b1e40c487a97d6d6e1c9 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 9 Sep 2020 18:33:18 -0700 Subject: [PATCH 07/39] add compare strings method in diffUtils --- BUILD.bazel | 3 ++- .../api/generator/assertUtils/Assert.java | 22 ++++++++++------ .../api/generator/assertUtils/BUILD.bazel | 5 ++-- .../generator/{diff => diffUtils}/BUILD.bazel | 2 +- .../{diff => diffUtils}/FileDiffUtils.java | 25 +++++++++++++------ .../google/api/generator/engine/BUILD.bazel | 1 - 6 files changed, 37 insertions(+), 21 deletions(-) rename src/test/java/com/google/api/generator/{diff => diffUtils}/BUILD.bazel (93%) rename src/test/java/com/google/api/generator/{diff => diffUtils}/FileDiffUtils.java (67%) diff --git a/BUILD.bazel b/BUILD.bazel index 67efa50d44..f388b0c117 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -13,7 +13,8 @@ JAVA_SRCS = [ TEST_SRCS = [ "//src/test/java/com/google/api/generator/engine:engine_files", "//src/test/java/com/google/api/generator/gapic:gapic_files", - "//src/test/java/com/google/api/generator/diff:diff_files", + "//src/test/java/com/google/api/generator/diffUtils:diff_files", + "//src/test/java/com/google/api/generator/assertUtils:assert_files", ] # ============= Proto wrappers ================= diff --git a/src/test/java/com/google/api/generator/assertUtils/Assert.java b/src/test/java/com/google/api/generator/assertUtils/Assert.java index 38f9af17fe..10cb63ca8c 100644 --- a/src/test/java/com/google/api/generator/assertUtils/Assert.java +++ b/src/test/java/com/google/api/generator/assertUtils/Assert.java @@ -14,15 +14,23 @@ package com.google.api.generator.assertUtils; +import com.google.api.generator.diffUtils.FileDiffUtils; +import java.nio.file.Path; import java.util.List; - -import com.google.api.generator.diff.FileDiffUtils; +import junit.framework.AssertionFailedError; public class Assert { - public void assertCodeEquals(String actualContent, String goldenPath){ - List diffList = FileDiffUtils.diffStringAndFile(actualContent, goldenPath); - if(!diffList.isEmpty()){ - throw new AssertionFailedError("Difference found: " + diffList); - } + public void assertCodeEquals(Path goldenPath, String codegen) { + List diffList = FileDiffUtils.diffFileAndString(goldenPath, codegen); + if (!diffList.isEmpty()) { + throw new AssertionFailedError("Differences found: " + diffList); + } + } + + public void assertCodeEquals(String expected, String codegen) { + List diffList = FileDiffUtils.diffTwoStrings(expected, codegen); + if (!diffList.isEmpty()) { + throw new AssertionFailedError("Differences found: " + diffList); } + } } diff --git a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel index 5fe1e73f4c..55577e535d 100644 --- a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel +++ b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel @@ -11,9 +11,8 @@ java_library( ":assert_files", ], deps = [ - "//src/test/java/com/google/api/generator/diff", - "@com_google_guava_guava//jar", - "@google_java_format_all_deps//jar", + "//src/test/java/com/google/api/generator/diffUtils", "@io_github_java_diff_utils//jar", + "@junit_junit//jar" ], ) diff --git a/src/test/java/com/google/api/generator/diff/BUILD.bazel b/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel similarity index 93% rename from src/test/java/com/google/api/generator/diff/BUILD.bazel rename to src/test/java/com/google/api/generator/diffUtils/BUILD.bazel index f723485cc2..647520f49f 100644 --- a/src/test/java/com/google/api/generator/diff/BUILD.bazel +++ b/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel @@ -6,7 +6,7 @@ filegroup( ) java_library( - name = "diff", + name = "diffUtils", srcs = [ ":diff_files", ], diff --git a/src/test/java/com/google/api/generator/diff/FileDiffUtils.java b/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java similarity index 67% rename from src/test/java/com/google/api/generator/diff/FileDiffUtils.java rename to src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java index aeb3358fa3..3253061a0d 100644 --- a/src/test/java/com/google/api/generator/diff/FileDiffUtils.java +++ b/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java @@ -12,30 +12,39 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.api.generator.diff; +package com.google.api.generator.diffUtils; import com.github.difflib.DiffUtils; import com.github.difflib.UnifiedDiffUtils; import com.github.difflib.algorithm.DiffException; import com.github.difflib.patch.Patch; -import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.util.Arrays; import java.util.List; public class FileDiffUtils { - public static List diffStringAndFile(String actualContent, String goldenFilePath) { - List original = Arrays.asList(actualContent.split("\\r?\\n")); - List revised = null; - Patch diff = null; + public static List diffFileAndString(Path goldenFilePath, String actualContent) { + List codegen = Arrays.asList(actualContent.split("\\r?\\n")); + List golden = null; try { - revised = Files.readAllLines(new File(goldenFilePath).toPath()); + golden = Files.readAllLines(goldenFilePath); } catch (IOException e) { throw new GoldenFileNotFoundException( String.format("Golden File %s is not found.", goldenFilePath)); } + return diffTwoStringLists(golden, codegen); + } + public static List diffTwoStrings(String expected, String actual) { + List codegen = Arrays.asList(actual.split("\\r?\\n")); + List golden = Arrays.asList(expected.split("\\r?\\n")); + return diffTwoStringLists(golden, codegen); + } + + private static List diffTwoStringLists(List original, List revised) { + Patch diff = null; try { diff = DiffUtils.diff(original, revised); } catch (DiffException e) { @@ -44,7 +53,7 @@ public static List diffStringAndFile(String actualContent, String golden } List unifiedDiff = - UnifiedDiffUtils.generateUnifiedDiff("sample", goldenFilePath, original, diff, 2); + UnifiedDiffUtils.generateUnifiedDiff("codegen", "golden", original, diff, 2); return unifiedDiff; } 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 494c0edcbd..e4cead379e 100644 --- a/src/test/java/com/google/api/generator/engine/BUILD.bazel +++ b/src/test/java/com/google/api/generator/engine/BUILD.bazel @@ -20,7 +20,6 @@ TESTS = [ deps = [ "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", - "//src/test/java/com/google/api/generator/diff", "@junit_junit//jar", ], ) for test_name in TESTS] From 076ef4782cc719ff8c404ba6eb1e4e401eacafae Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 9 Sep 2020 18:35:40 -0700 Subject: [PATCH 08/39] format --- src/test/java/com/google/api/generator/assertUtils/BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel index 55577e535d..cf0e9e2ce2 100644 --- a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel +++ b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel @@ -13,6 +13,6 @@ java_library( deps = [ "//src/test/java/com/google/api/generator/diffUtils", "@io_github_java_diff_utils//jar", - "@junit_junit//jar" + "@junit_junit//jar", ], ) From 25ce9ec92d3b885837f2c34ed47a7ff7b4d76741 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 9 Sep 2020 18:48:49 -0700 Subject: [PATCH 09/39] dummy test pass --- .../api/generator/assertUtils/Assert.java | 8 ++-- .../api/generator/assertUtils/BUILD.bazel | 2 +- .../generator/diffUtils/FileDiffUtils.java | 2 +- .../api/generator/gapic/dummy/BUILD.bazel | 2 + .../gapic/dummy/FileDiffInfraDummyTest.java | 40 ++++++------------- 5 files changed, 20 insertions(+), 34 deletions(-) diff --git a/src/test/java/com/google/api/generator/assertUtils/Assert.java b/src/test/java/com/google/api/generator/assertUtils/Assert.java index 10cb63ca8c..f0176b1f66 100644 --- a/src/test/java/com/google/api/generator/assertUtils/Assert.java +++ b/src/test/java/com/google/api/generator/assertUtils/Assert.java @@ -20,17 +20,17 @@ import junit.framework.AssertionFailedError; public class Assert { - public void assertCodeEquals(Path goldenPath, String codegen) { + public static void assertCodeEquals(Path goldenPath, String codegen) { List diffList = FileDiffUtils.diffFileAndString(goldenPath, codegen); if (!diffList.isEmpty()) { - throw new AssertionFailedError("Differences found: " + diffList); + throw new AssertionFailedError("Differences found: \n" + String.join("\n", diffList)); } } - public void assertCodeEquals(String expected, String codegen) { + public static void assertCodeEquals(String expected, String codegen) { List diffList = FileDiffUtils.diffTwoStrings(expected, codegen); if (!diffList.isEmpty()) { - throw new AssertionFailedError("Differences found: " + diffList); + throw new AssertionFailedError("Differences found: \n" + String.join("\n", diffList)); } } } diff --git a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel index cf0e9e2ce2..879f62f456 100644 --- a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel +++ b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel @@ -6,7 +6,7 @@ filegroup( ) java_library( - name = "assert", + name = "assertUtils", srcs = [ ":assert_files", ], diff --git a/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java b/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java index 3253061a0d..9c54597ee6 100644 --- a/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java +++ b/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java @@ -53,7 +53,7 @@ private static List diffTwoStringLists(List original, List unifiedDiff = - UnifiedDiffUtils.generateUnifiedDiff("codegen", "golden", original, diff, 2); + UnifiedDiffUtils.generateUnifiedDiff("golden", "codegen", original, diff, 2); return unifiedDiff; } diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 84e4febc7a..5bdcaa854f 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -12,10 +12,12 @@ filegroup( [java_test( name = test_name, srcs = ["{0}.java".format(test_name)], + data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], test_class = "com.google.api.generator.gapic.dummy.{0}".format(test_name), deps = [ "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", + "//src/test/java/com/google/api/generator/assertUtils", "@junit_junit//jar", ], ) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 9dcc0ce252..32cfd17cd0 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -14,14 +14,15 @@ package com.google.api.generator.gapic.dummy; -import static junit.framework.Assert.assertEquals; - +import com.google.api.generator.assertUtils.Assert; import com.google.api.generator.engine.ast.BlockComment; import com.google.api.generator.engine.ast.ClassDefinition; import com.google.api.generator.engine.ast.CommentStatement; import com.google.api.generator.engine.ast.LineComment; import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import org.junit.Test; @@ -47,7 +48,9 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - assertEquals(visitor.write(), EXPECTED_CLASS_STRING_SIMPLE); + Path goldeFilePath = + Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); + Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @Test @@ -63,9 +66,14 @@ public void classWithHeader() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - assertEquals(visitor.write(), EXPECTED_CLASS_STRING_WITH_HEADER); + Path goldeFilePath = + Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); + Assert.assertCodeEquals(goldeFilePath, visitor.write()); } + private static final String GOLDENFILES_DIRECTORY = + "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; + private static final String APACHE_LICENSE_STRING = "Copyright 2020 Google LLC\n\n" + "Licensed under the Apache License, Version 2.0 (the \"License\");\n" @@ -77,28 +85,4 @@ public void classWithHeader() { + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + "See the License for the specific language governing permissions and\n" + "limitations under the License."; - - private static final String EXPECTED_CLASS_STRING_SIMPLE = - "package com.google.showcase.v1beta1.stub;\n\n" - + "// This is a test class for file-diff infra\n" - + "public class EchoStubSettings {}\n"; - - private static final String EXPECTED_CLASS_STRING_WITH_HEADER = - "/*\n" - + " * Copyright 2020 Google LLC\n" - + " *\n" - + " * Licensed under the Apache License, Version 2.0 (the \"License\");\n" - + " * you may not use this file except in compliance with the License.\n" - + " * You may obtain a copy of the License at\n" - + " *\n" - + " * https://www.apache.org/licenses/LICENSE-2.0\n" - + " *\n" - + " * Unless required by applicable law or agreed to in writing, software\n" - + " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" - + " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" - + " * See the License for the specific language governing permissions and\n" - + " * limitations under the License.\n" - + " */\n\n" - + "package com.google.showcase.v1beta1.stub;\n\n" - + "public class EchoStubSettings {}\n"; } From 6f54239d02b167f9cab9a668f93850ee336f4325 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 10 Sep 2020 11:32:53 -0700 Subject: [PATCH 10/39] reformat --- .../api/generator/diffUtils/BUILD.bazel | 2 -- .../generator/diffUtils/FileDiffUtils.java | 34 +++++++++---------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel b/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel index 647520f49f..536be7db52 100644 --- a/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel +++ b/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel @@ -11,8 +11,6 @@ java_library( ":diff_files", ], deps = [ - "@com_google_guava_guava//jar", - "@google_java_format_all_deps//jar", "@io_github_java_diff_utils//jar", ], ) diff --git a/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java b/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java index 9c54597ee6..8382f38d5d 100644 --- a/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java +++ b/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java @@ -25,22 +25,22 @@ import java.util.List; public class FileDiffUtils { - public static List diffFileAndString(Path goldenFilePath, String actualContent) { - List codegen = Arrays.asList(actualContent.split("\\r?\\n")); - List golden = null; + public static List diffFileAndString(Path goldenFilePath, String codegen) { + List revised = Arrays.asList(codegen.split("\\r?\\n")); + List original = null; try { - golden = Files.readAllLines(goldenFilePath); + original = Files.readAllLines(goldenFilePath); } catch (IOException e) { - throw new GoldenFileNotFoundException( - String.format("Golden File %s is not found.", goldenFilePath)); + throw new GoldenFileReadException( + String.format("Error occurs when reading golden file %s", goldenFilePath)); } - return diffTwoStringLists(golden, codegen); + return diffTwoStringLists(original, revised); } - public static List diffTwoStrings(String expected, String actual) { - List codegen = Arrays.asList(actual.split("\\r?\\n")); - List golden = Arrays.asList(expected.split("\\r?\\n")); - return diffTwoStringLists(golden, codegen); + public static List diffTwoStrings(String expectedStr, String actualStr) { + List revised = Arrays.asList(actualStr.split("\\r?\\n")); + List original = Arrays.asList(expectedStr.split("\\r?\\n")); + return diffTwoStringLists(original, revised); } private static List diffTwoStringLists(List original, List revised) { @@ -48,23 +48,21 @@ private static List diffTwoStringLists(List original, List unifiedDiff = UnifiedDiffUtils.generateUnifiedDiff("golden", "codegen", original, diff, 2); return unifiedDiff; } - private static class GoldenFileNotFoundException extends RuntimeException { - public GoldenFileNotFoundException(String errorMessage) { + private static class GoldenFileReadException extends RuntimeException { + public GoldenFileReadException(String errorMessage) { super(errorMessage); } } - private static class FileDiffException extends RuntimeException { - public FileDiffException(String errorMessage) { + private static class ComputeDiffException extends RuntimeException { + public ComputeDiffException(String errorMessage) { super(errorMessage); } } From e3563b9fc9178bc3d5411a3c761e8dfe1b0428f4 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 10 Sep 2020 15:15:13 -0700 Subject: [PATCH 11/39] add simple strings comparison --- .../generator/gapic/dummy/FileDiffInfraDummyTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 32cfd17cd0..d5c549205e 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -71,6 +71,15 @@ public void classWithHeader() { Assert.assertCodeEquals(goldeFilePath, visitor.write()); } + // Add a simple test for two strings comparison. + @Test + public void simpleLineComment() { + JavaWriterVisitor visitor = new JavaWriterVisitor(); + LineComment lineComment = LineComment.withComment("test strings comparison."); + lineComment.accept(visitor); + Assert.assertCodeEquals("// test strings comparison.", visitor.write()); + } + private static final String GOLDENFILES_DIRECTORY = "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; From 2ff169ecf6bedcad5b8ea22e7c740997e40aade2 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 10 Sep 2020 18:03:20 -0700 Subject: [PATCH 12/39] add java_diff_test bzl --- rules_bazel/java/java_diff_test.bzl | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rules_bazel/java/java_diff_test.bzl diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl new file mode 100644 index 0000000000..e69de29bb2 From 7cc821976c381f5c1b1bf826e208682edd13d050 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 10 Sep 2020 18:13:54 -0700 Subject: [PATCH 13/39] group test framework helpers together --- BUILD.bazel | 3 +-- .../api/generator/assertUtils/BUILD.bazel | 18 ------------------ .../api/generator/gapic/dummy/BUILD.bazel | 2 +- .../gapic/dummy/FileDiffInfraDummyTest.java | 2 +- .../framework}/Assert.java | 7 +++---- .../{diffUtils => test/framework}/BUILD.bazel | 7 ++++--- .../framework/Differ.java} | 8 ++++---- 7 files changed, 14 insertions(+), 33 deletions(-) delete mode 100644 src/test/java/com/google/api/generator/assertUtils/BUILD.bazel rename src/test/java/com/google/api/generator/{assertUtils => test/framework}/Assert.java (81%) rename src/test/java/com/google/api/generator/{diffUtils => test/framework}/BUILD.bazel (63%) rename src/test/java/com/google/api/generator/{diffUtils/FileDiffUtils.java => test/framework/Differ.java} (90%) diff --git a/BUILD.bazel b/BUILD.bazel index f388b0c117..d66632c2cd 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -13,8 +13,7 @@ JAVA_SRCS = [ TEST_SRCS = [ "//src/test/java/com/google/api/generator/engine:engine_files", "//src/test/java/com/google/api/generator/gapic:gapic_files", - "//src/test/java/com/google/api/generator/diffUtils:diff_files", - "//src/test/java/com/google/api/generator/assertUtils:assert_files", + "//src/test/java/com/google/api/generator/test/framework:framework_files", ] # ============= Proto wrappers ================= diff --git a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel b/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel deleted file mode 100644 index 879f62f456..0000000000 --- a/src/test/java/com/google/api/generator/assertUtils/BUILD.bazel +++ /dev/null @@ -1,18 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "assert_files", - srcs = glob(["*.java"]), -) - -java_library( - name = "assertUtils", - srcs = [ - ":assert_files", - ], - deps = [ - "//src/test/java/com/google/api/generator/diffUtils", - "@io_github_java_diff_utils//jar", - "@junit_junit//jar", - ], -) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 5bdcaa854f..ace0cd26f4 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -17,7 +17,7 @@ filegroup( deps = [ "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", - "//src/test/java/com/google/api/generator/assertUtils", + "//src/test/java/com/google/api/generator/test/framework", "@junit_junit//jar", ], ) for test_name in TESTS] diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index d5c549205e..d59baf49b6 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -14,13 +14,13 @@ package com.google.api.generator.gapic.dummy; -import com.google.api.generator.assertUtils.Assert; import com.google.api.generator.engine.ast.BlockComment; import com.google.api.generator.engine.ast.ClassDefinition; import com.google.api.generator.engine.ast.CommentStatement; import com.google.api.generator.engine.ast.LineComment; import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; +import com.google.api.generator.test.framework.Assert; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; diff --git a/src/test/java/com/google/api/generator/assertUtils/Assert.java b/src/test/java/com/google/api/generator/test/framework/Assert.java similarity index 81% rename from src/test/java/com/google/api/generator/assertUtils/Assert.java rename to src/test/java/com/google/api/generator/test/framework/Assert.java index f0176b1f66..0f30c8ba9d 100644 --- a/src/test/java/com/google/api/generator/assertUtils/Assert.java +++ b/src/test/java/com/google/api/generator/test/framework/Assert.java @@ -12,23 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.api.generator.assertUtils; +package com.google.api.generator.test.framework; -import com.google.api.generator.diffUtils.FileDiffUtils; import java.nio.file.Path; import java.util.List; import junit.framework.AssertionFailedError; public class Assert { public static void assertCodeEquals(Path goldenPath, String codegen) { - List diffList = FileDiffUtils.diffFileAndString(goldenPath, codegen); + List diffList = Differ.diff(goldenPath, codegen); if (!diffList.isEmpty()) { throw new AssertionFailedError("Differences found: \n" + String.join("\n", diffList)); } } public static void assertCodeEquals(String expected, String codegen) { - List diffList = FileDiffUtils.diffTwoStrings(expected, codegen); + List diffList = Differ.diff(expected, codegen); if (!diffList.isEmpty()) { throw new AssertionFailedError("Differences found: \n" + String.join("\n", diffList)); } diff --git a/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel b/src/test/java/com/google/api/generator/test/framework/BUILD.bazel similarity index 63% rename from src/test/java/com/google/api/generator/diffUtils/BUILD.bazel rename to src/test/java/com/google/api/generator/test/framework/BUILD.bazel index 536be7db52..8cdc676778 100644 --- a/src/test/java/com/google/api/generator/diffUtils/BUILD.bazel +++ b/src/test/java/com/google/api/generator/test/framework/BUILD.bazel @@ -1,16 +1,17 @@ package(default_visibility = ["//visibility:public"]) filegroup( - name = "diff_files", + name = "framework_files", srcs = glob(["*.java"]), ) java_library( - name = "diffUtils", + name = "framework", srcs = [ - ":diff_files", + ":framework_files", ], deps = [ "@io_github_java_diff_utils//jar", + "@junit_junit//jar", ], ) diff --git a/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java b/src/test/java/com/google/api/generator/test/framework/Differ.java similarity index 90% rename from src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java rename to src/test/java/com/google/api/generator/test/framework/Differ.java index 8382f38d5d..7f4879d130 100644 --- a/src/test/java/com/google/api/generator/diffUtils/FileDiffUtils.java +++ b/src/test/java/com/google/api/generator/test/framework/Differ.java @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.api.generator.diffUtils; +package com.google.api.generator.test.framework; import com.github.difflib.DiffUtils; import com.github.difflib.UnifiedDiffUtils; @@ -24,8 +24,8 @@ import java.util.Arrays; import java.util.List; -public class FileDiffUtils { - public static List diffFileAndString(Path goldenFilePath, String codegen) { +public class Differ { + public static List diff(Path goldenFilePath, String codegen) { List revised = Arrays.asList(codegen.split("\\r?\\n")); List original = null; try { @@ -37,7 +37,7 @@ public static List diffFileAndString(Path goldenFilePath, String codegen return diffTwoStringLists(original, revised); } - public static List diffTwoStrings(String expectedStr, String actualStr) { + public static List diff(String expectedStr, String actualStr) { List revised = Arrays.asList(actualStr.split("\\r?\\n")); List original = Arrays.asList(expectedStr.split("\\r?\\n")); return diffTwoStringLists(original, revised); From 2fce32e4b857bd72ed8a79e0c0974da412214925 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Fri, 11 Sep 2020 19:52:08 -0700 Subject: [PATCH 14/39] run testRunner --- rules_bazel/java/java_diff_test.bzl | 10 +++++++ .../api/generator/test/framework/BUILD.bazel | 24 +++++++++++++++ .../test/framework/SingleJUnitTestRunner.java | 29 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 src/test/java/com/google/api/generator/test/framework/SingleJUnitTestRunner.java diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index e69de29bb2..7f02a69d7e 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -0,0 +1,10 @@ +def run_single_JUnit(name, srcs, tool): + native.genrule( + name = name, + outs = ["%s.sh" % name], + srcs = srcs, + cmd = "echo ' $(location %s)' > $@" % tool, + executable = True, + tools = [tool], + local = 1, + ) \ No newline at end of file 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 8cdc676778..3022a35785 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 @@ -15,3 +15,27 @@ java_library( "@junit_junit//jar", ], ) + +load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") + +# run_single_junit +java_binary( + name = "run_single_junit_binary", + jvm_flags = ["-Xmx512m"], + srcs = [":framework_files"], + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + visibility = ["//visibility:public"], + runtime_deps = ["@junit_junit//jar", "@io_github_java_diff_utils//jar"], + deps = [ + ":framework", + "@junit_junit//jar", + "@io_github_java_diff_utils//jar", + ], +) + + +run_single_JUnit( + name = "ComposerTest_JUnit", + srcs = [":framework_files"], + tool = "//src/test/java/com/google/api/generator/test/framework:run_single_junit_binary", +) 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 new file mode 100644 index 0000000000..951f048e22 --- /dev/null +++ b/src/test/java/com/google/api/generator/test/framework/SingleJUnitTestRunner.java @@ -0,0 +1,29 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.test.framework; + +public class SingleJUnitTestRunner { + // public static void main(String... args) throws ClassNotFoundException { + // String className = args[0]; + // Request request = Request.aClass(Class.forName(className)); + + // Result result = new JUnitCore().run(request); + // System.exit(result.wasSuccessful() ? 0 : 1); + // } + + public static void main(String... args) { + System.out.println("Hello, you are almost there!"); + } +} From 306eb837c4930c684e8a961e4929dd3ccf8c374b Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Fri, 11 Sep 2020 19:55:16 -0700 Subject: [PATCH 15/39] format --- .../api/generator/test/framework/BUILD.bazel | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) 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 3022a35785..74a02fae99 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 @@ -1,3 +1,5 @@ +load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") + package(default_visibility = ["//visibility:public"]) filegroup( @@ -16,24 +18,24 @@ java_library( ], ) -load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") - # run_single_junit java_binary( name = "run_single_junit_binary", - jvm_flags = ["-Xmx512m"], srcs = [":framework_files"], + jvm_flags = ["-Xmx512m"], main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", visibility = ["//visibility:public"], - runtime_deps = ["@junit_junit//jar", "@io_github_java_diff_utils//jar"], + runtime_deps = [ + "@io_github_java_diff_utils//jar", + "@junit_junit//jar", + ], deps = [ ":framework", - "@junit_junit//jar", "@io_github_java_diff_utils//jar", + "@junit_junit//jar", ], ) - run_single_JUnit( name = "ComposerTest_JUnit", srcs = [":framework_files"], From 53da6c4abca39a95bfa368b9a839d1ad605907b6 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Sun, 13 Sep 2020 16:05:04 -0700 Subject: [PATCH 16/39] run single JUnit test and save output --- rules_bazel/java/java_diff_test.bzl | 4 +- .../api/generator/gapic/dummy/BUILD.bazel | 41 +++++++++++++++++++ .../gapic/dummy/FileDiffInfraDummyTest.java | 26 ++++++++++++ .../test/framework/SingleJUnitTestRunner.java | 18 ++++---- 4 files changed, 78 insertions(+), 11 deletions(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 7f02a69d7e..54866a1ac2 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -1,10 +1,10 @@ def run_single_JUnit(name, srcs, tool): native.genrule( name = name, - outs = ["%s.sh" % name], + outs = ["%s.zip" % name], srcs = srcs, cmd = "echo ' $(location %s)' > $@" % tool, executable = True, tools = [tool], local = 1, - ) \ No newline at end of file + ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index ace0cd26f4..baf5c3e7eb 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -9,6 +9,20 @@ filegroup( srcs = ["{0}.java".format(f) for f in TESTS], ) +java_library( + name = "dummy", + srcs = [ + ":dummy_files", + ], + deps = [ + "@io_github_java_diff_utils//jar", + "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", + "//src/test/java/com/google/api/generator/test/framework", + "@junit_junit//jar", + ], +) + [java_test( name = test_name, srcs = ["{0}.java".format(test_name)], @@ -21,3 +35,30 @@ filegroup( "@junit_junit//jar", ], ) for test_name in TESTS] + +load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") + +# run_single_junit +java_binary( + name = "run_single_junit_binary", + srcs = [ + "//src/test/java/com/google/api/generator/test/framework:framework_files", + ":dummy_files", + ], + jvm_flags = ["-Xmx512m"], + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + visibility = ["//visibility:public"], + deps = [ + "@io_github_java_diff_utils//jar", + "@junit_junit//jar", + "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", + "//src/test/java/com/google/api/generator/test/framework", + ], +) + +run_single_JUnit( + name = "DummyTest_JUnit", + srcs = ["//src/test/java/com/google/api/generator/test/framework:framework_files"], + tool = "//src/test/java/com/google/api/generator/gapic/dummy:run_single_junit_binary", +) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index d59baf49b6..0f0e91b2fe 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -21,6 +21,9 @@ import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; import com.google.api.generator.test.framework.Assert; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -50,6 +53,7 @@ public void simpleClass() { classDef.accept(visitor); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); + saveCodegenToFile(visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @@ -68,6 +72,7 @@ public void classWithHeader() { classDef.accept(visitor); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); + saveCodegenToFile(visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @@ -77,9 +82,12 @@ public void simpleLineComment() { JavaWriterVisitor visitor = new JavaWriterVisitor(); LineComment lineComment = LineComment.withComment("test strings comparison."); lineComment.accept(visitor); + saveCodegenToFile(visitor.write()); Assert.assertCodeEquals("// test strings comparison.", visitor.write()); } + private static final String TEST_CLASS_NAME = "FileDiffInfraDummyTest"; + private static final String GOLDENFILES_DIRECTORY = "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; @@ -94,4 +102,22 @@ public void simpleLineComment() { + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + "See the License for the specific language governing permissions and\n" + "limitations under the License."; + + private static void saveCodegenToFile(String codegen) { + try { + File myObj = new File(TEST_CLASS_NAME + ".output"); + if (myObj.createNewFile()) { + System.out.println("File created: " + myObj.getName()); + } else { + System.out.println("File already exists."); + } + FileWriter myWriter = new FileWriter(TEST_CLASS_NAME + ".output"); + myWriter.write(codegen); + myWriter.close(); + System.out.println("Successfully wrote to the file."); + } catch (IOException e) { + System.out.println("An File creation error occurred."); + e.printStackTrace(); + } + } } 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 951f048e22..ae97ca2d13 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 @@ -14,16 +14,16 @@ package com.google.api.generator.test.framework; -public class SingleJUnitTestRunner { - // public static void main(String... args) throws ClassNotFoundException { - // String className = args[0]; - // Request request = Request.aClass(Class.forName(className)); +import org.junit.runner.JUnitCore; +import org.junit.runner.Request; +import org.junit.runner.Result; - // Result result = new JUnitCore().run(request); - // System.exit(result.wasSuccessful() ? 0 : 1); - // } +public class SingleJUnitTestRunner { + public static void main(String... args) throws ClassNotFoundException { + String className = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"; + Request request = Request.aClass(Class.forName(className)); - public static void main(String... args) { - System.out.println("Hello, you are almost there!"); + Result result = new JUnitCore().run(request); + System.exit(result.wasSuccessful() ? 0 : 1); } } From 509746b782942194e9987da636c89d62d7b94413 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Mon, 14 Sep 2020 17:20:17 -0700 Subject: [PATCH 17/39] add copy of golden --- rules_bazel/java/java_diff_test.bzl | 7 ++++-- .../generator/gapic/dummy/goldens/BUILD.bazel | 7 ++++++ .../api/generator/test/framework/BUILD.bazel | 24 ------------------- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 54866a1ac2..9b27d125e7 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -1,9 +1,12 @@ def run_single_JUnit(name, srcs, tool): + print(name) + output = "%s.zip" % name + print(output) native.genrule( name = name, - outs = ["%s.zip" % name], + outs = [output], srcs = srcs, - cmd = "echo ' $(location %s)' > $@" % tool, + cmd = "echo ' $(location %s)' > $@" % output, executable = True, tools = [tool], local = 1, diff --git a/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel index 85ac1a519e..117729c577 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel @@ -4,3 +4,10 @@ filegroup( name = "goldens_files", srcs = glob(["*.golden"]), ) + +genrule( + name = "copy_of_golden", + srcs = ["FileDiffInfraDummyTestClassWithHeader.golden"], + outs = ["copy_of_golden.golden"], + cmd = "cp $< $@", +) \ No newline at end of file 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 74a02fae99..92d998de81 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 @@ -17,27 +17,3 @@ java_library( "@junit_junit//jar", ], ) - -# run_single_junit -java_binary( - name = "run_single_junit_binary", - srcs = [":framework_files"], - jvm_flags = ["-Xmx512m"], - main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", - visibility = ["//visibility:public"], - runtime_deps = [ - "@io_github_java_diff_utils//jar", - "@junit_junit//jar", - ], - deps = [ - ":framework", - "@io_github_java_diff_utils//jar", - "@junit_junit//jar", - ], -) - -run_single_JUnit( - name = "ComposerTest_JUnit", - srcs = [":framework_files"], - tool = "//src/test/java/com/google/api/generator/test/framework:run_single_junit_binary", -) From 20b3b1f9191472a93f7868c6cbad00ec679873c5 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Mon, 14 Sep 2020 17:26:51 -0700 Subject: [PATCH 18/39] format --- .../com/google/api/generator/gapic/dummy/BUILD.bazel | 12 ++++++------ .../api/generator/gapic/dummy/goldens/BUILD.bazel | 10 +++++----- .../google/api/generator/test/framework/BUILD.bazel | 2 -- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index baf5c3e7eb..90b0c54028 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -1,3 +1,5 @@ +load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") + package(default_visibility = ["//visibility:public"]) TESTS = [ @@ -15,10 +17,10 @@ java_library( ":dummy_files", ], deps = [ - "@io_github_java_diff_utils//jar", "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", "//src/test/java/com/google/api/generator/test/framework", + "@io_github_java_diff_utils//jar", "@junit_junit//jar", ], ) @@ -36,24 +38,22 @@ java_library( ], ) for test_name in TESTS] -load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") - # run_single_junit java_binary( name = "run_single_junit_binary", srcs = [ - "//src/test/java/com/google/api/generator/test/framework:framework_files", ":dummy_files", + "//src/test/java/com/google/api/generator/test/framework:framework_files", ], jvm_flags = ["-Xmx512m"], main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", visibility = ["//visibility:public"], deps = [ - "@io_github_java_diff_utils//jar", - "@junit_junit//jar", "//src/main/java/com/google/api/generator/engine/ast", "//src/main/java/com/google/api/generator/engine/writer", "//src/test/java/com/google/api/generator/test/framework", + "@io_github_java_diff_utils//jar", + "@junit_junit//jar", ], ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel index 117729c577..a2d2ff5daa 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel @@ -6,8 +6,8 @@ filegroup( ) genrule( - name = "copy_of_golden", - srcs = ["FileDiffInfraDummyTestClassWithHeader.golden"], - outs = ["copy_of_golden.golden"], - cmd = "cp $< $@", -) \ No newline at end of file + name = "copy_of_golden", + srcs = ["FileDiffInfraDummyTestClassWithHeader.golden"], + outs = ["copy_of_golden.golden"], + cmd = "cp $< $@", +) 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 92d998de81..8cdc676778 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 @@ -1,5 +1,3 @@ -load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") - package(default_visibility = ["//visibility:public"]) filegroup( From 3af8ba798769424f3b003c299d11ca11a9625b1b Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 16 Sep 2020 09:15:36 -0700 Subject: [PATCH 19/39] working pipeline --- dependencies.properties | 1 + rules_bazel/java/java_diff_test.bzl | 49 ++++++++++++++---- .../api/generator/gapic/dummy/BUILD.bazel | 10 ++-- .../gapic/dummy/FileDiffInfraDummyTest.java | 51 ++++++++++++------- ...leDiffInfraDummyTestClassWithHeader.golden | 2 +- .../api/generator/test/framework/BUILD.bazel | 2 + .../test/framework/SingleJUnitTestRunner.java | 22 ++++++-- 7 files changed, 98 insertions(+), 39 deletions(-) diff --git a/dependencies.properties b/dependencies.properties index aad3ef747f..06ec533a58 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -31,5 +31,6 @@ maven.org_threeten_threetenbp=org.threeten:threetenbp:1.3.3 # Testing. maven.junit_junit=junit:junit:4.13 +maven.org_hamcrest_hamcrest_core=org.hamcrest:hamcrest-core:1.3 maven.org_mockito_mockito_core=org.mockito:mockito-core:2.21.0 maven.com_google_truth_truth=com.google.truth:truth:0.42 diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 9b27d125e7..e921f94793 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -1,13 +1,42 @@ -def run_single_JUnit(name, srcs, tool): - print(name) - output = "%s.zip" % name - print(output) - native.genrule( +def _test_srcjar_impl(ctx): + print("=========== label name:") + print(ctx.attr.test_class_name) + test_class_name = ctx.attr.test_class_name + arguments = [] + inputs = ctx.files.srcs + attr = ctx.attr + test_runner = ctx.executable.test_runner + ctx.actions.run( + inputs = inputs, + outputs = [ctx.outputs.output], + arguments = arguments + ["%s" % test_class_name] + ["true"], + progress_message = "%s: `%s %s`" % (ctx.label, test_runner.path, " ".join(arguments)), + executable = test_runner, + ) + +test_srcjar = rule( + attrs = { + "test_class_name": attr.string(mandatory=True), + "srcs": attr.label_list( + allow_files = True, + mandatory = True, + ), + "test_runner": attr.label( + default = Label("//src/test/java/com/google/api/generator/gapic/dummy:run_single_junit_binary"), + executable = True, + cfg = "host", + ), + "output_suffix": attr.string(mandatory = False, default = ".testoutput.zip"), + }, + outputs = { + "output": "%{name}%{output_suffix}", + }, + implementation = _test_srcjar_impl, +) + +def run_single_junit(name, test_class_name, srcs): + test_srcjar( name = name, - outs = [output], + test_class_name = test_class_name, srcs = srcs, - cmd = "echo ' $(location %s)' > $@" % output, - executable = True, - tools = [tool], - local = 1, ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 90b0c54028..dd21d95482 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -1,5 +1,3 @@ -load("//:rules_bazel/java/java_diff_test.bzl", "run_single_JUnit") - package(default_visibility = ["//visibility:public"]) TESTS = [ @@ -45,6 +43,8 @@ java_binary( ":dummy_files", "//src/test/java/com/google/api/generator/test/framework:framework_files", ], + data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], + args = ["com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest", "true"], jvm_flags = ["-Xmx512m"], main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", visibility = ["//visibility:public"], @@ -54,11 +54,7 @@ java_binary( "//src/test/java/com/google/api/generator/test/framework", "@io_github_java_diff_utils//jar", "@junit_junit//jar", + "@org_hamcrest_hamcrest_core//jar", ], ) -run_single_JUnit( - name = "DummyTest_JUnit", - srcs = ["//src/test/java/com/google/api/generator/test/framework:framework_files"], - tool = "//src/test/java/com/google/api/generator/gapic/dummy:run_single_junit_binary", -) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 0f0e91b2fe..868da5c194 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -24,6 +24,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -37,8 +38,16 @@ public class FileDiffInfraDummyTest { // created. // // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and well-tested. + + private static final String GOLDENFILES_DIRECTORY = + "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; + private static final String TEST_CLASS_NAME = + "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"; + private static final boolean UPDATE_GOLDEN = getProperty(); + @Test public void simpleClass() { + System.out.println("Running simple class"); ClassDefinition classDef = ClassDefinition.builder() .setHeaderCommentStatements( @@ -53,12 +62,14 @@ public void simpleClass() { classDef.accept(visitor); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); - saveCodegenToFile(visitor.write()); + System.out.println("update golden? " + UPDATE_GOLDEN); + updateGoldenFile(goldeFilePath, visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @Test public void classWithHeader() { + System.out.println("Running class with header test"); ClassDefinition classDef = ClassDefinition.builder() .setFileHeader( @@ -72,24 +83,29 @@ public void classWithHeader() { classDef.accept(visitor); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); - saveCodegenToFile(visitor.write()); + updateGoldenFile(goldeFilePath, visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } // Add a simple test for two strings comparison. @Test public void simpleLineComment() { + System.out.println("Running simple line comment test."); JavaWriterVisitor visitor = new JavaWriterVisitor(); LineComment lineComment = LineComment.withComment("test strings comparison."); lineComment.accept(visitor); - saveCodegenToFile(visitor.write()); Assert.assertCodeEquals("// test strings comparison.", visitor.write()); } - private static final String TEST_CLASS_NAME = "FileDiffInfraDummyTest"; - - private static final String GOLDENFILES_DIRECTORY = - "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; + private static boolean getProperty() { + // System.setProperty(TEST_CLASS_NAME + ".update_golden", "true"); + String property = System.getProperty(TEST_CLASS_NAME + ".update_golden"); + System.out.println("property: " + property); + if (property != null) { + return property.equals("true"); + } + return false; + } private static final String APACHE_LICENSE_STRING = "Copyright 2020 Google LLC\n\n" @@ -103,21 +119,22 @@ public void simpleLineComment() { + "See the License for the specific language governing permissions and\n" + "limitations under the License."; - private static void saveCodegenToFile(String codegen) { + private static void updateGoldenFile(Path goldenFilePath, String codegen) { + System.out.println("updating golden file: " + goldenFilePath.toString()); + File goldenFile = goldenFilePath.toFile(); + FileWriter myWriter = null; try { - File myObj = new File(TEST_CLASS_NAME + ".output"); - if (myObj.createNewFile()) { - System.out.println("File created: " + myObj.getName()); - } else { - System.out.println("File already exists."); + if (Files.exists(goldenFilePath.toAbsolutePath())) { + System.out.println("golden file exists !"); + goldenFile.delete(); } - FileWriter myWriter = new FileWriter(TEST_CLASS_NAME + ".output"); + goldenFile.createNewFile(); + myWriter = new FileWriter(goldenFile, false); myWriter.write(codegen); + myWriter.flush(); myWriter.close(); - System.out.println("Successfully wrote to the file."); } catch (IOException e) { - System.out.println("An File creation error occurred."); - e.printStackTrace(); + System.out.println("A File creation error occurred." + e); } } } diff --git a/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden b/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden index ad531d6d09..f39fd15890 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden +++ b/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden @@ -16,4 +16,4 @@ package com.google.showcase.v1beta1.stub; -public class EchoStubSettings {} +public class EchoStubSettings 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 8cdc676778..31b6d7d6f7 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 @@ -10,8 +10,10 @@ java_library( srcs = [ ":framework_files", ], + data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], deps = [ "@io_github_java_diff_utils//jar", "@junit_junit//jar", + "@org_hamcrest_hamcrest_core//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 ae97ca2d13..1829af9379 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 @@ -19,11 +19,25 @@ import org.junit.runner.Result; public class SingleJUnitTestRunner { - public static void main(String... args) throws ClassNotFoundException { - String className = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"; - Request request = Request.aClass(Class.forName(className)); - + public static void main(String... args) { + String className = args[0]; + boolean update_golden = args[1].equals("true"); + System.setProperty(className + ".update_golden", "true"); + Class clazz = null; + try { + clazz = Class.forName(className); + } catch (ClassNotFoundException e) { + System.out.println("Class not found " + e); + System.exit(1); + } + System.out.println("class created : " + clazz); + Request request = Request.aClass(clazz); + System.out.println("request created : " + request); Result result = new JUnitCore().run(request); + System.out.println("Hey test successful ? " + result.wasSuccessful()); + System.out.println("Test result " + result.getFailures()); + System.setProperty(className + ".update_golden", "false"); + System.out.println("property reset : " + System.getProperty(className + ".update_golden")); System.exit(result.wasSuccessful() ? 0 : 1); } } From 9e438addc5a57aba4beb856ffaa37b243e5bfefb Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 16 Sep 2020 09:19:22 -0700 Subject: [PATCH 20/39] format --- .../java/com/google/api/generator/gapic/dummy/BUILD.bazel | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index dd21d95482..65a8d8a96b 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -43,8 +43,11 @@ java_binary( ":dummy_files", "//src/test/java/com/google/api/generator/test/framework:framework_files", ], + args = [ + "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest", + "true", + ], data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], - args = ["com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest", "true"], jvm_flags = ["-Xmx512m"], main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", visibility = ["//visibility:public"], @@ -57,4 +60,3 @@ java_binary( "@org_hamcrest_hamcrest_core//jar", ], ) - From 4c542c73526f9ef60f90398b5282b06ab8db291a Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 16 Sep 2020 09:35:38 -0700 Subject: [PATCH 21/39] clean up --- .../gapic/dummy/FileDiffInfraDummyTest.java | 34 +++---------- .../test/framework/SingleJUnitTestRunner.java | 6 --- .../api/generator/test/framework/Utils.java | 51 +++++++++++++++++++ 3 files changed, 57 insertions(+), 34 deletions(-) create mode 100644 src/test/java/com/google/api/generator/test/framework/Utils.java diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 868da5c194..5ee2d2c624 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -21,10 +21,7 @@ import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; import com.google.api.generator.test.framework.Assert; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Files; +import com.google.api.generator.test.framework.Utils; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -43,7 +40,8 @@ public class FileDiffInfraDummyTest { "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; private static final String TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"; - private static final boolean UPDATE_GOLDEN = getProperty(); + private static final boolean UPDATE_GOLDEN = + Utils.getProperty(TEST_CLASS_NAME + ".update_golden"); @Test public void simpleClass() { @@ -63,7 +61,7 @@ public void simpleClass() { Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); System.out.println("update golden? " + UPDATE_GOLDEN); - updateGoldenFile(goldeFilePath, visitor.write()); + Utils.updateGoldenFile(goldeFilePath, visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @@ -83,7 +81,8 @@ public void classWithHeader() { classDef.accept(visitor); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); - updateGoldenFile(goldeFilePath, visitor.write()); + System.out.println("update golden? " + UPDATE_GOLDEN); + Utils.updateGoldenFile(goldeFilePath, visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @@ -98,9 +97,7 @@ public void simpleLineComment() { } private static boolean getProperty() { - // System.setProperty(TEST_CLASS_NAME + ".update_golden", "true"); String property = System.getProperty(TEST_CLASS_NAME + ".update_golden"); - System.out.println("property: " + property); if (property != null) { return property.equals("true"); } @@ -118,23 +115,4 @@ private static boolean getProperty() { + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + "See the License for the specific language governing permissions and\n" + "limitations under the License."; - - private static void updateGoldenFile(Path goldenFilePath, String codegen) { - System.out.println("updating golden file: " + goldenFilePath.toString()); - File goldenFile = goldenFilePath.toFile(); - FileWriter myWriter = null; - try { - if (Files.exists(goldenFilePath.toAbsolutePath())) { - System.out.println("golden file exists !"); - goldenFile.delete(); - } - goldenFile.createNewFile(); - myWriter = new FileWriter(goldenFile, false); - myWriter.write(codegen); - myWriter.flush(); - myWriter.close(); - } catch (IOException e) { - System.out.println("A File creation error occurred." + e); - } - } } 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 1829af9379..414cb485aa 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 @@ -27,17 +27,11 @@ public static void main(String... args) { try { clazz = Class.forName(className); } catch (ClassNotFoundException e) { - System.out.println("Class not found " + e); System.exit(1); } - System.out.println("class created : " + clazz); Request request = Request.aClass(clazz); - System.out.println("request created : " + request); Result result = new JUnitCore().run(request); - System.out.println("Hey test successful ? " + result.wasSuccessful()); - System.out.println("Test result " + result.getFailures()); System.setProperty(className + ".update_golden", "false"); - System.out.println("property reset : " + System.getProperty(className + ".update_golden")); System.exit(result.wasSuccessful() ? 0 : 1); } } 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 new file mode 100644 index 0000000000..93eaf41f89 --- /dev/null +++ b/src/test/java/com/google/api/generator/test/framework/Utils.java @@ -0,0 +1,51 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.api.generator.test.framework; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class Utils { + + public static boolean getProperty(String key) { + String property = System.getProperty(key); + if (property != null) { + return property.equals("true"); + } + return false; + } + + public static void updateGoldenFile(Path goldenFilePath, String codegen) { + File goldenFile = goldenFilePath.toFile(); + FileWriter myWriter = null; + try { + if (Files.exists(goldenFilePath.toAbsolutePath())) { + System.out.println("golden file exists !"); + goldenFile.delete(); + } + goldenFile.createNewFile(); + myWriter = new FileWriter(goldenFile, false); + myWriter.write(codegen); + myWriter.flush(); + myWriter.close(); + } catch (IOException e) { + System.out.println("A File creation error occurred." + e); + } + System.out.println("Updated golden successfully! "); + } +} From 6e0881451cb85dec1d6ebcd1b42370d7340911d2 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 10:06:32 -0700 Subject: [PATCH 22/39] get codegen in local_tmp --- output.txt | 1 + rules_bazel/java/java_diff_test.bzl | 50 +++++++++++++------ .../api/generator/gapic/dummy/BUILD.bazel | 20 ++++++-- .../gapic/dummy/FileDiffInfraDummyTest.java | 20 ++------ .../generator/gapic/dummy/goldens/BUILD.bazel | 7 --- ...leDiffInfraDummyTestClassWithHeader.golden | 2 +- .../test/framework/SingleJUnitTestRunner.java | 11 ++-- .../api/generator/test/framework/Utils.java | 36 +++++++++++-- 8 files changed, 94 insertions(+), 53 deletions(-) create mode 100644 output.txt diff --git a/output.txt b/output.txt new file mode 100644 index 0000000000..4b9412b07b --- /dev/null +++ b/output.txt @@ -0,0 +1 @@ +hahaah diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index e921f94793..caa3c1ea1b 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -1,20 +1,36 @@ -def _test_srcjar_impl(ctx): - print("=========== label name:") - print(ctx.attr.test_class_name) +def _run_unit_impl(ctx): test_class_name = ctx.attr.test_class_name - arguments = [] + arguments = [test_class_name] inputs = ctx.files.srcs - attr = ctx.attr + output = ctx.outputs.output test_runner = ctx.executable.test_runner - ctx.actions.run( + golden_files = ctx.files.golden_files + print(golden_files) + + command = """ + mkdir local_tmp && + echo '\n \n \n hahahhaha \n \n \n' >> {output} && + less {output} && + ls && + ls local_tmp && + TEST_CLI_HOME="$(pwd)/local_tmp" \ + {test_runner_path} $@ && + ls local_tmp + """.format( + test_runner_path = test_runner.path, + output=output.path, + golden_files = golden_files, + ) + print(command) + ctx.actions.run_shell( inputs = inputs, - outputs = [ctx.outputs.output], - arguments = arguments + ["%s" % test_class_name] + ["true"], - progress_message = "%s: `%s %s`" % (ctx.label, test_runner.path, " ".join(arguments)), - executable = test_runner, + outputs = [output], + arguments = arguments, + tools = [test_runner], + command = command, ) -test_srcjar = rule( +run_junit = rule( attrs = { "test_class_name": attr.string(mandatory=True), "srcs": attr.label_list( @@ -26,17 +42,19 @@ test_srcjar = rule( executable = True, cfg = "host", ), - "output_suffix": attr.string(mandatory = False, default = ".testoutput.zip"), + "output_suffix": attr.string(mandatory = False, default = ".testoutput.txt"), + "golden_files": attr.label_list(mandatory =True, allow_files = True), }, outputs = { "output": "%{name}%{output_suffix}", }, - implementation = _test_srcjar_impl, + implementation = _run_unit_impl, ) -def run_single_junit(name, test_class_name, srcs): - test_srcjar( +def update_golden(name, test_class_name, srcs, golden_files): + run_junit( name = name, test_class_name = test_class_name, srcs = srcs, - ) + golden_files = golden_files, + ) \ No newline at end of file diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 65a8d8a96b..c8b4b152ef 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -43,10 +43,7 @@ java_binary( ":dummy_files", "//src/test/java/com/google/api/generator/test/framework:framework_files", ], - args = [ - "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest", - "true", - ], + args = ["com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"], data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], jvm_flags = ["-Xmx512m"], main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", @@ -60,3 +57,18 @@ java_binary( "@org_hamcrest_hamcrest_core//jar", ], ) + +load("//:rules_bazel/java/java_diff_test.bzl", "update_golden") + +TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" + +update_golden( + name = "DummyTest_JUnit", + test_class_name = TEST_CLASS_NAME, + srcs = [ + "//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files", + ":dummy_files", + "//src/test/java/com/google/api/generator/test/framework:framework_files" + ], + golden_files = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"] +) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 5ee2d2c624..a45d5722c8 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -38,10 +38,6 @@ public class FileDiffInfraDummyTest { private static final String GOLDENFILES_DIRECTORY = "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; - private static final String TEST_CLASS_NAME = - "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"; - private static final boolean UPDATE_GOLDEN = - Utils.getProperty(TEST_CLASS_NAME + ".update_golden"); @Test public void simpleClass() { @@ -58,10 +54,9 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); + Utils.saveToFile("FileDiffInfraDummyTestSimpleClass.golden", visitor.write()); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); - System.out.println("update golden? " + UPDATE_GOLDEN); - Utils.updateGoldenFile(goldeFilePath, visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @@ -79,10 +74,11 @@ public void classWithHeader() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); + // save the generated code to a file. + Utils.saveToFile("FileDiffInfraDummyTestClassWithHeader.golden", visitor.write()); + // update the goldens if the system flag `test_class_name.update_golden` is true. Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); - System.out.println("update golden? " + UPDATE_GOLDEN); - Utils.updateGoldenFile(goldeFilePath, visitor.write()); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @@ -96,14 +92,6 @@ public void simpleLineComment() { Assert.assertCodeEquals("// test strings comparison.", visitor.write()); } - private static boolean getProperty() { - String property = System.getProperty(TEST_CLASS_NAME + ".update_golden"); - if (property != null) { - return property.equals("true"); - } - return false; - } - private static final String APACHE_LICENSE_STRING = "Copyright 2020 Google LLC\n\n" + "Licensed under the Apache License, Version 2.0 (the \"License\");\n" diff --git a/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel index a2d2ff5daa..85ac1a519e 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/goldens/BUILD.bazel @@ -4,10 +4,3 @@ filegroup( name = "goldens_files", srcs = glob(["*.golden"]), ) - -genrule( - name = "copy_of_golden", - srcs = ["FileDiffInfraDummyTestClassWithHeader.golden"], - outs = ["copy_of_golden.golden"], - cmd = "cp $< $@", -) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden b/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden index f39fd15890..ad531d6d09 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden +++ b/src/test/java/com/google/api/generator/gapic/dummy/goldens/FileDiffInfraDummyTestClassWithHeader.golden @@ -16,4 +16,4 @@ package com.google.showcase.v1beta1.stub; -public class EchoStubSettings +public class EchoStubSettings {} 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 414cb485aa..cb19848204 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 @@ -21,8 +21,6 @@ public class SingleJUnitTestRunner { public static void main(String... args) { String className = args[0]; - boolean update_golden = args[1].equals("true"); - System.setProperty(className + ".update_golden", "true"); Class clazz = null; try { clazz = Class.forName(className); @@ -31,7 +29,12 @@ public static void main(String... args) { } Request request = Request.aClass(clazz); Result result = new JUnitCore().run(request); - System.setProperty(className + ".update_golden", "false"); - System.exit(result.wasSuccessful() ? 0 : 1); + if (result.wasSuccessful()) { + System.out.println("\n \n SUCCESS!!!!! \n \n"); + } else { + System.out.println("Tests result: " + result); + + System.out.println("Tests have failures: " + result.getFailures()); + } } } 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 93eaf41f89..197f676342 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 @@ -19,15 +19,41 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; public class Utils { - public static boolean getProperty(String key) { - String property = System.getProperty(key); - if (property != null) { - return property.equals("true"); + public static void saveToFile(String fileName, String codegen) { + String TEST_UNDECLARED_OUTPUTS_DIR = System.getenv("TEST_CLI_HOME"); + // Map env = System.getenv(); + // // Java 8 + // //env.forEach((k, v) -> System.out.println(k + ":" + v)); + + // // Classic way to loop a map + // for (Map.Entry entry : env.entrySet()) { + // System.out.println(entry.getKey() + " : " + entry.getValue()); + // } + + // Path testOutputPath = Paths.get(TEST_UNDECLARED_OUTPUTS_DIR, fileName); + System.out.println( + "TEST_UNDECLARED_OUTPUTS_DIR value: it's changing! " + TEST_UNDECLARED_OUTPUTS_DIR); + Path testOutputPath = Paths.get(TEST_UNDECLARED_OUTPUTS_DIR, fileName); + System.out.println("testOutputPath: " + testOutputPath.toAbsolutePath()); + try { + File createdFile = testOutputPath.toFile(); + if (createdFile.createNewFile()) { + System.out.println("File created: " + createdFile.getName()); + } else { + System.out.println("File did not get created :("); + } + FileWriter myWriter = new FileWriter(createdFile); + myWriter.write(codegen); + myWriter.flush(); + myWriter.close(); + } catch (IOException e) { + System.out.println("Error occured when saving codegen to file" + fileName); } - return false; + System.out.println("Saved to file!"); } public static void updateGoldenFile(Path goldenFilePath, String codegen) { From f6de85ecab08b6b0cb4d814f64b45430788c8e07 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 10:10:01 -0700 Subject: [PATCH 23/39] format --- .../com/google/api/generator/gapic/dummy/BUILD.bazel | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index c8b4b152ef..7c2a256abf 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -1,3 +1,5 @@ +load("//:rules_bazel/java/java_diff_test.bzl", "update_golden") + package(default_visibility = ["//visibility:public"]) TESTS = [ @@ -58,17 +60,15 @@ java_binary( ], ) -load("//:rules_bazel/java/java_diff_test.bzl", "update_golden") - TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" update_golden( name = "DummyTest_JUnit", - test_class_name = TEST_CLASS_NAME, srcs = [ - "//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files", ":dummy_files", - "//src/test/java/com/google/api/generator/test/framework:framework_files" + "//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files", + "//src/test/java/com/google/api/generator/test/framework:framework_files", ], - golden_files = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"] + golden_files = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], + test_class_name = TEST_CLASS_NAME, ) From b04ea6bce3b9b155ad8ba397987197d08242e5fd Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 12:28:45 -0700 Subject: [PATCH 24/39] add golden path to bazel rules --- rules_bazel/java/java_diff_test.bzl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index caa3c1ea1b..bdb4398c15 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -5,7 +5,9 @@ def _run_unit_impl(ctx): output = ctx.outputs.output test_runner = ctx.executable.test_runner golden_files = ctx.files.golden_files - print(golden_files) + golden_file_path = [] + for f in golden_files: + golden_file_path.append(f.path) command = """ mkdir local_tmp && @@ -16,12 +18,13 @@ def _run_unit_impl(ctx): TEST_CLI_HOME="$(pwd)/local_tmp" \ {test_runner_path} $@ && ls local_tmp + echo {golden_file_path} """.format( test_runner_path = test_runner.path, output=output.path, - golden_files = golden_files, + golden_file_path = golden_file_path[0], ) - print(command) + ctx.actions.run_shell( inputs = inputs, outputs = [output], From 15e26e3f6b25a4abcaccd478b744dca592465454 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 16:45:48 -0700 Subject: [PATCH 25/39] working pipeline --- rules_bazel/java/java_diff_test.bzl | 72 ++++++++++++------- .../api/generator/gapic/dummy/BUILD.bazel | 7 +- .../gapic/dummy/FileDiffInfraDummyTest.java | 10 ++- .../test/framework/SingleJUnitTestRunner.java | 2 - .../api/generator/test/framework/Utils.java | 43 +++-------- 5 files changed, 67 insertions(+), 67 deletions(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index bdb4398c15..6e1335ff30 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -1,30 +1,20 @@ -def _run_unit_impl(ctx): +def _junit_output_impl(ctx): test_class_name = ctx.attr.test_class_name arguments = [test_class_name] inputs = ctx.files.srcs output = ctx.outputs.output test_runner = ctx.executable.test_runner - golden_files = ctx.files.golden_files - golden_file_path = [] - for f in golden_files: - golden_file_path.append(f.path) command = """ - mkdir local_tmp && - echo '\n \n \n hahahhaha \n \n \n' >> {output} && - less {output} && - ls && - ls local_tmp && + mkdir local_tmp TEST_CLI_HOME="$(pwd)/local_tmp" \ {test_runner_path} $@ && - ls local_tmp - echo {golden_file_path} + cd local_tmp + zip -r ../{output} . """.format( test_runner_path = test_runner.path, output=output.path, - golden_file_path = golden_file_path[0], ) - ctx.actions.run_shell( inputs = inputs, outputs = [output], @@ -33,7 +23,7 @@ def _run_unit_impl(ctx): command = command, ) -run_junit = rule( +junit_output_zip = rule( attrs = { "test_class_name": attr.string(mandatory=True), "srcs": attr.label_list( @@ -41,23 +31,57 @@ run_junit = rule( mandatory = True, ), "test_runner": attr.label( - default = Label("//src/test/java/com/google/api/generator/gapic/dummy:run_single_junit_binary"), + mandatory = True, executable = True, cfg = "host", ), - "output_suffix": attr.string(mandatory = False, default = ".testoutput.txt"), - "golden_files": attr.label_list(mandatory =True, allow_files = True), + "output_suffix": attr.string(mandatory = False, default = ".zip"), }, outputs = { "output": "%{name}%{output_suffix}", }, - implementation = _run_unit_impl, + implementation = _junit_output_impl, ) + +def _overwrite_golden_impl(ctx): + script_content = """\ + #!/bin/bash + cd ${{BUILD_WORKSPACE_DIRECTORY}} + echo {unit_test_results} + unzip -ao {unit_test_results} -d src/test/java + """.format( + unit_test_results = ctx.file.unit_test_results.path, + ) + ctx.actions.write( + output = ctx.outputs.bin, + content = script_content, + is_executable = True, + ) + return [DefaultInfo(executable = ctx.outputs.bin)] -def update_golden(name, test_class_name, srcs, golden_files): - run_junit( - name = name, + +overwrite_golden = rule( + attrs = { + "unit_test_results": attr.label( + mandatory = False, + allow_single_file = True), + }, + outputs = { + "bin": "%{name}.sh", + }, + executable = True, + implementation = _overwrite_golden_impl, +) + +def update_golden(name, test_class_name, test_runner, srcs): + jnuit_output_name = "%s_output" % name + junit_output_zip( + name = jnuit_output_name, test_class_name = test_class_name, + test_runner = test_runner, srcs = srcs, - golden_files = golden_files, - ) \ No newline at end of file + ) + overwrite_golden( + name = name, + unit_test_results = ":%s" % jnuit_output_name + ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 7c2a256abf..2dd38038d7 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -40,12 +40,11 @@ java_library( # run_single_junit java_binary( - name = "run_single_junit_binary", + name = "junit_runner_binary", srcs = [ ":dummy_files", "//src/test/java/com/google/api/generator/test/framework:framework_files", ], - args = ["com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest"], data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], jvm_flags = ["-Xmx512m"], main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", @@ -63,12 +62,12 @@ java_binary( TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" update_golden( - name = "DummyTest_JUnit", + name = "FileDiffInfraDummyTest.update", srcs = [ ":dummy_files", "//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files", "//src/test/java/com/google/api/generator/test/framework:framework_files", ], - golden_files = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], test_class_name = TEST_CLASS_NAME, + test_runner = "//src/test/java/com/google/api/generator/gapic/dummy:junit_runner_binary" ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index a45d5722c8..f6b71ed814 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -54,7 +54,10 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - Utils.saveToFile("FileDiffInfraDummyTestSimpleClass.golden", visitor.write()); + Utils.saveToFile( + "com/google/api/generator/gapic/dummy/goldens/", + "FileDiffInfraDummyTestSimpleClass.golden", + visitor.write()); Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); Assert.assertCodeEquals(goldeFilePath, visitor.write()); @@ -75,7 +78,10 @@ public void classWithHeader() { JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); // save the generated code to a file. - Utils.saveToFile("FileDiffInfraDummyTestClassWithHeader.golden", visitor.write()); + Utils.saveToFile( + "com/google/api/generator/gapic/dummy/goldens/", + "FileDiffInfraDummyTestClassWithHeader.golden", + visitor.write()); // update the goldens if the system flag `test_class_name.update_golden` is true. Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); 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 cb19848204..e39cd8c9d5 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 @@ -32,8 +32,6 @@ public static void main(String... args) { if (result.wasSuccessful()) { System.out.println("\n \n SUCCESS!!!!! \n \n"); } else { - System.out.println("Tests result: " + result); - System.out.println("Tests have failures: " + result.getFailures()); } } 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 197f676342..a785ffe5d8 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 @@ -17,28 +17,20 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Utils { - public static void saveToFile(String fileName, String codegen) { - String TEST_UNDECLARED_OUTPUTS_DIR = System.getenv("TEST_CLI_HOME"); - // Map env = System.getenv(); - // // Java 8 - // //env.forEach((k, v) -> System.out.println(k + ":" + v)); + public static void saveToFile(String dirName, String fileName, String codegen) { + System.out.println("dirname: " + dirName); - // // Classic way to loop a map - // for (Map.Entry entry : env.entrySet()) { - // System.out.println(entry.getKey() + " : " + entry.getValue()); - // } + String outputDir = System.getenv("TEST_CLI_HOME"); + Path testOutputPath = Paths.get(outputDir, dirName); + testOutputPath.toFile().mkdirs(); + testOutputPath = Paths.get(outputDir, dirName, fileName); - // Path testOutputPath = Paths.get(TEST_UNDECLARED_OUTPUTS_DIR, fileName); - System.out.println( - "TEST_UNDECLARED_OUTPUTS_DIR value: it's changing! " + TEST_UNDECLARED_OUTPUTS_DIR); - Path testOutputPath = Paths.get(TEST_UNDECLARED_OUTPUTS_DIR, fileName); - System.out.println("testOutputPath: " + testOutputPath.toAbsolutePath()); + System.out.println("testOutputPath: " + testOutputPath.toString()); try { File createdFile = testOutputPath.toFile(); if (createdFile.createNewFile()) { @@ -53,25 +45,6 @@ public static void saveToFile(String fileName, String codegen) { } catch (IOException e) { System.out.println("Error occured when saving codegen to file" + fileName); } - System.out.println("Saved to file!"); - } - - public static void updateGoldenFile(Path goldenFilePath, String codegen) { - File goldenFile = goldenFilePath.toFile(); - FileWriter myWriter = null; - try { - if (Files.exists(goldenFilePath.toAbsolutePath())) { - System.out.println("golden file exists !"); - goldenFile.delete(); - } - goldenFile.createNewFile(); - myWriter = new FileWriter(goldenFile, false); - myWriter.write(codegen); - myWriter.flush(); - myWriter.close(); - } catch (IOException e) { - System.out.println("A File creation error occurred." + e); - } - System.out.println("Updated golden successfully! "); + System.out.println("Saved to file! "); } } From eb2f9312d4340d6da2b044808f9916b923e425bc Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 16:49:22 -0700 Subject: [PATCH 26/39] format --- rules_bazel/java/java_diff_test.bzl | 1 - src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 6e1335ff30..aba8b44df5 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -47,7 +47,6 @@ def _overwrite_golden_impl(ctx): script_content = """\ #!/bin/bash cd ${{BUILD_WORKSPACE_DIRECTORY}} - echo {unit_test_results} unzip -ao {unit_test_results} -d src/test/java """.format( unit_test_results = ctx.file.unit_test_results.path, diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 2dd38038d7..8d2ae9dd10 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -69,5 +69,5 @@ update_golden( "//src/test/java/com/google/api/generator/test/framework:framework_files", ], test_class_name = TEST_CLASS_NAME, - test_runner = "//src/test/java/com/google/api/generator/gapic/dummy:junit_runner_binary" + test_runner = "//src/test/java/com/google/api/generator/gapic/dummy:junit_runner_binary", ) From 278ade1eb9021538cc7006e259fc89bc84f61ae9 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 17:24:44 -0700 Subject: [PATCH 27/39] work! --- rules_bazel/java/java_diff_test.bzl | 2 +- .../gapic/dummy/FileDiffInfraDummyTest.java | 25 ++++------- .../test/framework/SingleJUnitTestRunner.java | 25 ++++++++--- .../api/generator/test/framework/Utils.java | 42 +++++++++++-------- 4 files changed, 52 insertions(+), 42 deletions(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index aba8b44df5..971c288029 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -7,7 +7,7 @@ def _junit_output_impl(ctx): command = """ mkdir local_tmp - TEST_CLI_HOME="$(pwd)/local_tmp" \ + TEST_OUTPUT_HOME="$(pwd)/local_tmp" \ {test_runner_path} $@ && cd local_tmp zip -r ../{output} . diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index f6b71ed814..f321fca2f5 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -38,10 +38,12 @@ public class FileDiffInfraDummyTest { private static final String GOLDENFILES_DIRECTORY = "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; + private static final String GOLDENFILES_SIMPLE_CLASS = "FileDiffInfraDummyTestSimpleClass.golden"; + private static final String GOLDENFILES_CLASS_WITH_HEADER = + "FileDiffInfraDummyTestClassWithHeader.golden"; @Test public void simpleClass() { - System.out.println("Running simple class"); ClassDefinition classDef = ClassDefinition.builder() .setHeaderCommentStatements( @@ -54,18 +56,13 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - Utils.saveToFile( - "com/google/api/generator/gapic/dummy/goldens/", - "FileDiffInfraDummyTestSimpleClass.golden", - visitor.write()); - Path goldeFilePath = - Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); + Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_SIMPLE_CLASS, visitor.write()); + Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_SIMPLE_CLASS); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } @Test public void classWithHeader() { - System.out.println("Running class with header test"); ClassDefinition classDef = ClassDefinition.builder() .setFileHeader( @@ -77,21 +74,15 @@ public void classWithHeader() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - // save the generated code to a file. - Utils.saveToFile( - "com/google/api/generator/gapic/dummy/goldens/", - "FileDiffInfraDummyTestClassWithHeader.golden", - visitor.write()); - // update the goldens if the system flag `test_class_name.update_golden` is true. - Path goldeFilePath = - Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); + // Save the generated code to a file for updating goldens if needed. + Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_CLASS_WITH_HEADER, visitor.write()); + Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_CLASS_WITH_HEADER); Assert.assertCodeEquals(goldeFilePath, visitor.write()); } // Add a simple test for two strings comparison. @Test public void simpleLineComment() { - System.out.println("Running simple line comment test."); JavaWriterVisitor visitor = new JavaWriterVisitor(); LineComment lineComment = LineComment.withComment("test strings comparison."); lineComment.accept(visitor); 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 e39cd8c9d5..fdb02472b1 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 @@ -20,19 +20,32 @@ public class SingleJUnitTestRunner { public static void main(String... args) { + if (args.length < 1) { + throw new MissingRequiredArgException("Missing the JUnit class name argument."); + } String className = args[0]; Class clazz = null; try { clazz = Class.forName(className); } catch (ClassNotFoundException e) { - System.exit(1); + throw new JUnitClassNotFoundException( + String.format("JUnit test class %s is not found.", className)); } - Request request = Request.aClass(clazz); - Result result = new JUnitCore().run(request); - if (result.wasSuccessful()) { - System.out.println("\n \n SUCCESS!!!!! \n \n"); - } else { + Result result = new JUnitCore().run(Request.aClass(clazz)); + if (!result.wasSuccessful()) { System.out.println("Tests have failures: " + result.getFailures()); } } + + private static class JUnitClassNotFoundException extends RuntimeException { + public JUnitClassNotFoundException(String errorMessage) { + super(errorMessage); + } + } + + private static class MissingRequiredArgException extends RuntimeException { + public MissingRequiredArgException(String errorMessage) { + super(errorMessage); + } + } } 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 a785ffe5d8..0d86b32adf 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 @@ -22,29 +22,35 @@ public class Utils { - public static void saveToFile(String dirName, String fileName, String codegen) { - System.out.println("dirname: " + dirName); - - String outputDir = System.getenv("TEST_CLI_HOME"); - Path testOutputPath = Paths.get(outputDir, dirName); - testOutputPath.toFile().mkdirs(); - testOutputPath = Paths.get(outputDir, dirName, fileName); - - System.out.println("testOutputPath: " + testOutputPath.toString()); + 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"); + // For example: com/google/api/generator/gapic/dummy/goldens/ + String relativeGoldenDir = getTestoutGoldenDir(clazz); + Path testOutputDir = Paths.get(testOutputHome, relativeGoldenDir); + testOutputDir.toFile().mkdirs(); try { - File createdFile = testOutputPath.toFile(); - if (createdFile.createNewFile()) { - System.out.println("File created: " + createdFile.getName()); - } else { - System.out.println("File did not get created :("); - } - FileWriter myWriter = new FileWriter(createdFile); + File testOutputFile = Paths.get(testOutputHome, relativeGoldenDir, fileName).toFile(); + FileWriter myWriter = new FileWriter(testOutputFile); myWriter.write(codegen); myWriter.flush(); myWriter.close(); } catch (IOException e) { - System.out.println("Error occured when saving codegen to file" + fileName); + throw new SaveCodegenToFileException( + String.format( + "Error occured when saving codegen to file %s/%s", relativeGoldenDir, fileName)); + } + } + + private static String getTestoutGoldenDir(Class clazz) { + return clazz.getPackage().getName().replace(".", "/") + "/goldens/"; + } + + private static class SaveCodegenToFileException extends RuntimeException { + public SaveCodegenToFileException(String errorMessage) { + super(errorMessage); } - System.out.println("Saved to file! "); } } From ff4c2ace40f00d242f0c4faf028ec7e5ae32ef27 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 18:27:22 -0700 Subject: [PATCH 28/39] clean up --- output.txt | 1 - rules_bazel/java/java_diff_test.bzl | 3 +-- .../api/generator/gapic/dummy/BUILD.bazel | 18 +++--------------- .../gapic/dummy/FileDiffInfraDummyTest.java | 9 ++++----- .../test/framework/SingleJUnitTestRunner.java | 2 ++ 5 files changed, 10 insertions(+), 23 deletions(-) delete mode 100644 output.txt diff --git a/output.txt b/output.txt deleted file mode 100644 index 4b9412b07b..0000000000 --- a/output.txt +++ /dev/null @@ -1 +0,0 @@ -hahaah diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 971c288029..fe4f99f89b 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -1,6 +1,5 @@ def _junit_output_impl(ctx): test_class_name = ctx.attr.test_class_name - arguments = [test_class_name] inputs = ctx.files.srcs output = ctx.outputs.output test_runner = ctx.executable.test_runner @@ -18,7 +17,7 @@ def _junit_output_impl(ctx): ctx.actions.run_shell( inputs = inputs, outputs = [output], - arguments = arguments, + arguments = [test_class_name], tools = [test_runner], command = command, ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 8d2ae9dd10..ed895fec1d 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -11,20 +11,6 @@ filegroup( srcs = ["{0}.java".format(f) for f in TESTS], ) -java_library( - name = "dummy", - srcs = [ - ":dummy_files", - ], - deps = [ - "//src/main/java/com/google/api/generator/engine/ast", - "//src/main/java/com/google/api/generator/engine/writer", - "//src/test/java/com/google/api/generator/test/framework", - "@io_github_java_diff_utils//jar", - "@junit_junit//jar", - ], -) - [java_test( name = test_name, srcs = ["{0}.java".format(test_name)], @@ -38,7 +24,7 @@ java_library( ], ) for test_name in TESTS] -# run_single_junit +# JUnit runner binary, this is used to generate test output for updating goldens files. java_binary( name = "junit_runner_binary", srcs = [ @@ -61,6 +47,8 @@ java_binary( TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" +# Run `bazel run src/test/java/com/google/api/generator/gapic/dummy:FileDiffInfraDummyTest.update` +# to update goldens as expected generated code. update_golden( name = "FileDiffInfraDummyTest.update", srcs = [ diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index f321fca2f5..f54a2d20d8 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -35,7 +35,6 @@ public class FileDiffInfraDummyTest { // created. // // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and well-tested. - private static final String GOLDENFILES_DIRECTORY = "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; private static final String GOLDENFILES_SIMPLE_CLASS = "FileDiffInfraDummyTestSimpleClass.golden"; @@ -57,8 +56,8 @@ public void simpleClass() { JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_SIMPLE_CLASS, visitor.write()); - Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_SIMPLE_CLASS); - Assert.assertCodeEquals(goldeFilePath, visitor.write()); + Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_SIMPLE_CLASS); + Assert.assertCodeEquals(goldenFilePath, visitor.write()); } @Test @@ -76,8 +75,8 @@ public void classWithHeader() { classDef.accept(visitor); // Save the generated code to a file for updating goldens if needed. Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_CLASS_WITH_HEADER, visitor.write()); - Path goldeFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_CLASS_WITH_HEADER); - Assert.assertCodeEquals(goldeFilePath, visitor.write()); + Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_CLASS_WITH_HEADER); + Assert.assertCodeEquals(goldenFilePath, visitor.write()); } // Add a simple test for two strings comparison. 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 fdb02472b1..b72958b860 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 @@ -19,6 +19,8 @@ import org.junit.runner.Result; public class SingleJUnitTestRunner { + // SingleJUnitTestRunner runs a JUnit test whose name is passed through `args` + // when `bazel run //:testTarget.update` for updating goldens files. public static void main(String... args) { if (args.length < 1) { throw new MissingRequiredArgException("Missing the JUnit class name argument."); From aeac134d4b729524687a71d8617f6acd24dd35e9 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 17 Sep 2020 18:35:14 -0700 Subject: [PATCH 29/39] fix --- rules_bazel/java/java_diff_test.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index fe4f99f89b..05c5986b11 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -61,7 +61,7 @@ def _overwrite_golden_impl(ctx): overwrite_golden = rule( attrs = { "unit_test_results": attr.label( - mandatory = False, + mandatory = True, allow_single_file = True), }, outputs = { From f5f9ba9a28ce4bd8cde0eab24531d693712b8a48 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Sat, 19 Sep 2020 14:57:36 -0700 Subject: [PATCH 30/39] feedback --- dependencies.properties | 2 ++ rules_bazel/java/java_diff_test.bzl | 13 +++++++------ .../api/generator/test/framework/Utils.java | 15 ++++++++++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/dependencies.properties b/dependencies.properties index 3d358bfeef..6d973bd96c 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -32,6 +32,8 @@ maven.org_threeten_threetenbp=org.threeten:threetenbp:1.3.3 # Testing. maven.junit_junit=junit:junit:4.13 +# This hamcrest-core dependency is for running JUnit test manually, before JUnit 4.11 it's wrapped along with JUnit package. +# But now it has to be explicitly added. maven.org_hamcrest_hamcrest_core=org.hamcrest:hamcrest-core:1.3 maven.org_mockito_mockito_core=org.mockito:mockito-core:2.21.0 maven.com_google_truth_truth=com.google.truth:truth:0.42 diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 05c5986b11..77e827334f 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -7,13 +7,14 @@ def _junit_output_impl(ctx): command = """ mkdir local_tmp TEST_OUTPUT_HOME="$(pwd)/local_tmp" \ - {test_runner_path} $@ && + {test_runner_path} $@ cd local_tmp zip -r ../{output} . - """.format( - test_runner_path = test_runner.path, - output=output.path, - ) + """.format( + test_runner_path = test_runner.path, + output=output.path, + ) + ctx.actions.run_shell( inputs = inputs, outputs = [output], @@ -43,7 +44,7 @@ junit_output_zip = rule( ) def _overwrite_golden_impl(ctx): - script_content = """\ + script_content = """ #!/bin/bash cd ${{BUILD_WORKSPACE_DIRECTORY}} unzip -ao {unit_test_results} -d src/test/java 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 0d86b32adf..4c006ee7a7 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,7 +21,20 @@ import java.nio.file.Paths; 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 + * `com/google/..` which is identical with the location of goldens files will help us easily + * replace the original goldens. + * + *

For example: `src/test/java/com/google/api/generator/gapic/composer/ComposerTest.java` will + * save the generated code into a file called `ComposerTest.golden` at + * `$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. + */ 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. From 19d791c3cb5d69887cf7f3654394d72be1ee8ace Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Sat, 19 Sep 2020 15:08:25 -0700 Subject: [PATCH 31/39] clean --- .../com/google/api/generator/test/framework/Utils.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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 4c006ee7a7..8ba4565553 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 @@ -25,10 +25,9 @@ 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 * `com/google/..` which is identical with the location of goldens files will help us easily - * replace the original goldens. - * - *

For example: `src/test/java/com/google/api/generator/gapic/composer/ComposerTest.java` will - * save the generated code into a file called `ComposerTest.golden` at + * replace the original goldens. For example: + * `src/test/java/com/google/api/generator/gapic/composer/ComposerTest.java` will save the + * generated code into a file called `ComposerTest.golden` at * `$TEST_OUTPUT_HOME/com/google/api/generator/gapic/composer/goldens/ComposerTest.golden`. * * @param clazz the test class. From 5ccd3eafcfdbce3a77934a5151fe62523e45b667 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Sat, 19 Sep 2020 15:20:18 -0700 Subject: [PATCH 32/39] comment --- .../api/generator/test/framework/SingleJUnitTestRunner.java | 6 ++++-- .../java/com/google/api/generator/test/framework/Utils.java | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) 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 b72958b860..b7bffd353d 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 @@ -19,9 +19,11 @@ import org.junit.runner.Result; public class SingleJUnitTestRunner { - // SingleJUnitTestRunner runs a JUnit test whose name is passed through `args` - // when `bazel run //:testTarget.update` for updating goldens files. + // SingleJUnitTestRunner runs single JUnit test whose class name is passed through `args`. + // This is used to prepare codegen for updating goldens files. public static void main(String... args) { + // Check whether the test class name is passed correctly e.g. + // `com.google.api.generator.gapic.composer.ComposerTest` if (args.length < 1) { throw new MissingRequiredArgException("Missing the JUnit class name argument."); } 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 8ba4565553..ea2030dba9 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 @@ -24,7 +24,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 - * `com/google/..` which is identical with the location of goldens files will help us easily + * `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 * generated code into a file called `ComposerTest.golden` at @@ -39,7 +39,6 @@ public static void saveCodegenToFile(Class clazz, String fileName, String codege // 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"); - // For example: com/google/api/generator/gapic/dummy/goldens/ String relativeGoldenDir = getTestoutGoldenDir(clazz); Path testOutputDir = Paths.get(testOutputHome, relativeGoldenDir); testOutputDir.toFile().mkdirs(); From a51f0cebdea134e92dc25da4585b69d2024787f9 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Tue, 22 Sep 2020 11:26:08 -0700 Subject: [PATCH 33/39] bazel rules feedbacj --- BUILD.bazel | 22 +++++++++++++++ rules_bazel/java/java_diff_test.bzl | 21 +++++++------- .../api/generator/gapic/dummy/BUILD.bazel | 28 ++----------------- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 11b2b84ce0..8586639604 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -46,6 +46,28 @@ java_binary( ], ) +# JUnit runner binary, this is used to generate test output for updating goldens files. +# Run `bazel run testTarget.update` will trigger this runner. +java_binary( + name = "junit_runner", + srcs = [ + "//src/test/java/com/google/api/generator/gapic/dummy:dummy_files", + "//src/test/java/com/google/api/generator/test/framework:framework_files", + ], + data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], + jvm_flags = ["-Xmx512m"], + main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", + visibility = ["//visibility:public"], + deps = [ + "//src/main/java/com/google/api/generator/engine/ast", + "//src/main/java/com/google/api/generator/engine/writer", + "//src/test/java/com/google/api/generator/test/framework", + "@io_github_java_diff_utils//jar", + "@junit_junit//jar", + "@org_hamcrest_hamcrest_core//jar", + ], +) + # google-java-format java_binary( name = "google_java_format_binary", diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 77e827334f..7c8253646d 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -35,15 +35,14 @@ junit_output_zip = rule( executable = True, cfg = "host", ), - "output_suffix": attr.string(mandatory = False, default = ".zip"), }, outputs = { - "output": "%{name}%{output_suffix}", + "output": "%{name}%.zip", }, implementation = _junit_output_impl, ) -def _overwrite_golden_impl(ctx): +def _overwritten_golden_impl(ctx): script_content = """ #!/bin/bash cd ${{BUILD_WORKSPACE_DIRECTORY}} @@ -59,7 +58,7 @@ def _overwrite_golden_impl(ctx): return [DefaultInfo(executable = ctx.outputs.bin)] -overwrite_golden = rule( +overwritten_golden = rule( attrs = { "unit_test_results": attr.label( mandatory = True, @@ -69,18 +68,18 @@ overwrite_golden = rule( "bin": "%{name}.sh", }, executable = True, - implementation = _overwrite_golden_impl, + implementation = _overwritten_golden_impl, ) -def update_golden(name, test_class_name, test_runner, srcs): - jnuit_output_name = "%s_output" % name +def updated_golden(name, test_class_name, srcs): + junit_output_name = "%s_output" % name junit_output_zip( - name = jnuit_output_name, + name = junit_output_name, test_class_name = test_class_name, - test_runner = test_runner, + test_runner = "//:junit_runner", srcs = srcs, ) - overwrite_golden( + overwritten_golden( name = name, - unit_test_results = ":%s" % jnuit_output_name + unit_test_results = ":%s" % junit_output_name ) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index ed895fec1d..a92fb59602 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -1,4 +1,4 @@ -load("//:rules_bazel/java/java_diff_test.bzl", "update_golden") +load("//:rules_bazel/java/java_diff_test.bzl", "updated_golden") package(default_visibility = ["//visibility:public"]) @@ -14,7 +14,7 @@ filegroup( [java_test( name = test_name, srcs = ["{0}.java".format(test_name)], - data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], + data = glob(["goldens/*.golden"]), test_class = "com.google.api.generator.gapic.dummy.{0}".format(test_name), deps = [ "//src/main/java/com/google/api/generator/engine/ast", @@ -24,32 +24,11 @@ filegroup( ], ) for test_name in TESTS] -# JUnit runner binary, this is used to generate test output for updating goldens files. -java_binary( - name = "junit_runner_binary", - srcs = [ - ":dummy_files", - "//src/test/java/com/google/api/generator/test/framework:framework_files", - ], - data = ["//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files"], - jvm_flags = ["-Xmx512m"], - main_class = "com.google.api.generator.test.framework.SingleJUnitTestRunner", - visibility = ["//visibility:public"], - deps = [ - "//src/main/java/com/google/api/generator/engine/ast", - "//src/main/java/com/google/api/generator/engine/writer", - "//src/test/java/com/google/api/generator/test/framework", - "@io_github_java_diff_utils//jar", - "@junit_junit//jar", - "@org_hamcrest_hamcrest_core//jar", - ], -) - TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" # Run `bazel run src/test/java/com/google/api/generator/gapic/dummy:FileDiffInfraDummyTest.update` # to update goldens as expected generated code. -update_golden( +updated_golden( name = "FileDiffInfraDummyTest.update", srcs = [ ":dummy_files", @@ -57,5 +36,4 @@ update_golden( "//src/test/java/com/google/api/generator/test/framework:framework_files", ], test_class_name = TEST_CLASS_NAME, - test_runner = "//src/test/java/com/google/api/generator/gapic/dummy:junit_runner_binary", ) From f230b09a9ff24997cb901fc2190af38c663d96f5 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Tue, 22 Sep 2020 19:42:40 +0000 Subject: [PATCH 34/39] java code feedback --- .../gapic/dummy/FileDiffInfraDummyTest.java | 18 +++++++++++++----- .../api/generator/test/framework/Utils.java | 8 ++------ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index f54a2d20d8..5c8e563fe9 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -35,11 +35,9 @@ public class FileDiffInfraDummyTest { // created. // // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and well-tested. - private static final String GOLDENFILES_DIRECTORY = - "src/test/java/com/google/api/generator/gapic/dummy/goldens/"; - private static final String GOLDENFILES_SIMPLE_CLASS = "FileDiffInfraDummyTestSimpleClass.golden"; - private static final String GOLDENFILES_CLASS_WITH_HEADER = - "FileDiffInfraDummyTestClassWithHeader.golden"; + private final String GOLDENFILES_DIRECTORY = getGoldenDir(); + private final String GOLDENFILES_SIMPLE_CLASS = getClassName() + "SimpleClass.golden"; + private final String GOLDENFILES_CLASS_WITH_HEADER = getClassName() + "ClassWithHeader.golden"; @Test public void simpleClass() { @@ -88,6 +86,16 @@ public void simpleLineComment() { Assert.assertCodeEquals("// test strings comparison.", visitor.write()); } + private String getGoldenDir() { + return "src/test/java/" + + this.getClass().getPackage().getName().replace(".", "/") + + "/goldens/"; + } + + private String getClassName() { + return this.getClass().getSimpleName(); + } + private static final String APACHE_LICENSE_STRING = "Copyright 2020 Google LLC\n\n" + "Licensed under the Apache License, Version 2.0 (the \"License\");\n" 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 ea2030dba9..5d6988df12 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 @@ -14,7 +14,6 @@ package com.google.api.generator.test.framework; -import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.nio.file.Path; @@ -42,12 +41,9 @@ public static void saveCodegenToFile(Class clazz, String fileName, String codege String relativeGoldenDir = getTestoutGoldenDir(clazz); Path testOutputDir = Paths.get(testOutputHome, relativeGoldenDir); testOutputDir.toFile().mkdirs(); - try { - File testOutputFile = Paths.get(testOutputHome, relativeGoldenDir, fileName).toFile(); - FileWriter myWriter = new FileWriter(testOutputFile); + try (FileWriter myWriter = + new FileWriter(Paths.get(testOutputHome, relativeGoldenDir, fileName).toFile())) { myWriter.write(codegen); - myWriter.flush(); - myWriter.close(); } catch (IOException e) { throw new SaveCodegenToFileException( String.format( From b51775df3997550928365317ce1e30569bafc3f0 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Tue, 22 Sep 2020 20:48:58 +0000 Subject: [PATCH 35/39] move dependency --- dependencies.properties | 3 --- repositories.bzl | 10 ++++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dependencies.properties b/dependencies.properties index 6d973bd96c..42eb51736a 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -32,8 +32,5 @@ maven.org_threeten_threetenbp=org.threeten:threetenbp:1.3.3 # Testing. maven.junit_junit=junit:junit:4.13 -# This hamcrest-core dependency is for running JUnit test manually, before JUnit 4.11 it's wrapped along with JUnit package. -# But now it has to be explicitly added. -maven.org_hamcrest_hamcrest_core=org.hamcrest:hamcrest-core:1.3 maven.org_mockito_mockito_core=org.mockito:mockito-core:2.21.0 maven.com_google_truth_truth=com.google.truth:truth:0.42 diff --git a/repositories.bzl b/repositories.bzl index 3c207aae8d..cdbf092fd0 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -116,6 +116,16 @@ def com_google_api_generator_repositories(): artifact = "com.google.api:gax-grpc:%s" % _gax_java_version, server_urls = ["https://repo.maven.apache.org/maven2/"], ) + + # This hamcrest-core dependency is for running JUnit test manually, before JUnit 4.11 it's wrapped along with JUnit package. + # But now it has to be explicitly added. + _maybe( + jvm_maven_import_external, + name = "hamcrest-core", + artifact = "org.hamcrest:hamcrest-core:1.3", + server_urls = ["https://repo.maven.apache.org/maven2/"], + ) + # grpc-proto doesn't have releases, so we use hashes instead. _io_grpc_proto_prefix = "0020624375a8ee4c7dd9b3e513e443b90bc28990" # Aug. 20, 2020. From 6f8d04b5faafd4196f3409ce3167a6f92e40b9c9 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Tue, 22 Sep 2020 22:10:21 +0000 Subject: [PATCH 36/39] clean up --- rules_bazel/java/java_diff_test.bzl | 1 + .../com/google/api/generator/gapic/dummy/BUILD.bazel | 2 +- .../gapic/dummy/FileDiffInfraDummyTest.java | 6 +++--- .../test/framework/{Utils.java => SaveCodegen.java} | 8 ++++++-- .../test/framework/SingleJUnitTestRunner.java | 12 ++++++++++-- 5 files changed, 21 insertions(+), 8 deletions(-) rename src/test/java/com/google/api/generator/test/framework/{Utils.java => SaveCodegen.java} (92%) diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 7c8253646d..5c591b52e8 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -9,6 +9,7 @@ def _junit_output_impl(ctx): 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 -r ../{output} . """.format( test_runner_path = test_runner.path, diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index a92fb59602..9963eb6020 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -29,7 +29,7 @@ TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" # Run `bazel run src/test/java/com/google/api/generator/gapic/dummy:FileDiffInfraDummyTest.update` # to update goldens as expected generated code. updated_golden( - name = "FileDiffInfraDummyTest.update", + name = "FileDiffInfraDummyTest_update", srcs = [ ":dummy_files", "//src/test/java/com/google/api/generator/gapic/dummy/goldens:goldens_files", diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 5c8e563fe9..0a7e7c6137 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -21,7 +21,7 @@ import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; import com.google.api.generator.test.framework.Assert; -import com.google.api.generator.test.framework.Utils; +import com.google.api.generator.test.framework.SaveCodegen; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -53,7 +53,7 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_SIMPLE_CLASS, visitor.write()); + SaveCodegen.saveCodegenToFile(this.getClass(), GOLDENFILES_SIMPLE_CLASS, visitor.write()); Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_SIMPLE_CLASS); Assert.assertCodeEquals(goldenFilePath, visitor.write()); } @@ -72,7 +72,7 @@ public void classWithHeader() { JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); // Save the generated code to a file for updating goldens if needed. - Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_CLASS_WITH_HEADER, visitor.write()); + SaveCodegen.saveCodegenToFile(this.getClass(), GOLDENFILES_CLASS_WITH_HEADER, visitor.write()); Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_CLASS_WITH_HEADER); Assert.assertCodeEquals(goldenFilePath, visitor.write()); } diff --git a/src/test/java/com/google/api/generator/test/framework/Utils.java b/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java similarity index 92% rename from src/test/java/com/google/api/generator/test/framework/Utils.java rename to src/test/java/com/google/api/generator/test/framework/SaveCodegen.java index 5d6988df12..3d07fce90f 100644 --- a/src/test/java/com/google/api/generator/test/framework/Utils.java +++ b/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java @@ -19,7 +19,7 @@ import java.nio.file.Path; import java.nio.file.Paths; -public class Utils { +public class SaveCodegen { /** * 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 @@ -55,9 +55,13 @@ private static String getTestoutGoldenDir(Class clazz) { return clazz.getPackage().getName().replace(".", "/") + "/goldens/"; } - private static class SaveCodegenToFileException extends RuntimeException { + public static class SaveCodegenToFileException extends RuntimeException { public SaveCodegenToFileException(String errorMessage) { super(errorMessage); } + + public SaveCodegenToFileException(String errorMessage, Throwable cause) { + super(errorMessage, cause); + } } } 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 b7bffd353d..a11ad6437a 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 @@ -41,15 +41,23 @@ public static void main(String... args) { } } - private static class JUnitClassNotFoundException extends RuntimeException { + public static class JUnitClassNotFoundException extends RuntimeException { public JUnitClassNotFoundException(String errorMessage) { super(errorMessage); } + + public JUnitClassNotFoundException(String errorMessage, Throwable cause) { + super(errorMessage, cause); + } } - private static class MissingRequiredArgException extends RuntimeException { + public static class MissingRequiredArgException extends RuntimeException { public MissingRequiredArgException(String errorMessage) { super(errorMessage); } + + public MissingRequiredArgException(String errorMessage, Throwable cause) { + super(errorMessage, cause); + } } } From d364be46846688c59870c3d43badd38d8d87178d Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Tue, 22 Sep 2020 22:22:06 +0000 Subject: [PATCH 37/39] comment --- BUILD.bazel | 2 +- src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel | 2 +- .../com/google/api/generator/test/framework/SaveCodegen.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index e3028b78d6..ba95d15151 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -47,7 +47,7 @@ java_binary( ) # JUnit runner binary, this is used to generate test output for updating goldens files. -# Run `bazel run testTarget.update` will trigger this runner. +# Run `bazel run testTarget_update` will trigger this runner. java_binary( name = "junit_runner", srcs = [ diff --git a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel index 9963eb6020..7337d63159 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/dummy/BUILD.bazel @@ -26,7 +26,7 @@ filegroup( TEST_CLASS_NAME = "com.google.api.generator.gapic.dummy.FileDiffInfraDummyTest" -# Run `bazel run src/test/java/com/google/api/generator/gapic/dummy:FileDiffInfraDummyTest.update` +# Run `bazel run src/test/java/com/google/api/generator/gapic/dummy:FileDiffInfraDummyTest_update` # to update goldens as expected generated code. updated_golden( name = "FileDiffInfraDummyTest_update", diff --git a/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java b/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java index 3d07fce90f..71ce68979b 100644 --- a/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java +++ b/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java @@ -36,7 +36,7 @@ public class SaveCodegen { 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. + // It will be set when running `bazel run testTarget_update` command. String testOutputHome = System.getenv("TEST_OUTPUT_HOME"); String relativeGoldenDir = getTestoutGoldenDir(clazz); Path testOutputDir = Paths.get(testOutputHome, relativeGoldenDir); From c681dc1d62e04e061eb251060e75fe4b5e06f5f5 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Wed, 23 Sep 2020 17:52:07 +0000 Subject: [PATCH 38/39] move hamcrest dep back --- dependencies.properties | 3 +++ repositories.bzl | 9 --------- rules_bazel/java/java_diff_test.bzl | 1 + 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/dependencies.properties b/dependencies.properties index 761f5a1cba..007ec2bd56 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -33,6 +33,9 @@ maven.org_threeten_threetenbp=org.threeten:threetenbp:1.3.3 # Testing. maven.junit_junit=junit:junit:4.13 +# This hamcrest-core dependency is for running JUnit test manually, before JUnit 4.11 it's wrapped along with JUnit package. +# But now it has to be explicitly added. +maven.org_hamcrest_hamcrest_core=org.hamcrest:hamcrest-core:1.3 maven.org_mockito_mockito_core=org.mockito:mockito-core:2.21.0 # Keep in sync with gax-java. maven.com_google_truth_truth=com.google.truth:truth:1.0 diff --git a/repositories.bzl b/repositories.bzl index f631b1f01d..18c2e37184 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -107,15 +107,6 @@ def com_google_api_generator_repositories(): urls = ["https://github.com/grpc/grpc-proto/archive/%s.zip" % _io_grpc_proto_prefix], strip_prefix = "grpc-proto-%s" % _io_grpc_proto_prefix, ) - - # This hamcrest-core dependency is for running JUnit test manually, before JUnit 4.11 it's wrapped along with JUnit package. - # But now it has to be explicitly added. - _maybe( - jvm_maven_import_external, - name = "hamcrest-core", - artifact = "org.hamcrest:hamcrest-core:1.3", - server_urls = ["https://repo.maven.apache.org/maven2/"], - ) def _maybe(repo_rule, name, strip_repo_prefix = "", **kwargs): if not name.startswith(strip_repo_prefix): diff --git a/rules_bazel/java/java_diff_test.bzl b/rules_bazel/java/java_diff_test.bzl index 5c591b52e8..0b3ec96168 100644 --- a/rules_bazel/java/java_diff_test.bzl +++ b/rules_bazel/java/java_diff_test.bzl @@ -10,6 +10,7 @@ def _junit_output_impl(ctx): {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 ../{output} . """.format( test_runner_path = test_runner.path, From f91ee2cd54c261e8c892a0c59eaf7e642ec3e1e2 Mon Sep 17 00:00:00 2001 From: Xiaozhen Liu Date: Wed, 23 Sep 2020 21:49:50 +0000 Subject: [PATCH 39/39] add helpers in Utils --- .../gapic/dummy/FileDiffInfraDummyTest.java | 24 +++++++------------ .../{SaveCodegen.java => Utils.java} | 10 +++++++- 2 files changed, 17 insertions(+), 17 deletions(-) rename src/test/java/com/google/api/generator/test/framework/{SaveCodegen.java => Utils.java} (91%) diff --git a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java index 0a7e7c6137..060a613dac 100644 --- a/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java +++ b/src/test/java/com/google/api/generator/gapic/dummy/FileDiffInfraDummyTest.java @@ -21,7 +21,7 @@ import com.google.api.generator.engine.ast.ScopeNode; import com.google.api.generator.engine.writer.JavaWriterVisitor; import com.google.api.generator.test.framework.Assert; -import com.google.api.generator.test.framework.SaveCodegen; +import com.google.api.generator.test.framework.Utils; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -35,9 +35,11 @@ public class FileDiffInfraDummyTest { // created. // // TODO(xiaozhenliu): remove this test class once the file-diff infra is in place and well-tested. - private final String GOLDENFILES_DIRECTORY = getGoldenDir(); - private final String GOLDENFILES_SIMPLE_CLASS = getClassName() + "SimpleClass.golden"; - private final String GOLDENFILES_CLASS_WITH_HEADER = getClassName() + "ClassWithHeader.golden"; + private final String GOLDENFILES_DIRECTORY = Utils.getGoldenDir(this.getClass()); + private final String GOLDENFILES_SIMPLE_CLASS = + Utils.getClassName(this.getClass()) + "SimpleClass.golden"; + private final String GOLDENFILES_CLASS_WITH_HEADER = + Utils.getClassName(this.getClass()) + "ClassWithHeader.golden"; @Test public void simpleClass() { @@ -53,7 +55,7 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - SaveCodegen.saveCodegenToFile(this.getClass(), GOLDENFILES_SIMPLE_CLASS, visitor.write()); + Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_SIMPLE_CLASS, visitor.write()); Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_SIMPLE_CLASS); Assert.assertCodeEquals(goldenFilePath, visitor.write()); } @@ -72,7 +74,7 @@ public void classWithHeader() { JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); // Save the generated code to a file for updating goldens if needed. - SaveCodegen.saveCodegenToFile(this.getClass(), GOLDENFILES_CLASS_WITH_HEADER, visitor.write()); + Utils.saveCodegenToFile(this.getClass(), GOLDENFILES_CLASS_WITH_HEADER, visitor.write()); Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, GOLDENFILES_CLASS_WITH_HEADER); Assert.assertCodeEquals(goldenFilePath, visitor.write()); } @@ -86,16 +88,6 @@ public void simpleLineComment() { Assert.assertCodeEquals("// test strings comparison.", visitor.write()); } - private String getGoldenDir() { - return "src/test/java/" - + this.getClass().getPackage().getName().replace(".", "/") - + "/goldens/"; - } - - private String getClassName() { - return this.getClass().getSimpleName(); - } - private static final String APACHE_LICENSE_STRING = "Copyright 2020 Google LLC\n\n" + "Licensed under the Apache License, Version 2.0 (the \"License\");\n" diff --git a/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java b/src/test/java/com/google/api/generator/test/framework/Utils.java similarity index 91% rename from src/test/java/com/google/api/generator/test/framework/SaveCodegen.java rename to src/test/java/com/google/api/generator/test/framework/Utils.java index 71ce68979b..728be5f5b5 100644 --- a/src/test/java/com/google/api/generator/test/framework/SaveCodegen.java +++ b/src/test/java/com/google/api/generator/test/framework/Utils.java @@ -19,7 +19,7 @@ import java.nio.file.Path; import java.nio.file.Paths; -public class SaveCodegen { +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 @@ -55,6 +55,14 @@ private static String getTestoutGoldenDir(Class clazz) { return clazz.getPackage().getName().replace(".", "/") + "/goldens/"; } + public static String getGoldenDir(Class clazz) { + return "src/test/java/" + clazz.getPackage().getName().replace(".", "/") + "/goldens/"; + } + + public static String getClassName(Class clazz) { + return clazz.getSimpleName(); + } + public static class SaveCodegenToFileException extends RuntimeException { public SaveCodegenToFileException(String errorMessage) { super(errorMessage);