summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2011-09-24 17:07:17 +0200
committerBruno Haible <bruno@clisp.org>2011-09-24 17:07:17 +0200
commit2d52eeda72c875169c27768703dc6c1827251416 (patch)
treed338f5f59212be06ee972c5f618cf545fc356795
parent65cc817630059f59644c25303c099452961e243f (diff)
downloadgnulib-2d52eeda72c875169c27768703dc6c1827251416.tar.gz
Tests for function fread().
* modules/fread-tests: New file. * tests/test-fread.c: New file. * modules/stdio-tests (Depends-on): Add fread-tests.
-rw-r--r--ChangeLog5
-rw-r--r--modules/fread-tests12
-rw-r--r--modules/stdio-tests1
-rw-r--r--tests/test-fread.c90
4 files changed, 108 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4696e66322..9670e065ba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-09-24 Bruno Haible <bruno@clisp.org>
+ Tests for function fread().
+ * modules/fread-tests: New file.
+ * tests/test-fread.c: New file.
+ * modules/stdio-tests (Depends-on): Add fread-tests.
+
Activate fputc tests.
* modules/stdio-tests (Depends-on): Add fputc-tests.
diff --git a/modules/fread-tests b/modules/fread-tests
new file mode 100644
index 0000000000..49f0a71862
--- /dev/null
+++ b/modules/fread-tests
@@ -0,0 +1,12 @@
+Files:
+tests/test-fread.c
+tests/signature.h
+tests/macros.h
+
+Depends-on:
+
+configure.ac:
+
+Makefile.am:
+TESTS += test-fread
+check_PROGRAMS += test-fread
diff --git a/modules/stdio-tests b/modules/stdio-tests
index 6649a49eba..68f2ffd584 100644
--- a/modules/stdio-tests
+++ b/modules/stdio-tests
@@ -6,6 +6,7 @@ verify
stdio-c++-tests
fgetc-tests
fputc-tests
+fread-tests
configure.ac:
diff --git a/tests/test-fread.c b/tests/test-fread.c
new file mode 100644
index 0000000000..0f77dbfce1
--- /dev/null
+++ b/tests/test-fread.c
@@ -0,0 +1,90 @@
+/* Test of fread() function.
+ Copyright (C) 2011 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, 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, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include "signature.h"
+SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *));
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "macros.h"
+
+int
+main (int argc, char **argv)
+{
+ const char *filename = "test-fread.txt";
+
+ /* Prepare a file. */
+ {
+ const char text[] = "hello world";
+ int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600);
+ ASSERT (fd >= 0);
+ ASSERT (write (fd, text, sizeof (text)) == sizeof (text));
+ ASSERT (close (fd) == 0);
+ }
+
+ /* Test that fread() sets errno if someone else closes the stream
+ fd behind the back of stdio. */
+ {
+ FILE *fp = fopen (filename, "r");
+ char buf[5];
+ ASSERT (fp != NULL);
+ ASSERT (close (fileno (fp)) == 0);
+ errno = 0;
+ ASSERT (fread (buf, 1, sizeof (buf), fp) == 0);
+ ASSERT (errno == EBADF);
+ ASSERT (ferror (fp));
+ fclose (fp);
+ }
+
+ /* Test that fread() sets errno if the stream was constructed with
+ an invalid file descriptor. */
+ {
+ FILE *fp = fdopen (-1, "r");
+ if (fp != NULL)
+ {
+ char buf[1];
+ errno = 0;
+ ASSERT (fread (buf, 1, 1, fp) == 0);
+ ASSERT (errno == EBADF);
+ ASSERT (ferror (fp));
+ fclose (fp);
+ }
+ }
+ {
+ FILE *fp = fdopen (99, "r");
+ if (fp != NULL)
+ {
+ char buf[1];
+ errno = 0;
+ ASSERT (fread (buf, 1, 1, fp) == 0);
+ ASSERT (errno == EBADF);
+ ASSERT (ferror (fp));
+ fclose (fp);
+ }
+ }
+
+ /* Clean up. */
+ unlink (filename);
+
+ return 0;
+}