[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
filenamecat test
From: |
Bruno Haible |
Subject: |
filenamecat test |
Date: |
Thu, 11 Oct 2007 22:25:41 +0200 |
User-agent: |
KMail/1.5.4 |
Hi Jim,
The test embedded in lib/filenamecat.c is not interactive and therefore could
make a good automatic unit test. How about this patch? As a side effect, it
will also verify that filenamecat.h really declares the function.
2007-10-11 Bruno Haible <address@hidden>
* modules/filenamecat-tests: New file.
* tests/test-filenamecat.c: New file, extracted from lib/filenamecat.c.
* lib/filenamecat.c: Remove test code.
*** lib/filenamecat.c.orig 2007-10-11 22:22:08.000000000 +0200
--- lib/filenamecat.c 2007-10-11 22:16:19.000000000 +0200
***************
*** 100,140 ****
xalloc_die ();
return p;
}
-
- #ifdef TEST_FILE_NAME_CONCAT
- # include <stdlib.h>
- # include <stdio.h>
- int
- main ()
- {
- static char const *const tests[][3] =
- {
- {"a", "b", "a/b"},
- {"a/", "b", "a/b"},
- {"a/", "/b", "a/b"},
- {"a", "/b", "a/b"},
-
- {"/", "b", "/b"},
- {"/", "/b", "/b"},
- {"/", "/", "/"},
- {"a", "/", "a/"}, /* this might deserve a diagnostic */
- {"/a", "/", "/a/"}, /* this might deserve a diagnostic */
- {"a", "//b", "a/b"},
- {"", "a", "a"}, /* this might deserve a diagnostic */
- };
- size_t i;
- bool fail = false;
- for (i = 0; i < sizeof tests / sizeof tests[0]; i++)
- {
- char *base_in_result;
- char const *const *t = tests[i];
- char *res = file_name_concat (t[0], t[1], &base_in_result);
- if (strcmp (res, t[2]) != 0)
- {
- printf ("got %s, expected %s\n", res, t[2]);
- fail = true;
- }
- }
- exit (fail ? EXIT_FAILURE : EXIT_SUCCESS);
- }
- #endif
--- 100,102 ----
============================= modules/filenamecat-tests ======================
Files:
tests/test-filenamecat.c
Depends-on:
stdbool
configure.ac:
Makefile.am:
TESTS += test-filenamecat
check_PROGRAMS += test-filenamecat
============================== tests/test-filenamecat.c ======================
/* Test of concatenation of two arbitrary file names.
Copyright (C) 1996-2007 Free Software Foundation, Inc.
This program 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 3 of the License, or
(at your option) any later version.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */
/* Written by Jim Meyering. */
#include <config.h>
#include "filenamecat.h"
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main ()
{
static char const *const tests[][3] =
{
{"a", "b", "a/b"},
{"a/", "b", "a/b"},
{"a/", "/b", "a/b"},
{"a", "/b", "a/b"},
{"/", "b", "/b"},
{"/", "/b", "/b"},
{"/", "/", "/"},
{"a", "/", "a/"}, /* this might deserve a diagnostic */
{"/a", "/", "/a/"}, /* this might deserve a diagnostic */
{"a", "//b", "a/b"},
{"", "a", "a"}, /* this might deserve a diagnostic */
};
unsigned int i;
bool fail = false;
for (i = 0; i < sizeof tests / sizeof tests[0]; i++)
{
char *base_in_result;
char const *const *t = tests[i];
char *res = file_name_concat (t[0], t[1], &base_in_result);
if (strcmp (res, t[2]) != 0)
{
fprintf (stderr, "test #%u: got %s, expected %s\n", i, res, t[2]);
fail = true;
}
}
exit (fail ? EXIT_FAILURE : EXIT_SUCCESS);
}
- filenamecat test,
Bruno Haible <=