From: Bruno Haible Date: Fri, 29 Feb 2008 00:08:18 +0000 (+0100) Subject: More tests for freadptr. X-Git-Tag: v0.1~7719 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=5a79e1d1718961fa0fc9bee70062614fcc8ec7d9;p=gnulib.git More tests for freadptr. --- diff --git a/ChangeLog b/ChangeLog index 040fffa2d..ceadefd23 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-28 Bruno Haible + + * tests/test-freadptr.c: Add a test for behaviour after ungetc. + * tests/test-freadptr.sh: Also test non-seekable stdin. + 2008-02-28 Sergey Poznyakoff * build-aux/bootstrap (source_base, m4_base) @@ -5,7 +10,6 @@ (gnulib_tool_options): Do not hardcode base directories, use the above variables instead. - 2008-02-28 Atsushi SAKAI * lib/xsize.h: Fix typo in comment: s/tupe/type/. diff --git a/tests/test-freadptr.c b/tests/test-freadptr.c index 5c5e41e8a..5c69bbe8f 100644 --- a/tests/test-freadptr.c +++ b/tests/test-freadptr.c @@ -47,18 +47,79 @@ main (int argc, char **argv) if (lseek (0, 0, SEEK_CUR) == nbytes) /* An unbuffered stdio, such as BeOS or on uClibc compiled without - __STDIO_BUFFERS. */ + __STDIO_BUFFERS. Or stdin is a pipe. */ ASSERT (freadahead (stdin) == 0); else { /* Normal buffered stdio. */ const char stdin_contents[] = - "#!/bin/sh\n\n./test-freadptr${EXEEXT} 5 < \"$srcdir/test-freadptr.sh\" || exit 1\nexit 0\n"; + "#!/bin/sh\n\n./test-freadptr${EXEEXT} 5 < \"$srcdir/test-freadptr.sh\" || exit 1\ncat \"$srcdir/test-freadptr.sh\" | ./test-freadptr${EXEEXT} 5 || exit 1\nexit 0\n"; const char *expected = stdin_contents + nbytes; - size_t available = freadahead (stdin); + size_t available; + size_t available2; + size_t available3; + + /* Test normal behaviour. */ + available = freadahead (stdin); ASSERT (available != 0); ASSERT (available <= strlen (expected)); - ASSERT (memcmp (freadptr (stdin), expected, available) == 0); + { + const char *ptr = freadptr (stdin); + + ASSERT (ptr != NULL); + ASSERT (memcmp (ptr, expected, available) == 0); + } + + /* Test behaviour after normal ungetc. */ + ungetc (fgetc (stdin), stdin); + available2 = freadahead (stdin); + ASSERT (/* available2 == available - 1 || */ available2 == available); +#if 0 + if (available2 == available - 1) + { + ASSERT (freadptr (stdin) == NULL); + } + else +#endif + { + const char *ptr = freadptr (stdin); + + ASSERT (ptr != NULL); + ASSERT (memcmp (ptr, expected, available) == 0); + } + + /* Test behaviour after arbitrary ungetc. */ + fgetc (stdin); + ungetc ('@', stdin); + available3 = freadahead (stdin); + ASSERT (available3 == 0 || available3 == 1 || /* available3 == available - 1 || */ available3 == available); + if (available3 == 0) + ; + else if (available3 == 1) + { + const char *ptr = freadptr (stdin); + + if (ptr != NULL) + { + ASSERT (ptr[0] == '@'); + } + } +#if 0 + else if (available3 == available - 1) + { + ASSERT (freadptr (stdin) == NULL); + } +#endif + else + { + const char *ptr = freadptr (stdin); + + if (ptr != NULL) + { + ASSERT (ptr[0] == '@'); + ASSERT (memcmp (ptr + 1, expected + 1, available - 1) == 0); + } + } } return 0; diff --git a/tests/test-freadptr.sh b/tests/test-freadptr.sh index 945c31d62..97819b292 100755 --- a/tests/test-freadptr.sh +++ b/tests/test-freadptr.sh @@ -1,4 +1,5 @@ #!/bin/sh ./test-freadptr${EXEEXT} 5 < "$srcdir/test-freadptr.sh" || exit 1 +cat "$srcdir/test-freadptr.sh" | ./test-freadptr${EXEEXT} 5 || exit 1 exit 0