/*
* Copyright (c) 2004, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.test.util;
import org.postgresql.core.ServerVersion;
import org.postgresql.core.Version;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
@RunWith(Parameterized.class)
public class ServerVersionParseTest {
private final String versionString;
private final int versionNum;
private final String rejectReason;
public ServerVersionParseTest(String versionString, int versionNum, String rejectReason) {
this.versionString = versionString;
this.versionNum = versionNum;
this.rejectReason = rejectReason;
}
@Parameterized.Parameters(name = "str = {0}, expected = {1}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][]{
/* 4 part version tests */
{"7.4.0.0", 70400, null},
{"9.0.0.0", 90000, null},
{"9.0.1.0", 90001, null},
{"9.2.1.0", 90201, null},
{"7.4.0", 70400, null},
{"9.0.0", 90000, null},
{"9.0.1", 90001, null},
{"9.2.1", 90201, null},
/* Major only */
{"7.4", 70400, null},
{"9.0", 90000, null},
{"9.2", 90200, null},
{"9.6", 90600, null},
{"10", 100000, null},
{"11", 110000, null},
/* Multidigit */
{"9.4.10", 90410, null},
{"9.20.10", 92010, null},
/* After 10 */
{"10.1", 100001, null},
{"10.10", 100010, null},
{"11.1", 110001, null},
{"123.20", 1230020, null},
/* Fail cases */
{"9.20.100", -1, "Should've rejected three-digit minor version"},
{"9.100.10", -1, "Should've rejected three-digit second part of major version"},
{"10.100.10", -1, "10+ version should have 2 components only"},
{"12345.1", -1, "Too big version number"},
/* Preparsed */
{"90104", 90104, null},
{"090104", 90104, null},
{"070400", 70400, null},
{"100004", 100004, null},
{"10000", 10000, null},
/* --with-extra-version or beta/devel tags */
{"9.4devel", 90400, null},
{"9.4beta1", 90400, null},
{"10devel", 100000, null},
{"10beta1", 100000, null},
{"10.1devel", 100001, null},
{"10.1beta1", 100001, null},
{"9.4.1bobs", 90401, null},
{"9.4.1bobspatched9.4", 90401, null},
{"9.4.1-bobs-patched-postgres-v2.2", 90401, null},
});
}
@Test
public void run() {
try {
Version version = ServerVersion.from(versionString);
if (rejectReason == null) {
Assert.assertEquals("Parsing " + versionString, versionNum, version.getVersionNum());
} else {
Assert.fail("Should fail to parse " + versionString + ", " + rejectReason);
}
} catch (NumberFormatException e) {
if (rejectReason != null) {
return;
}
throw e;
}
}
}