2
* libdpkg - Debian packaging suite library routines
3
* t-version.c - test version handling
5
* Copyright © 2009 Guillem Jover <guillem@debian.org>
7
* This is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as
9
* published by the Free Software Foundation; either version 2,
10
* or (at your option) any later version.
12
* This is distributed in the hope that it will be useful, but
13
* WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public
18
* License along with dpkg; if not, write to the Free Software
19
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
#include <dpkg/test.h>
23
#include <dpkg/dpkg-db.h>
25
#define version(epoch, version, revision) \
26
(struct versionrevision) { (epoch), (version), (revision) }
29
test_version_compare(void)
31
struct versionrevision a, b;
35
test_fail(epochsdiffer(&a, &b));
39
test_pass(epochsdiffer(&a, &b));
41
/* Test for version equality. */
42
a = b = version(0, "0", "0");
43
test_pass(versioncompare(&a, &b) == 0);
45
a = version(0, "0", "00");
46
b = version(0, "00", "0");
47
test_pass(versioncompare(&a, &b) == 0);
49
a = b = version(1, "2", "3");
50
test_pass(versioncompare(&a, &b) == 0);
52
/* Test for epoch difference. */
53
a = version(0, "0", "0");
54
b = version(1, "0", "0");
55
test_pass(versioncompare(&a, &b) < 0);
56
test_pass(versioncompare(&b, &a) > 0);
58
/* FIXME: Complete. */
62
test_version_parse(void)
64
struct versionrevision a, b;
66
/* Test 0 versions. */
68
b = version(0, "0", "");
70
test_pass(parseversion(&a, "0") == NULL);
71
test_pass(versioncompare(&a, &b) == 0);
73
test_pass(parseversion(&a, "0:0") == NULL);
74
test_pass(versioncompare(&a, &b) == 0);
76
test_pass(parseversion(&a, "0:0-") == NULL);
77
test_pass(versioncompare(&a, &b) == 0);
79
b = version(0, "0", "0");
80
test_pass(parseversion(&a, "0:0-0") == NULL);
81
test_pass(versioncompare(&a, &b) == 0);
83
b = version(0, "0.0", "0.0");
84
test_pass(parseversion(&a, "0:0.0-0.0") == NULL);
85
test_pass(versioncompare(&a, &b) == 0);
87
/* Test epoched versions. */
88
b = version(1, "0", "");
89
test_pass(parseversion(&a, "1:0") == NULL);
90
test_pass(versioncompare(&a, &b) == 0);
92
b = version(5, "1", "");
93
test_pass(parseversion(&a, "5:1") == NULL);
94
test_pass(versioncompare(&a, &b) == 0);
96
/* Test multiple dashes. */
97
b = version(0, "0-0", "0");
98
test_pass(parseversion(&a, "0:0-0-0") == NULL);
99
test_pass(versioncompare(&a, &b) == 0);
101
b = version(0, "0-0-0", "0");
102
test_pass(parseversion(&a, "0:0-0-0-0") == NULL);
103
test_pass(versioncompare(&a, &b) == 0);
105
/* Test multiple colons. */
106
b = version(0, "0:0", "0");
107
test_pass(parseversion(&a, "0:0:0-0") == NULL);
108
test_pass(versioncompare(&a, &b) == 0);
110
b = version(0, "0:0:0", "0");
111
test_pass(parseversion(&a, "0:0:0:0-0") == NULL);
112
test_pass(versioncompare(&a, &b) == 0);
114
/* Test multiple dashes and colons. */
115
b = version(0, "0:0-0", "0");
116
test_pass(parseversion(&a, "0:0:0-0-0") == NULL);
117
test_pass(versioncompare(&a, &b) == 0);
119
b = version(0, "0-0:0", "0");
120
test_pass(parseversion(&a, "0:0-0:0-0") == NULL);
121
test_pass(versioncompare(&a, &b) == 0);
123
/* Test valid characters in upstream version. */
124
b = version(0, "azAZ09.-+~:", "0");
125
test_pass(parseversion(&a, "0:azAZ09.-+~:-0") == NULL);
126
test_pass(versioncompare(&a, &b) == 0);
128
/* Test valid characters in revision. */
129
b = version(0, "0", "azAZ09.+~");
130
test_pass(parseversion(&a, "0:0-azAZ09.+~") == NULL);
131
test_pass(versioncompare(&a, &b) == 0);
133
/* Test invalid characters in epoch. */
134
test_fail(parseversion(&a, "a:0-0") == NULL);
135
test_fail(parseversion(&a, "A:0-0") == NULL);
137
/* FIXME: parseversion() should validate input! */
139
/* Test invalid characters in upstream version. */
140
test_fail(parseversion(&a, "0:!#@$%&/|\\<>()[]{};,=*^'-0") == NULL);
142
/* Test invalid characters in revision. */
143
test_fail(parseversion(&a, "0:0-!#@$%&/|\\<>()[]{};,=*^'") == NULL);
146
/* FIXME: Complete. */
152
test_version_compare();
153
test_version_parse();