| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- /*
- * libdpkg - Debian packaging suite library routines
- * t-version.c - test version handling
- *
- * Copyright © 2009 Guillem Jover <guillem@debian.org>
- *
- * This is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2,
- * or (at your option) any later version.
- *
- * This is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with dpkg; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
- #include <dpkg-test.h>
- #include <dpkg-db.h>
- #define version(epoch, version, revision) \
- (struct versionrevision) { (epoch), (version), (revision) }
- static void
- test_version_compare(void)
- {
- struct versionrevision a, b;
- blankversion(&a);
- blankversion(&b);
- test_fail(epochsdiffer(&a, &b));
- a.epoch = 1;
- b.epoch = 2;
- test_pass(epochsdiffer(&a, &b));
- /* Test for version equality. */
- a = b = version(0, "0", "0");
- test_pass(versioncompare(&a, &b) == 0);
- a = version(0, "0", "00");
- b = version(0, "00", "0");
- test_pass(versioncompare(&a, &b) == 0);
- a = b = version(1, "2", "3");
- test_pass(versioncompare(&a, &b) == 0);
- /* Test for epoch difference. */
- a = version(0, "0", "0");
- b = version(1, "0", "0");
- test_pass(versioncompare(&a, &b) < 0);
- test_pass(versioncompare(&b, &a) > 0);
- /* FIXME: Complete. */
- }
- static void
- test_version_parse(void)
- {
- struct versionrevision a, b;
- /* Test 0 versions. */
- blankversion(&a);
- b = version(0, "0", "");
- test_pass(parseversion(&a, "0") == NULL);
- test_pass(versioncompare(&a, &b) == 0);
- test_pass(parseversion(&a, "0:0") == NULL);
- test_pass(versioncompare(&a, &b) == 0);
- test_pass(parseversion(&a, "0:0-") == NULL);
- test_pass(versioncompare(&a, &b) == 0);
- b = version(0, "0", "0");
- test_pass(parseversion(&a, "0:0-0") == NULL);
- 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(versioncompare(&a, &b) == 0);
- /* Test epoched versions. */
- b = version(1, "0", "");
- test_pass(parseversion(&a, "1:0") == NULL);
- test_pass(versioncompare(&a, &b) == 0);
- b = version(5, "1", "");
- test_pass(parseversion(&a, "5:1") == NULL);
- 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(versioncompare(&a, &b) == 0);
- b = version(0, "0-0-0", "0");
- test_pass(parseversion(&a, "0:0-0-0-0") == NULL);
- 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(versioncompare(&a, &b) == 0);
- b = version(0, "0:0:0", "0");
- test_pass(parseversion(&a, "0:0:0:0-0") == NULL);
- 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(versioncompare(&a, &b) == 0);
- b = version(0, "0-0:0", "0");
- test_pass(parseversion(&a, "0:0-0:0-0") == NULL);
- test_pass(versioncompare(&a, &b) == 0);
- /* Test valid characters in upstream version. */
- b = version(0, "azAZ09.-+~:", "0");
- test_pass(parseversion(&a, "0:azAZ09.-+~:-0") == NULL);
- 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(versioncompare(&a, &b) == 0);
- /* Test invalid characters in epoch. */
- test_fail(parseversion(&a, "a:0-0") == NULL);
- test_fail(parseversion(&a, "A:0-0") == NULL);
- /* FIXME: parseversion() should validate input! */
- #if 0
- /* Test invalid characters in upstream version. */
- test_fail(parseversion(&a, "0:!#@$%&/|\\<>()[]{};,=*^'-0") == NULL);
- /* Test invalid characters in revision. */
- test_fail(parseversion(&a, "0:0-!#@$%&/|\\<>()[]{};,=*^'") == NULL);
- #endif
- /* FIXME: Complete. */
- }
- static void
- test(void)
- {
- test_version_compare();
- test_version_parse();
- }
|