You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2010/06/20 13:49:01 UTC
svn commit: r956349 -
/subversion/trunk/subversion/tests/libsvn_diff/parse-diff-test.c
Author: dannas
Date: Sun Jun 20 11:49:01 2010
New Revision: 956349
URL: http://svn.apache.org/viewvc?rev=956349&view=rev
Log:
In the C-test for diff parsing, factor out code for testing content.
Improves readability and makes it easier to write new tests.
At the same time remove TODO about removing duplicated code.
* subversion/tests/libsvn_diff/parse-diff-test.c
(check_content): New.
(test_parse_unidiff,
test_parse_git_diff,
test_parse_property_diff,
test_parse_property_and_text_diff): Use check_content() instead of
repeating the same test assertions over and over. At the same time,
remove obsolete variables.
Modified:
subversion/trunk/subversion/tests/libsvn_diff/parse-diff-test.c
Modified: subversion/trunk/subversion/tests/libsvn_diff/parse-diff-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_diff/parse-diff-test.c?rev=956349&r1=956348&r2=956349&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_diff/parse-diff-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_diff/parse-diff-test.c Sun Jun 20 11:49:01 2010
@@ -31,9 +31,6 @@
/* Used to terminate lines in large multi-line string literals. */
#define NL APR_EOL_STR
-/* ### There's a lot of duplicated code in the tests. It would be a good
- * ### idea to gather the boilerplate code in functions. */
-
static const char *unidiff =
"Index: A/mu (deleted)" NL
"===================================================================" NL
@@ -157,6 +154,38 @@ create_patch_file(apr_file_t **patch_fil
return SVN_NO_ERROR;
}
+/* Check that CONTENT equals what's inside EXPECTED. */
+static svn_error_t *
+check_content(svn_stream_t *content, const char *expected, apr_pool_t *pool)
+{
+ svn_stream_t *exp;
+ svn_stringbuf_t *exp_buf;
+ svn_stringbuf_t *content_buf;
+ svn_boolean_t exp_eof;
+ svn_boolean_t content_eof;
+
+ exp = svn_stream_from_string(svn_string_create(expected, pool),
+ pool);
+
+ while (TRUE)
+ {
+ SVN_ERR(svn_stream_readline(exp, &exp_buf, NL, &exp_eof, pool));
+ SVN_ERR(svn_stream_readline(content, &content_buf, NL, &content_eof,
+ pool));
+ SVN_TEST_ASSERT(exp_eof == content_eof);
+ if (exp_eof)
+ break;
+ if (strcmp(exp_buf->data, content_buf->data))
+ return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+ "Expected '%s' but was '%s'", exp_buf->data,
+ content_buf->data);
+ }
+
+ SVN_TEST_ASSERT(content_buf->len == 0);
+
+ return SVN_NO_ERROR;
+}
+
static svn_error_t *
test_parse_unidiff(apr_pool_t *pool)
{
@@ -176,8 +205,6 @@ test_parse_unidiff(apr_pool_t *pool)
{
svn_patch_t *patch;
svn_hunk_t *hunk;
- svn_stringbuf_t *buf;
- svn_boolean_t eof;
apr_off_t pos;
svn_stream_t *original_text;
svn_stream_t *modified_text;
@@ -212,26 +239,14 @@ test_parse_unidiff(apr_pool_t *pool)
modified_text = hunk->modified_text;
}
- /* Make sure original text was parsed correctly. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- /* Make sure modified text was parsed correctly. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "some more bytes to 'gamma'"));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+ SVN_ERR(check_content(original_text,
+ "This is the file 'gamma'." NL,
+ pool));
+
+ SVN_ERR(check_content(modified_text,
+ "This is the file 'gamma'." NL
+ "some more bytes to 'gamma'" NL,
+ pool));
/* Parse the second patch. */
SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, reverse,
@@ -263,26 +278,14 @@ test_parse_unidiff(apr_pool_t *pool)
modified_text = hunk->modified_text;
}
- /* Make sure original text was parsed correctly. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "some less bytes to 'gamma'"));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- /* Make sure modified text was parsed correctly. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+ SVN_ERR(check_content(original_text,
+ "This is the file 'gamma'." NL
+ "some less bytes to 'gamma'" NL,
+ pool));
+
+ SVN_ERR(check_content(modified_text,
+ "This is the file 'gamma'." NL,
+ pool));
reverse = !reverse;
}
@@ -297,11 +300,7 @@ test_parse_git_diff(apr_pool_t *pool)
apr_file_t *patch_file;
svn_patch_t *patch;
- svn_stringbuf_t *buf;
- svn_boolean_t eof;
svn_hunk_t *hunk;
- svn_stream_t *original_text;
- svn_stream_t *modified_text;
const char *fname = "test_parse_git_diff.patch";
SVN_ERR(create_patch_file(&patch_file, fname, git_unidiff, pool));
@@ -329,29 +328,15 @@ test_parse_git_diff(apr_pool_t *pool)
SVN_TEST_ASSERT(patch->hunks->nelts == 1);
hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
- original_text = hunk->original_text;
- modified_text = hunk->modified_text;
- /* Make sure original text was parsed correctly. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- /* Make sure modified text was parsed correctly. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'gamma'."));
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "some more bytes to 'gamma'"));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+ SVN_ERR(check_content(hunk->original_text,
+ "This is the file 'gamma'." NL,
+ pool));
+
+ SVN_ERR(check_content(hunk->modified_text,
+ "This is the file 'gamma'." NL
+ "some more bytes to 'gamma'" NL,
+ pool));
/* Parse a copied empty file */
SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file,
@@ -387,11 +372,7 @@ test_parse_property_diff(apr_pool_t *poo
{
apr_file_t *patch_file;
svn_patch_t *patch;
- svn_stringbuf_t *buf;
- svn_boolean_t eof;
svn_hunk_t *hunk;
- svn_stream_t *original_text;
- svn_stream_t *modified_text;
apr_array_header_t *hunks;
const char *fname = "test_parse_property_diff.patch";
@@ -411,56 +392,40 @@ test_parse_property_diff(apr_pool_t *poo
hunks = apr_hash_get(patch->property_hunks, "prop_add", APR_HASH_KEY_STRING);
SVN_TEST_ASSERT(hunks->nelts == 1);
hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
- original_text = hunk->original_text;
- modified_text = hunk->modified_text;
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "value"));
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+ SVN_ERR(check_content(hunk->original_text,
+ "",
+ pool));
+
+ SVN_ERR(check_content(hunk->modified_text,
+ "value" NL,
+ pool));
/* Check the deleted property */
hunks = apr_hash_get(patch->property_hunks, "prop_del", APR_HASH_KEY_STRING);
SVN_TEST_ASSERT(hunks->nelts == 1);
hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
- original_text = hunk->original_text;
- modified_text = hunk->modified_text;
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "value"));
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+
+ SVN_ERR(check_content(hunk->original_text,
+ "value" NL,
+ pool));
+
+ SVN_ERR(check_content(hunk->modified_text,
+ "",
+ pool));
/* Check the modified property */
hunks = apr_hash_get(patch->property_hunks, "prop_mod", APR_HASH_KEY_STRING);
SVN_TEST_ASSERT(hunks->nelts == 1);
hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
- original_text = hunk->original_text;
- modified_text = hunk->modified_text;
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "value"));
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "new value"));
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+
+ SVN_ERR(check_content(hunk->original_text,
+ "value" NL,
+ pool));
+
+ SVN_ERR(check_content(hunk->modified_text,
+ "new value" NL,
+ pool));
return SVN_NO_ERROR;
}
@@ -470,11 +435,7 @@ test_parse_property_and_text_diff(apr_po
{
apr_file_t *patch_file;
svn_patch_t *patch;
- svn_stringbuf_t *buf;
- svn_boolean_t eof;
svn_hunk_t *hunk;
- svn_stream_t *original_text;
- svn_stream_t *modified_text;
apr_array_header_t *hunks;
const char *fname = "test_parse_property_and_text_diff.patch";
@@ -493,47 +454,28 @@ test_parse_property_and_text_diff(apr_po
/* Check contents of text hunk */
hunk = APR_ARRAY_IDX(patch->hunks, 0, svn_hunk_t *);
- original_text = hunk->original_text;
- modified_text = hunk->modified_text;
- /* Make sure original text was parsed correctly. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'iota'."));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- /* Make sure modified text was parsed correctly. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "This is the file 'iota'."));
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "some more bytes to 'iota'"));
- /* Now we should get EOF. */
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+ SVN_ERR(check_content(hunk->original_text,
+ "This is the file 'iota'." NL,
+ pool));
+
+ SVN_ERR(check_content(hunk->modified_text,
+ "This is the file 'iota'." NL
+ "some more bytes to 'iota'" NL,
+ pool));
/* Check the added property */
hunks = apr_hash_get(patch->property_hunks, "prop_add", APR_HASH_KEY_STRING);
SVN_TEST_ASSERT(hunks->nelts == 1);
hunk = APR_ARRAY_IDX(hunks, 0 , svn_hunk_t *);
- original_text = hunk->original_text;
- modified_text = hunk->modified_text;
- SVN_ERR(svn_stream_readline(original_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
-
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(! eof);
- SVN_TEST_ASSERT(! strcmp(buf->data, "value"));
- SVN_ERR(svn_stream_readline(modified_text, &buf, NL, &eof, pool));
- SVN_TEST_ASSERT(eof);
- SVN_TEST_ASSERT(buf->len == 0);
+ SVN_ERR(check_content(hunk->original_text,
+ "",
+ pool));
+
+ SVN_ERR(check_content(hunk->modified_text,
+ "value" NL,
+ pool));
return SVN_NO_ERROR;
}