blob: 824f0d2599a052428a56855874babbd0b9e069dd [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (c) 2012-2014 Monty Program Ab
// Copyright (c) 2015-2021 MariaDB Corporation Ab
package org.mariadb.jdbc.unit.util;
import static org.junit.jupiter.api.Assertions.*;
import java.nio.charset.StandardCharsets;
import org.junit.jupiter.api.Test;
import org.mariadb.jdbc.util.ClientParser;
@SuppressWarnings("ConstantConditions")
public class ClientParserTest {
private void parse(String sql, String[] expected, String[] expectedNoBackSlash) {
ClientParser parser = ClientParser.parameterParts(sql, false);
assertEquals(expected.length, parser.getParamCount() + 1, displayErr(parser, expected));
int pos = 0;
int paramPos = parser.getQuery().length;
for (int i = 0; i < parser.getParamCount(); i++) {
paramPos = parser.getParamPositions().get(i);
assertEquals(expected[i], new String(parser.getQuery(), pos, paramPos - pos));
pos = paramPos + 1;
}
assertEquals(expected[expected.length - 1], new String(parser.getQuery(), pos, paramPos - pos));
parser = ClientParser.parameterParts(sql, true);
assertEquals(
expectedNoBackSlash.length, parser.getParamCount() + 1, displayErr(parser, expected));
pos = 0;
paramPos = parser.getQuery().length;
for (int i = 0; i < parser.getParamCount(); i++) {
paramPos = parser.getParamPositions().get(i);
assertEquals(expectedNoBackSlash[i], new String(parser.getQuery(), pos, paramPos - pos));
pos = paramPos + 1;
}
assertEquals(
expectedNoBackSlash[expectedNoBackSlash.length - 1],
new String(parser.getQuery(), pos, paramPos - pos));
}
private String displayErr(ClientParser parser, String[] exp) {
StringBuilder sb = new StringBuilder();
sb.append("is:\n");
int pos = 0;
int paramPos = parser.getQuery().length;
for (int i = 0; i < parser.getParamCount(); i++) {
paramPos = parser.getParamPositions().get(i);
sb.append(new String(parser.getQuery(), pos, paramPos - pos, StandardCharsets.UTF_8))
.append("\n");
pos = paramPos + 1;
}
sb.append(new String(parser.getQuery(), pos, paramPos - pos));
sb.append("but was:\n");
for (String s : exp) {
sb.append(s).append("\n");
}
return sb.toString();
}
@Test
public void ClientParser() {
parse(
"SELECT '\\\\test' /*test* #/ ;`*/",
new String[] {"SELECT '\\\\test' /*test* #/ ;`*/"},
new String[] {"SELECT '\\\\test' /*test* #/ ;`*/"});
parse(
"DO '\\\"', \"\\'\"",
new String[] {"DO '\\\"', \"\\'\""},
new String[] {"DO '\\\"', \"\\'\""});
}
}