Extend stream unit testing by test code for svn_stream_skip.
* subversion/tests/libsvn_subr/stream-test.c
(test_stream_seek_file, test_stream_seek_stringbuf,
test_stream_seek_translated): replicate seek&read code to test skip()
git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/integrate-stream-api-extensions@1072516 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/subversion/tests/libsvn_subr/stream-test.c b/subversion/tests/libsvn_subr/stream-test.c
index 66e911c..5a48175 100644
--- a/subversion/tests/libsvn_subr/stream-test.c
+++ b/subversion/tests/libsvn_subr/stream-test.c
@@ -259,6 +259,7 @@
apr_status_t status;
static const char *NL = APR_EOL_STR;
svn_stream_mark_t *mark;
+ apr_size_t count;
status = apr_file_open(&f, fname, (APR_READ | APR_WRITE | APR_CREATE |
APR_TRUNCATE | APR_DELONCLOSE), APR_OS_DEFAULT, pool);
@@ -301,6 +302,19 @@
SVN_ERR(svn_stream_readline(stream, &line, NL, &eof, pool));
SVN_TEST_ASSERT(eof);
+ /* Go back to the begin of last line and try to skip it
+ * NOT including the EOL. */
+ SVN_ERR(svn_stream_seek(stream, mark));
+ count = strlen(file_data[1]);
+ SVN_ERR(svn_stream_skip(stream, &count));
+ SVN_TEST_ASSERT(count == strlen(file_data[1]));
+ /* The remaining line should be empty */
+ SVN_ERR(svn_stream_readline(stream, &line, NL, &eof, pool));
+ SVN_TEST_ASSERT(! eof && strcmp(line->data, "") == 0);
+ /* The next read should return EOF. */
+ SVN_ERR(svn_stream_readline(stream, &line, NL, &eof, pool));
+ SVN_TEST_ASSERT(eof);
+
SVN_ERR(svn_stream_close(stream));
return SVN_NO_ERROR;
@@ -332,6 +346,18 @@
buf[3] = '\0';
SVN_TEST_STRING_ASSERT(buf, "Two");
+ /* Go back to the begin of last word and try to skip some of it */
+ SVN_ERR(svn_stream_seek(stream, mark));
+ len = 2;
+ SVN_ERR(svn_stream_skip(stream, &len));
+ SVN_TEST_ASSERT(len == 2);
+ /* The remaining line should be empty */
+ len = 3;
+ SVN_ERR(svn_stream_read(stream, buf, &len));
+ buf[len] = '\0';
+ SVN_TEST_ASSERT(len == 1);
+ SVN_TEST_STRING_ASSERT(buf, "o");
+
SVN_ERR(svn_stream_close(stream));
return SVN_NO_ERROR;
@@ -370,6 +396,16 @@
buf[4] = '\0';
SVN_TEST_STRING_ASSERT(buf, " was");
+ SVN_ERR(svn_stream_seek(translated_stream, mark));
+ len = 2;
+ SVN_ERR(svn_stream_skip(translated_stream, &len));
+ SVN_TEST_ASSERT(len == 2);
+ len = 2;
+ SVN_ERR(svn_stream_read(translated_stream, buf, &len));
+ SVN_TEST_ASSERT(len == 2);
+ buf[len] = '\0';
+ SVN_TEST_STRING_ASSERT(buf, "as");
+
/* Seek from inside of keyword to inside of keyword. */
SVN_ERR(svn_stream_mark(translated_stream, &mark, pool));
len = 9;
@@ -384,6 +420,16 @@
buf[9] = '\0';
SVN_TEST_STRING_ASSERT(buf, " expanded");
+ SVN_ERR(svn_stream_seek(translated_stream, mark));
+ len = 6;
+ SVN_ERR(svn_stream_skip(translated_stream, &len));
+ SVN_TEST_ASSERT(len == 6);
+ len = 3;
+ SVN_ERR(svn_stream_read(translated_stream, buf, &len));
+ SVN_TEST_ASSERT(len == 3);
+ buf[len] = '\0';
+ SVN_TEST_STRING_ASSERT(buf, "ded");
+
/* Seek from inside of keyword to outside of keyword. */
SVN_ERR(svn_stream_mark(translated_stream, &mark, pool));
len = 4;
@@ -398,6 +444,16 @@
buf[4] = '\0';
SVN_TEST_STRING_ASSERT(buf, " $Tw");
+ SVN_ERR(svn_stream_seek(translated_stream, mark));
+ len = 2;
+ SVN_ERR(svn_stream_skip(translated_stream, &len));
+ SVN_TEST_ASSERT(len == 2);
+ len = 2;
+ SVN_ERR(svn_stream_read(translated_stream, buf, &len));
+ SVN_TEST_ASSERT(len == 2);
+ buf[len] = '\0';
+ SVN_TEST_STRING_ASSERT(buf, "Tw");
+
/* Seek from outside of keyword to outside of keyword. */
SVN_ERR(svn_stream_mark(translated_stream, &mark, pool));
len = 1;
@@ -412,6 +468,16 @@
buf[1] = '\0';
SVN_TEST_STRING_ASSERT(buf, "o");
+ SVN_ERR(svn_stream_seek(translated_stream, mark));
+ len = 2;
+ SVN_ERR(svn_stream_skip(translated_stream, &len));
+ SVN_TEST_ASSERT(len == 1);
+ len = 1;
+ SVN_ERR(svn_stream_read(translated_stream, buf, &len));
+ SVN_TEST_ASSERT(len == 0);
+ buf[len] = '\0';
+ SVN_TEST_STRING_ASSERT(buf, "");
+
SVN_ERR(svn_stream_close(stream));
return SVN_NO_ERROR;