|
|
@@ -63,9 +63,21 @@ test_version_compare(void)
|
|
|
/* FIXME: Complete. */
|
|
|
}
|
|
|
|
|
|
+#define test_warn(e) \
|
|
|
+ do { \
|
|
|
+ test_pass((e).type == DPKG_MSG_WARN); \
|
|
|
+ dpkg_error_destroy(&(e)); \
|
|
|
+ } while (0)
|
|
|
+#define test_error(e) \
|
|
|
+ do { \
|
|
|
+ test_pass((e).type == DPKG_MSG_ERROR); \
|
|
|
+ dpkg_error_destroy(&(e)); \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
static void
|
|
|
test_version_parse(void)
|
|
|
{
|
|
|
+ struct dpkg_error err;
|
|
|
struct versionrevision a, b;
|
|
|
const char *p;
|
|
|
char *verstr;
|
|
|
@@ -74,100 +86,109 @@ test_version_parse(void)
|
|
|
blankversion(&a);
|
|
|
b = version(0, "0", "");
|
|
|
|
|
|
- test_pass(parseversion(&a, "0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
- test_pass(parseversion(&a, "0:0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
- test_pass(parseversion(&a, "0:0-") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0-", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
b = version(0, "0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
b = version(0, "0.0", "0.0");
|
|
|
- test_pass(parseversion(&a, "0:0.0-0.0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0.0-0.0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test epoched versions. */
|
|
|
b = version(1, "0", "");
|
|
|
- test_pass(parseversion(&a, "1:0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "1:0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
b = version(5, "1", "");
|
|
|
- test_pass(parseversion(&a, "5:1") == NULL);
|
|
|
+ test_pass(parseversion(&a, "5:1", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test multiple dashes. */
|
|
|
b = version(0, "0-0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0-0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0-0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
b = version(0, "0-0-0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0-0-0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0-0-0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test multiple colons. */
|
|
|
b = version(0, "0:0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0:0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0:0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
b = version(0, "0:0:0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0:0:0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0:0:0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test multiple dashes and colons. */
|
|
|
b = version(0, "0:0-0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0:0-0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0:0-0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
b = version(0, "0-0:0", "0");
|
|
|
- test_pass(parseversion(&a, "0:0-0:0-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0-0:0-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test valid characters in upstream version. */
|
|
|
b = version(0, "09azAZ.-+~:", "0");
|
|
|
- test_pass(parseversion(&a, "0:09azAZ.-+~:-0") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:09azAZ.-+~:-0", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test valid characters in revision. */
|
|
|
b = version(0, "0", "azAZ09.+~");
|
|
|
- test_pass(parseversion(&a, "0:0-azAZ09.+~") == NULL);
|
|
|
+ test_pass(parseversion(&a, "0:0-azAZ09.+~", NULL) == 0);
|
|
|
test_pass(versioncompare(&a, &b) == 0);
|
|
|
|
|
|
/* Test empty version. */
|
|
|
- test_fail(parseversion(&a, "") == NULL);
|
|
|
+ test_pass(parseversion(&a, "", &err) != 0);
|
|
|
+ test_error(err);
|
|
|
|
|
|
/* Test empty upstream version after epoch. */
|
|
|
- test_fail(parseversion(&a, "0:") == NULL);
|
|
|
+ test_fail(parseversion(&a, "0:", &err) == 0);
|
|
|
+ test_error(err);
|
|
|
|
|
|
/* Test version with embedded spaces. */
|
|
|
- test_fail(parseversion(&a, "0:0 0-1") == NULL);
|
|
|
+ test_fail(parseversion(&a, "0:0 0-1", &err) == 0);
|
|
|
+ test_error(err);
|
|
|
|
|
|
/* Test invalid characters in epoch. */
|
|
|
- test_fail(parseversion(&a, "a:0-0") == NULL);
|
|
|
- test_fail(parseversion(&a, "A:0-0") == NULL);
|
|
|
+ test_fail(parseversion(&a, "a:0-0", &err) == 0);
|
|
|
+ test_error(err);
|
|
|
+ test_fail(parseversion(&a, "A:0-0", &err) == 0);
|
|
|
+ test_error(err);
|
|
|
|
|
|
/* Test upstream version not starting with a digit */
|
|
|
- test_fail(parseversion(&a, "0:abc3-0") == NULL);
|
|
|
+ test_fail(parseversion(&a, "0:abc3-0", &err) == 0);
|
|
|
+ test_warn(err);
|
|
|
|
|
|
/* Test invalid characters in upstream version. */
|
|
|
verstr = m_strdup("0:0a-0");
|
|
|
for (p = "!#@$%&/|\\<>()[]{};,_=*^'"; *p; p++) {
|
|
|
verstr[3] = *p;
|
|
|
- test_fail(parseversion(&a, verstr) == NULL);
|
|
|
+ test_fail(parseversion(&a, verstr, &err) == 0);
|
|
|
+ test_warn(err);
|
|
|
}
|
|
|
free(verstr);
|
|
|
|
|
|
/* Test invalid characters in revision. */
|
|
|
- test_fail(parseversion(&a, "0:0-0:0") == NULL);
|
|
|
+ test_fail(parseversion(&a, "0:0-0:0", &err) == 0);
|
|
|
+ test_warn(err);
|
|
|
|
|
|
verstr = m_strdup("0:0-0");
|
|
|
for (p = "!#@$%&/|\\<>()[]{}:;,_=*^'"; *p; p++) {
|
|
|
verstr[4] = *p;
|
|
|
- test_fail(parseversion(&a, verstr) == NULL);
|
|
|
+ test_fail(parseversion(&a, verstr, &err) == 0);
|
|
|
+ test_warn(err);
|
|
|
}
|
|
|
free(verstr);
|
|
|
|