commit 1c11b35cd62a3d95ca80329b5edb14875c18fa6a from: Stefan Sperling date: Sat Jan 12 18:48:12 2019 UTC add a test for got_compare_paths() commit - 8069f63672650a2836d923d8f3889829ac63b04c commit + 1c11b35cd62a3d95ca80329b5edb14875c18fa6a blob - bd68cd59dd3fc57df8b43aee72ba61e5cda697d3 blob + b5554554510d2ea5d8e632dd20c19931b5da7aa1 --- regress/Makefile +++ regress/Makefile @@ -1,3 +1,3 @@ -SUBDIR = cmdline delta idset repository worktree +SUBDIR = cmdline delta idset path repository worktree .include blob - /dev/null blob + ebb3acb5a444722ac27006125494c5877a9e4ae9 (mode 644) --- /dev/null +++ regress/path/Makefile @@ -0,0 +1,11 @@ +.PATH:${.CURDIR}/../../lib + +PROG = path_test +SRCS = error.c path.c sha1.c path_test.c + +CPPFLAGS = -I${.CURDIR}/../../include -I${.CURDIR}/../../lib +LDADD = -lutil -lz + +NOMAN = yes + +.include blob - /dev/null blob + c8333832714181a42144f2e99b30d523e98f686c (mode 644) --- /dev/null +++ regress/path/path_test.c @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2018 Stefan Sperling + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include + +#include "got_error.h" + +#include "got_lib_path.h" + +#ifndef nitems +#define nitems(_a) (sizeof(_a) / sizeof((_a)[0])) +#endif + +static int verbose; + +void +test_printf(char *fmt, ...) +{ + va_list ap; + + if (!verbose) + return; + + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); +} + +static int +path_compare(void) +{ + struct path_cmp_test { + const char *path1; + const char *path2; + int expected; + } test_data[] = { + { "", "", 0 }, + { "/", "/", 0 }, + { "/a", "/b", -1 }, + { "x/a", "x.a", -1 }, + { "x.a", "x/a", 1 }, + { "//foo", "/bar", -1 }, + { "/foo", "/bar", 1 }, + { "/foo/sub", "/bar", 1 }, + { "/foo", "/bar/sub", 1 }, + { "/foo/", "/bar", 1 }, + { "/foo", "/bar/", 1 }, + { "/foo/", "/bar/", 1 }, + { "/bar/", "/bar/", 0 }, + { "/bar/sub", "/bar/", 1 }, + { "/bar/sub/sub2", "/bar/", 1 }, + { "/bar/sub/sub2", "/bar", 1 }, + { "/bar.sub.sub2", "/bar", 1 }, + { "/bar/sub/sub2", "/bar.c", -1 }, + }; + int i; + + for (i = 0; i < nitems(test_data); i++) { + const char *path1 = test_data[i].path1; + const char *path2 = test_data[i].path2; + int expected = test_data[i].expected; + int cmp = got_compare_paths(path1, path2); + + if (cmp != expected) { + test_printf("%d: '%s' vs '%s' == %d; expected %d\n", + i, path1, path2, cmp, expected); + return 0; + } + } + + return 1; +} + +#define RUN_TEST(expr, name) \ + { test_ok = (expr); \ + printf("test_%s %s\n", (name), test_ok ? "ok" : "failed"); \ + failure = (failure || !test_ok); } + +void +usage(void) +{ + fprintf(stderr, "usage: path_test [-v]\n"); +} + +int +main(int argc, char *argv[]) +{ + int test_ok = 0, failure = 0; + int ch; + +#ifndef PROFILE + if (pledge("stdio", NULL) == -1) + err(1, "pledge"); +#endif + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + verbose = 1; + break; + default: + usage(); + return 1; + } + } + argc -= optind; + argv += optind; + + RUN_TEST(path_compare(), "path_compare"); + + return failure ? 1 : 0; +}