Module Name:    src
Committed By:   pgoyette
Date:           Wed Dec 22 23:45:44 UTC 2010

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/lib/libc/gen: Makefile
Added Files:
        src/tests/lib/libc/gen: t_basedirname.c

Log Message:
Migrate a couple more tests from the old regress structure to atf


To generate a diff of this commit:
cvs rdiff -u -r1.185 -r1.186 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.2 -r1.3 src/tests/lib/libc/gen/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/lib/libc/gen/t_basedirname.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.185 src/distrib/sets/lists/tests/mi:1.186
--- src/distrib/sets/lists/tests/mi:1.185	Tue Dec 21 18:05:43 2010
+++ src/distrib/sets/lists/tests/mi	Wed Dec 22 23:45:44 2010
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.185 2010/12/21 18:05:43 njoly Exp $
+# $NetBSD: mi,v 1.186 2010/12/22 23:45:44 pgoyette Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -318,6 +318,7 @@
 ./usr/libdata/debug/usr/tests/lib/csu/h_initfini3.debug			tests-lib-debug		debug,atf
 ./usr/libdata/debug/usr/tests/lib/libc					tests-lib-debug
 ./usr/libdata/debug/usr/tests/lib/libc/gen				tests-lib-debug
+./usr/libdata/debug/usr/tests/lib/libc/gen/t_basedirname.debug		tests-lib-debug		debug,atf
 ./usr/libdata/debug/usr/tests/lib/libc/gen/t_glob_star.debug		tests-lib-debug		debug,atf
 ./usr/libdata/debug/usr/tests/lib/libc/gen/t_syslog_pthread.debug		tests-lib-debug		debug,atf
 ./usr/libdata/debug/usr/tests/lib/libc/hash				tests-lib-debug
@@ -1533,8 +1534,9 @@
 ./usr/tests/lib/libc/Atffile			tests-lib-tests		atf
 ./usr/tests/lib/libc/gen			tests-lib-tests
 ./usr/tests/lib/libc/gen/Atffile		tests-lib-tests		atf
+./usr/tests/lib/libc/gen/t_basedirname		tests-lib-tests		atf
 ./usr/tests/lib/libc/gen/t_glob_star		tests-lib-tests		atf
-./usr/tests/lib/libc/gen/t_syslog_pthread		tests-lib-tests		atf
+./usr/tests/lib/libc/gen/t_syslog_pthread	tests-lib-tests		atf
 ./usr/tests/lib/libc/hash			tests-lib-tests
 ./usr/tests/lib/libc/hash/Atffile		tests-lib-tests		atf
 ./usr/tests/lib/libc/hash/t_sha2		tests-lib-tests		atf

Index: src/tests/lib/libc/gen/Makefile
diff -u src/tests/lib/libc/gen/Makefile:1.2 src/tests/lib/libc/gen/Makefile:1.3
--- src/tests/lib/libc/gen/Makefile:1.2	Fri Dec 17 19:12:30 2010
+++ src/tests/lib/libc/gen/Makefile	Wed Dec 22 23:45:44 2010
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.2 2010/12/17 19:12:30 pooka Exp $
+# $NetBSD: Makefile,v 1.3 2010/12/22 23:45:44 pgoyette Exp $
 
 .include <bsd.own.mk>
 
@@ -6,6 +6,7 @@
 
 TESTS_C+=	t_glob_star
 TESTS_C+=	t_syslog_pthread
+TESTS_C+=	t_basedirname
 
 LDADD.t_syslog_pthread+=-lpthread
 

Added files:

Index: src/tests/lib/libc/gen/t_basedirname.c
diff -u /dev/null src/tests/lib/libc/gen/t_basedirname.c:1.1
--- /dev/null	Wed Dec 22 23:45:44 2010
+++ src/tests/lib/libc/gen/t_basedirname.c	Wed Dec 22 23:45:44 2010
@@ -0,0 +1,202 @@
+/*	$NetBSD: t_basedirname.c,v 1.1 2010/12/22 23:45:44 pgoyette Exp $	*/
+
+/*
+ * Regression test for basename(3).
+ *
+ * Written by Jason R. Thorpe <thor...@netbsd.org>, Oct. 2002.
+ * Public domain.
+ */
+
+#include <atf-c.h>
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h>
+
+struct {
+	const char *input;
+	const char *output;
+} test_basename_table[] = {
+/*
+ * The following are taken from the "Sample Input and Output Strings
+ * for basename()" table in IEEE Std 1003.1-2001.
+ */
+	{ "/usr/lib",		"lib" },
+	{ "/usr/",		"usr" },
+	{ "/",			"/" },
+	{ "///",		"/" },
+	{ "//usr//lib//",	"lib" },
+/*
+ * IEEE Std 1003.1-2001:
+ *
+ *	If path is a null pointer or points to an empty string,
+ *	basename() shall return a pointer to the string "." .
+ */
+	{ "",			"." },
+	{ NULL,			"." },
+/*
+ * IEEE Std 1003.1-2001:
+ *
+ *	If the string is exactly "//", it is implementation-defined
+ *	whether "/" or "//" is returned.
+ *
+ * The NetBSD implementation returns "/".
+ */
+	{ "//",			"/" },
+
+	{ NULL,			NULL }
+};
+
+struct {
+	const char *input;
+	const char *output;
+} test_dirname_table[] = {
+/*
+ * The following are taken from the "Sample Input and Output Strings
+ * for dirname()" table in IEEE Std 1003.1-2001.
+ */
+	{ "/usr/lib",		"/usr" },
+	{ "/usr/",		"/" },
+	{ "usr",		"." },
+	{ "/",			"/" },
+	{ ".",			"." },
+	{ "..",			"." },
+/*
+ * IEEE Std 1003.1-2001:
+ *
+ *	If path is a null pointer or points to an empty string,
+ *	dirname() shall return a pointer to the string "." .
+ */
+	{ "",			"." },
+	{ NULL,			"." },
+/*
+ * IEEE Std 1003.1-2001:
+ *
+ *	Since the meaning of the leading "//" is implementation-defined,
+ *	dirname("//foo") may return either "//" or "/" (but nothing else).
+ *
+ * The NetBSD implementation returns "/".
+ */
+	{ "//foo",		"/" },
+/*
+ * Make sure the trailing slashes after the directory name component
+ * get trimmed.  The Std does not talk about this, but this is what
+ * Solaris 8's dirname(3) does.
+ */
+	{ "/usr///lib",		"/usr" },
+
+	{ NULL,			NULL }
+};
+
+ATF_TC(t_basename);
+
+ATF_TC_HEAD(t_basename, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test basename(3) with POSIX examples");
+}
+
+ATF_TC_BODY(t_basename, tc)
+{
+	char testbuf[32], *base;
+	int i;
+
+	for (i = 0; test_basename_table[i].output != NULL; i++) {
+		if (test_basename_table[i].input != NULL) {
+			if (strlen(test_basename_table[i].input) >=
+			    sizeof(testbuf))
+				atf_tc_skip("Testbuf too small!");
+			strcpy(testbuf, test_basename_table[i].input);
+			base = basename(testbuf);
+		} else
+			base = basename(NULL);
+
+		/*
+		 * basename(3) is allowed to modify the input buffer.
+		 * However, that is considered hostile by some programs,
+		 * and so we elect to consider this an error.
+		 *
+		 * This is not a problem, as basename(3) is also allowed
+		 * to return a pointer to a statically-allocated buffer
+		 * (it is explicitly not required to be reentrant).
+		 */
+		if (test_basename_table[i].input != NULL &&
+		    strcmp(test_basename_table[i].input, testbuf) != 0) {
+			fprintf(stderr,
+			    "Input buffer for \"%s\" was modified\n",
+			    test_basename_table[i].input);
+			atf_tc_fail("Input buffer was modified.");
+		}
+
+		/* Make sure the result is correct. */
+		if (strcmp(test_basename_table[i].output, base) != 0) {
+			fprintf(stderr,
+			    "Input \"%s\", output \"%s\", expected \"%s\"\n",
+			    test_basename_table[i].input ==
+				NULL ? "(null)" : test_basename_table[i].input,
+			    base, test_basename_table[i].output);
+			atf_tc_fail("Output does not match expected value.");
+		}
+	}
+}
+
+
+ATF_TC(t_dirname);
+
+ATF_TC_HEAD(t_dirname, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test dirname(3) with POSIX examples");
+}
+
+ATF_TC_BODY(t_dirname, tc)
+{
+	char testbuf[32], *base;
+	int i;
+
+	for (i = 0; test_dirname_table[i].output != NULL; i++) {
+		if (test_dirname_table[i].input != NULL) {
+			if (strlen(test_dirname_table[i].input) >=
+			    sizeof(testbuf))
+				atf_tc_skip("Testbuf too small!");
+			strcpy(testbuf, test_dirname_table[i].input);
+			base = dirname(testbuf);
+		} else
+			base = dirname(NULL);
+
+		/*
+		 * dirname(3) is allowed to modify the input buffer.
+		 * However, that is considered hostile by some programs,
+		 * and so we elect to consider this an error.
+		 *
+		 * This is not a problem, as dirname(3) is also allowed
+		 * to return a pointer to a statically-allocated buffer
+		 * (it is explicitly not required to be reentrant).
+		 */
+		if (test_dirname_table[i].input != NULL &&
+		    strcmp(test_dirname_table[i].input, testbuf) != 0) {
+			fprintf(stderr,
+			    "Input buffer for \"%s\" was modified\n",
+			    test_dirname_table[i].input);
+			atf_tc_fail("Input buffer was modified.");
+		}
+
+		/* Make sure the result is correct. */
+		if (strcmp(test_dirname_table[i].output, base) != 0) {
+			fprintf(stderr,
+			    "Input \"%s\", output \"%s\", expected \"%s\"\n",
+			    test_dirname_table[i].input ==
+				NULL ? "(null)" : test_dirname_table[i].input,
+			    base, test_dirname_table[i].output);
+			atf_tc_fail("Output does not match expected value.");
+		}
+	}
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+	ATF_TP_ADD_TC(tp, t_basename);
+	ATF_TP_ADD_TC(tp, t_dirname);
+
+	return atf_no_error();
+}

Reply via email to