|
24 | 24 | import net.sf.jsqlparser.statement.create.table.*; |
25 | 25 | import net.sf.jsqlparser.statement.create.table.Index.ColumnParams; |
26 | 26 | import org.junit.jupiter.api.Test; |
| 27 | +import org.junit.jupiter.params.ParameterizedTest; |
| 28 | +import org.junit.jupiter.params.provider.Arguments; |
| 29 | +import org.junit.jupiter.params.provider.MethodSource; |
27 | 30 |
|
28 | 31 | import java.util.Arrays; |
29 | 32 | import java.util.Collections; |
30 | 33 | import java.util.List; |
| 34 | +import java.util.stream.Stream; |
31 | 35 |
|
32 | 36 | import static net.sf.jsqlparser.test.TestUtils.*; |
33 | | -import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; |
34 | 37 | import static org.junit.jupiter.api.Assertions.*; |
35 | 38 |
|
36 | 39 | public class AlterTest { |
@@ -1093,41 +1096,54 @@ public void testIssue2090LockExclusive() throws JSQLParserException { |
1093 | 1096 | assertEquals("EXCLUSIVE", lockExp.getLockOption()); |
1094 | 1097 | } |
1095 | 1098 |
|
1096 | | - @Test |
1097 | | - public void testIssue2089() throws JSQLParserException { |
1098 | | - String sql = "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4"; |
| 1099 | + @ParameterizedTest |
| 1100 | + @MethodSource("provideMySQLConvertTestCases") |
| 1101 | + public void testIssue2089(String sql, String expectedCharacterSet, String expectedCollation) |
| 1102 | + throws JSQLParserException { |
1099 | 1103 | Statement stmt = CCJSqlParserUtil.parse(sql); |
1100 | | - assertTrue(stmt instanceof Alter); |
| 1104 | + assertTrue(stmt instanceof Alter, |
| 1105 | + "Expected instance of Alter but got: " + stmt.getClass().getSimpleName()); |
| 1106 | + |
1101 | 1107 | Alter alter = (Alter) stmt; |
1102 | 1108 | assertEquals("test_table", alter.getTable().getFullyQualifiedName()); |
1103 | 1109 |
|
1104 | 1110 | List<AlterExpression> alterExpressions = alter.getAlterExpressions(); |
1105 | | - assertNotNull(alterExpressions); |
1106 | | - assertEquals(1, alterExpressions.size()); |
| 1111 | + assertNotNull(alterExpressions, "Alter expressions should not be null for SQL: " + sql); |
| 1112 | + assertEquals(1, alterExpressions.size(), "Expected 1 alter expression for SQL: " + sql); |
1107 | 1113 |
|
1108 | 1114 | AlterExpression convertExp = alterExpressions.get(0); |
1109 | 1115 | assertEquals(AlterOperation.CONVERT, convertExp.getOperation()); |
1110 | | - assertEquals("utf8mb4", convertExp.getCharacterSet()); |
1111 | | - assertNull(convertExp.getCollation()); |
1112 | | - } |
1113 | | - |
1114 | | - @Test |
1115 | | - public void testIssue2089WithCollation() throws JSQLParserException { |
1116 | | - String sql = |
1117 | | - "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; |
1118 | | - Statement stmt = CCJSqlParserUtil.parse(sql); |
1119 | | - assertTrue(stmt instanceof Alter); |
1120 | | - Alter alter = (Alter) stmt; |
1121 | | - assertEquals("test_table", alter.getTable().getFullyQualifiedName()); |
1122 | 1116 |
|
1123 | | - List<AlterExpression> alterExpressions = alter.getAlterExpressions(); |
1124 | | - assertNotNull(alterExpressions); |
1125 | | - assertEquals(1, alterExpressions.size()); |
| 1117 | + assertEquals(expectedCharacterSet, convertExp.getCharacterSet(), |
| 1118 | + "CHARACTER SET mismatch for SQL: " + sql); |
| 1119 | + assertEquals(expectedCollation, convertExp.getCollation(), |
| 1120 | + "COLLATE mismatch for SQL: " + sql); |
| 1121 | + assertSqlCanBeParsedAndDeparsed(sql); |
| 1122 | + } |
1126 | 1123 |
|
1127 | | - AlterExpression convertExp = alterExpressions.get(0); |
1128 | | - assertEquals(AlterOperation.CONVERT, convertExp.getOperation()); |
1129 | | - assertEquals("utf8mb4", convertExp.getCharacterSet()); |
1130 | | - assertEquals("utf8mb4_general_ci", convertExp.getCollation()); |
| 1124 | + private static Stream<Arguments> provideMySQLConvertTestCases() { |
| 1125 | + return Stream.of( |
| 1126 | + Arguments.of("ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4", "utf8mb4", |
| 1127 | + null), |
| 1128 | + Arguments.of( |
| 1129 | + "ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", |
| 1130 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1131 | + Arguments.of( |
| 1132 | + "ALTER TABLE test_table DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", |
| 1133 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1134 | + Arguments.of( |
| 1135 | + "ALTER TABLE test_table DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci", |
| 1136 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1137 | + Arguments.of( |
| 1138 | + "ALTER TABLE test_table CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci", |
| 1139 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1140 | + Arguments.of( |
| 1141 | + "ALTER TABLE test_table CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci", |
| 1142 | + "utf8mb4", "utf8mb4_general_ci"), |
| 1143 | + Arguments.of("ALTER TABLE test_table DEFAULT CHARACTER SET utf8mb4", "utf8mb4", |
| 1144 | + null), |
| 1145 | + Arguments.of("ALTER TABLE test_table DEFAULT CHARACTER SET = utf8mb4", "utf8mb4", |
| 1146 | + null)); |
1131 | 1147 | } |
1132 | 1148 |
|
1133 | 1149 | @Test |
|
0 commit comments