From 42db152aafa0a0861a0dfa3d47055bee9f08d2ff Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Tue, 8 Sep 2020 17:56:39 -0700 Subject: [PATCH 01/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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/15] 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 7cc821976c381f5c1b1bf826e208682edd13d050 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Thu, 10 Sep 2020 18:13:54 -0700 Subject: [PATCH 12/15] 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 ac1893db467894c7f72731e963691b476d0efcc5 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Mon, 14 Sep 2020 17:43:33 -0700 Subject: [PATCH 13/15] feedback --- .../generator/gapic/dummy/FileDiffInfraDummyTest.java | 6 +++--- .../com/google/api/generator/test/framework/Assert.java | 9 +++++++++ .../com/google/api/generator/test/framework/Differ.java | 8 +++++--- 3 files changed, 17 insertions(+), 6 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 d59baf49b6..f8c9cfa464 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 @@ -34,6 +34,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/"; + @Test public void simpleClass() { ClassDefinition classDef = @@ -80,9 +83,6 @@ public void simpleLineComment() { Assert.assertCodeEquals("// test strings comparison.", 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" diff --git a/src/test/java/com/google/api/generator/test/framework/Assert.java b/src/test/java/com/google/api/generator/test/framework/Assert.java index 0f30c8ba9d..aea7ec00eb 100644 --- a/src/test/java/com/google/api/generator/test/framework/Assert.java +++ b/src/test/java/com/google/api/generator/test/framework/Assert.java @@ -19,6 +19,13 @@ import junit.framework.AssertionFailedError; public class Assert { + /** + * Assert that the generated code is identical with the content in corresponding golden file. The + * differences will be emitted to test-logs if any. + * + * @param goldenPath the Path of the golden file. + * @param codegen the generated source code. + */ public static void assertCodeEquals(Path goldenPath, String codegen) { List diffList = Differ.diff(goldenPath, codegen); if (!diffList.isEmpty()) { @@ -26,6 +33,8 @@ public static void assertCodeEquals(Path goldenPath, String codegen) { } } + // Assert that two strings are identical, else throw AssertionFailedError and emit the difference + // to the test-logs. public static void assertCodeEquals(String expected, String codegen) { List diffList = Differ.diff(expected, codegen); if (!diffList.isEmpty()) { diff --git a/src/test/java/com/google/api/generator/test/framework/Differ.java b/src/test/java/com/google/api/generator/test/framework/Differ.java index 7f4879d130..7a9a9cd9fa 100644 --- a/src/test/java/com/google/api/generator/test/framework/Differ.java +++ b/src/test/java/com/google/api/generator/test/framework/Differ.java @@ -25,8 +25,10 @@ import java.util.List; public class Differ { + private static final String LINE_BREAK = "\\r?\\n"; + public static List diff(Path goldenFilePath, String codegen) { - List revised = Arrays.asList(codegen.split("\\r?\\n")); + List revised = Arrays.asList(codegen.split(LINE_BREAK)); List original = null; try { original = Files.readAllLines(goldenFilePath); @@ -38,8 +40,8 @@ public static List diff(Path goldenFilePath, String codegen) { } public static List diff(String expectedStr, String actualStr) { - List revised = Arrays.asList(actualStr.split("\\r?\\n")); - List original = Arrays.asList(expectedStr.split("\\r?\\n")); + List revised = Arrays.asList(actualStr.split(LINE_BREAK)); + List original = Arrays.asList(expectedStr.split(LINE_BREAK)); return diffTwoStringLists(original, revised); } From 5b2ef17b3bee480c2a1f4f540affe170f4995c43 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Mon, 14 Sep 2020 17:54:44 -0700 Subject: [PATCH 14/15] cleanup --- .../com/google/api/generator/test/framework/Assert.java | 8 ++++---- .../com/google/api/generator/test/framework/Differ.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/com/google/api/generator/test/framework/Assert.java b/src/test/java/com/google/api/generator/test/framework/Assert.java index aea7ec00eb..4ed6a932fd 100644 --- a/src/test/java/com/google/api/generator/test/framework/Assert.java +++ b/src/test/java/com/google/api/generator/test/framework/Assert.java @@ -21,9 +21,9 @@ public class Assert { /** * Assert that the generated code is identical with the content in corresponding golden file. The - * differences will be emitted to test-logs if any. + * differences will be emitted to the test-logs if any. * - * @param goldenPath the Path of the golden file. + * @param goldenPath the path of the golden file. * @param codegen the generated source code. */ public static void assertCodeEquals(Path goldenPath, String codegen) { @@ -33,8 +33,8 @@ public static void assertCodeEquals(Path goldenPath, String codegen) { } } - // Assert that two strings are identical, else throw AssertionFailedError and emit the difference - // to the test-logs. + // Assert that two strings are identical, else throw AssertionFailedError and emit the + // differences to the test-logs. public static void assertCodeEquals(String expected, String codegen) { List diffList = Differ.diff(expected, codegen); if (!diffList.isEmpty()) { diff --git a/src/test/java/com/google/api/generator/test/framework/Differ.java b/src/test/java/com/google/api/generator/test/framework/Differ.java index 7a9a9cd9fa..6a3c364d33 100644 --- a/src/test/java/com/google/api/generator/test/framework/Differ.java +++ b/src/test/java/com/google/api/generator/test/framework/Differ.java @@ -25,10 +25,10 @@ import java.util.List; public class Differ { - private static final String LINE_BREAK = "\\r?\\n"; + private static final String LINE_SPLITTER = "\\r?\\n"; public static List diff(Path goldenFilePath, String codegen) { - List revised = Arrays.asList(codegen.split(LINE_BREAK)); + List revised = Arrays.asList(codegen.split(LINE_SPLITTER)); List original = null; try { original = Files.readAllLines(goldenFilePath); @@ -40,8 +40,8 @@ public static List diff(Path goldenFilePath, String codegen) { } public static List diff(String expectedStr, String actualStr) { - List revised = Arrays.asList(actualStr.split(LINE_BREAK)); - List original = Arrays.asList(expectedStr.split(LINE_BREAK)); + List revised = Arrays.asList(actualStr.split(LINE_SPLITTER)); + List original = Arrays.asList(expectedStr.split(LINE_SPLITTER)); return diffTwoStringLists(original, revised); } From 83171943bbb373da31ba0c3a56480d1d5ecc46a2 Mon Sep 17 00:00:00 2001 From: xiaozhenliugg Date: Wed, 16 Sep 2020 09:20:10 -0700 Subject: [PATCH 15/15] typo --- .../api/generator/gapic/dummy/FileDiffInfraDummyTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 f8c9cfa464..98f766cab5 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 @@ -51,9 +51,9 @@ public void simpleClass() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - Path goldeFilePath = + Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestSimpleClass.golden"); - Assert.assertCodeEquals(goldeFilePath, visitor.write()); + Assert.assertCodeEquals(goldenFilePath, visitor.write()); } @Test @@ -69,9 +69,9 @@ public void classWithHeader() { .build(); JavaWriterVisitor visitor = new JavaWriterVisitor(); classDef.accept(visitor); - Path goldeFilePath = + Path goldenFilePath = Paths.get(GOLDENFILES_DIRECTORY, "FileDiffInfraDummyTestClassWithHeader.golden"); - Assert.assertCodeEquals(goldeFilePath, visitor.write()); + Assert.assertCodeEquals(goldenFilePath, visitor.write()); } // Add a simple test for two strings comparison.