You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/03/03 03:39:37 UTC

[shardingsphere] branch master updated: Upgrade ExternalSQLParserIT to Junit 5 (#24434)

This is an automated email from the ASF dual-hosted git repository.

sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new a7acaef510c Upgrade ExternalSQLParserIT to Junit 5 (#24434)
a7acaef510c is described below

commit a7acaef510c352cbdf96ff839bf022616271cef6
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Mar 3 11:39:30 2023 +0800

    Upgrade ExternalSQLParserIT to Junit 5 (#24434)
    
    * Upgrade ExternalSQLParserIT to Junit 5
    
    * Fix javadoc
---
 .../it/mysql/external/ExternalMySQLParserIT.java   | 20 +-------
 .../external/ExternalPostgreSQLParserIT.java       | 21 ++------
 .../sql/parser/external/ExternalSQLParserIT.java   | 58 ++++++++++++++--------
 ...meter.java => ExternalSQLParserITSettings.java} | 46 +++++++++++------
 .../external/ExternalSQLParserTestParameter.java   |  5 --
 .../ExternalSQLParserTestParameterLoader.java      |  5 --
 6 files changed, 73 insertions(+), 82 deletions(-)

diff --git a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
index ba851615973..d1027a8b67c 100644
--- a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
+++ b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
@@ -18,24 +18,8 @@
 package org.apache.shardingsphere.test.it.sql.parser.it.mysql.external;
 
 import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
-import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
-import org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
-import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.net.URI;
-import java.util.Collection;
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserITSettings;
 
+@ExternalSQLParserITSettings(value = "MySQL", caseURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t", resultURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r")
 public final class ExternalMySQLParserIT extends ExternalSQLParserIT {
-    
-    public ExternalMySQLParserIT(final ExternalSQLParserTestParameter testParam) {
-        super(testParam);
-    }
-    
-    @Parameters(name = "{0}")
-    public static Collection<ExternalSQLParserTestParameter> getTestParameters() {
-        String caseURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";
-        String resultURL = "https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r";
-        return new ExternalSQLParserTestParameterLoader(new GitHubTestParameterLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL), "MySQL", "CSV");
-    }
 }
diff --git a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
index db9080e2ef8..746f3e9a24c 100644
--- a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
+++ b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
@@ -18,24 +18,9 @@
 package org.apache.shardingsphere.test.it.sql.parser.it.postgresql.external;
 
 import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
-import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
-import org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
-import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.net.URI;
-import java.util.Collection;
+import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserITSettings;
 
+@ExternalSQLParserITSettings(value = "PostgreSQL",
+        caseURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/sql", resultURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/expected")
 public final class ExternalPostgreSQLParserIT extends ExternalSQLParserIT {
-    
-    public ExternalPostgreSQLParserIT(final ExternalSQLParserTestParameter testParam) {
-        super(testParam);
-    }
-    
-    @Parameters(name = "{0} (PostgreSQL) -> {1}")
-    public static Collection<ExternalSQLParserTestParameter> getTestParameters() {
-        String caseURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/sql";
-        String resultURL = "https://github.com/postgres/postgres/tree/master/src/test/regress/expected";
-        return new ExternalSQLParserTestParameterLoader(new GitHubTestParameterLoadStrategy()).load(URI.create(caseURL), URI.create(resultURL), "PostgreSQL", "CSV");
-    }
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
index 9de34ba4423..1e2e65090e6 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
@@ -23,35 +23,31 @@ import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
 import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.test.it.sql.parser.external.env.SQLParserExternalITEnvironment;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
+import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl.GitHubTestParameterLoadStrategy;
 import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
 import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporterCreator;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
+import java.net.URI;
+import java.util.Collection;
 import java.util.Properties;
+import java.util.stream.Stream;
 
-@RunWith(Parameterized.class)
 public abstract class ExternalSQLParserIT {
     
-    private final String sqlCaseId;
-    
-    private final String sql;
-    
-    private final String databaseType;
-    
-    private final SQLParseResultReporter resultReporter;
-    
-    protected ExternalSQLParserIT(final ExternalSQLParserTestParameter testParam) {
-        sqlCaseId = testParam.getSqlCaseId();
-        sql = testParam.getSql();
-        databaseType = testParam.getDatabaseType();
-        resultReporter = TypedSPILoader.getService(SQLParseResultReporterCreator.class, testParam.getReportType()).create(databaseType);
-    }
-    
-    @Test
-    public final void assertParseSQL() {
+    @ParameterizedTest(name = "{0} ({1}) -> {2}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public final void assertParseSQL(final String sqlCaseId, final String databaseType, final String sql, final String reportType) {
         boolean isSuccess = true;
+        SQLParseResultReporter resultReporter = TypedSPILoader.getService(SQLParseResultReporterCreator.class, reportType).create(databaseType);
         try {
             ParseASTNode parseASTNode = new SQLParserEngine(databaseType, new CacheOption(128, 1024L)).parse(sql, false);
             new SQLVisitorEngine(databaseType, "STATEMENT", true, new Properties()).visit(parseASTNode);
@@ -60,4 +56,24 @@ public abstract class ExternalSQLParserIT {
         }
         resultReporter.printResult(sqlCaseId, databaseType, isSuccess, sql);
     }
+    
+    private static boolean isEnabled() {
+        return SQLParserExternalITEnvironment.getInstance().isSqlParserITEnabled();
+    }
+    
+    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+            ExternalSQLParserITSettings settings = extensionContext.getRequiredTestClass().getAnnotation(ExternalSQLParserITSettings.class);
+            return null == settings
+                    ? Stream.empty()
+                    : getTestParameters(settings).stream().map(each -> Arguments.of(each.getSqlCaseId(), each.getDatabaseType(), each.getSql(), each.getReportType()));
+        }
+        
+        private Collection<ExternalSQLParserTestParameter> getTestParameters(final ExternalSQLParserITSettings settings) {
+            return new ExternalSQLParserTestParameterLoader(
+                    new GitHubTestParameterLoadStrategy()).load(URI.create(settings.caseURL()), URI.create(settings.resultURL()), settings.value(), settings.reportType());
+        }
+    }
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserITSettings.java
similarity index 55%
copy from test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
copy to test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserITSettings.java
index e3d76e1268d..f550e93bcac 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserITSettings.java
@@ -17,26 +17,42 @@
 
 package org.apache.shardingsphere.test.it.sql.parser.external;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 /**
- * External SQL parser test parameter.
+ * External SQL parser integrate test settings.
  */
-@RequiredArgsConstructor
-@Getter
-public final class ExternalSQLParserTestParameter {
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExternalSQLParserITSettings {
     
-    private final String sqlCaseId;
+    /**
+     * Get to be tested database types.
+     * 
+     * @return to be tested database types
+     */
+    String value();
     
-    private final String databaseType;
+    /**
+     * Get test case URL.
+     * 
+     * @return test case URL
+     */
+    String caseURL();
     
-    private final String sql;
+    /**
+     * Get test case result URL.
+     * 
+     * @return test case result URL
+     */
+    String resultURL();
     
-    private final String reportType;
-    
-    @Override
-    public String toString() {
-        return String.format("%s (%s) -> %s", sqlCaseId, databaseType, sql);
-    }
+    /**
+     * Report type.
+     * 
+     * @return get report type
+     */
+    String reportType() default "CSV";
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
index e3d76e1268d..f6b30720f46 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
@@ -34,9 +34,4 @@ public final class ExternalSQLParserTestParameter {
     private final String sql;
     
     private final String reportType;
-    
-    @Override
-    public String toString() {
-        return String.format("%s (%s) -> %s", sqlCaseId, databaseType, sql);
-    }
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
index 723bd19733b..7306b003fc3 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
@@ -22,14 +22,12 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
 import org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
 import org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
-import org.apache.shardingsphere.test.it.sql.parser.external.env.SQLParserExternalITEnvironment;
 
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.URI;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -54,9 +52,6 @@ public final class ExternalSQLParserTestParameterLoader {
      * @return loaded test parameters
      */
     public Collection<ExternalSQLParserTestParameter> load(final URI sqlCaseURI, final URI resultURI, final String databaseType, final String reportType) {
-        if (!SQLParserExternalITEnvironment.getInstance().isSqlParserITEnabled()) {
-            return Collections.emptyList();
-        }
         Collection<ExternalSQLParserTestParameter> result = new LinkedList<>();
         Map<String, FileSummary> sqlCaseFileSummaries = loadStrategy.loadSQLCaseFileSummaries(sqlCaseURI).stream().collect(Collectors.toMap(FileSummary::getFileName, v -> v, (k, v) -> v));
         Map<String, FileSummary> resultFileSummaries = loadStrategy.loadSQLCaseFileSummaries(resultURI).stream().collect(Collectors.toMap(FileSummary::getFileName, v -> v, (k, v) -> v));