summaryrefslogtreecommitdiff
path: root/subversion/tests/libsvn_diff/parse-diff-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/tests/libsvn_diff/parse-diff-test.c')
-rw-r--r--subversion/tests/libsvn_diff/parse-diff-test.c114
1 files changed, 112 insertions, 2 deletions
diff --git a/subversion/tests/libsvn_diff/parse-diff-test.c b/subversion/tests/libsvn_diff/parse-diff-test.c
index 9a44369..d116f04 100644
--- a/subversion/tests/libsvn_diff/parse-diff-test.c
+++ b/subversion/tests/libsvn_diff/parse-diff-test.c
@@ -25,6 +25,8 @@
#include "../svn_test.h"
#include "svn_diff.h"
+#include "svn_hash.h"
+#include "svn_mergeinfo.h"
#include "svn_pools.h"
#include "svn_utf.h"
@@ -253,6 +255,27 @@ static const char *unidiff_lacking_trailing_eol =
" This is the file 'gamma'." NL
"+some more bytes to 'gamma'"; /* Don't add NL after this line */
+static const char *unidiff_with_mergeinfo =
+ "Index: A/C" NL
+ "===================================================================" NL
+ "--- A/C\t(revision 2)" NL
+ "+++ A/C\t(working copy)" NL
+ "Modified: svn:ignore" NL
+ "## -7,6 +7,7 ##" NL
+ " configure" NL
+ " libtool" NL
+ " .gdb_history" NL
+ "+.swig_checked" NL
+ " *.orig" NL
+ " *.rej" NL
+ " TAGS" NL
+ "Modified: svn:mergeinfo" NL
+ "## -0,1 +0,3 ##" NL
+ " Reverse-merged /subversion/branches/1.6.x-r935631:r952683-955333" NL
+ " /subversion/branches/nfc-nfd-aware-client:r870276,870376 をマージしました"NL
+ " Fusionné /subversion/branches/1.7.x-r1507044:r1507300-1511568" NL
+ " Merged /subversion/branches/1.8.x-openssl-dirs:r1535139" NL;
+/* The above diff intentionally contains i18n versions of some lines. */
/* Create a PATCH_FILE containing the contents of DIFF. */
static svn_error_t *
@@ -644,7 +667,7 @@ test_parse_property_diff(apr_pool_t *pool)
prop_patch = apr_hash_get(patch->prop_patches, "prop_add",
APR_HASH_KEY_STRING);
- SVN_TEST_ASSERT(!strcmp("prop_add", prop_patch->name));
+ SVN_TEST_STRING_ASSERT(prop_patch->name, "prop_add");
SVN_TEST_ASSERT(prop_patch->operation == svn_diff_op_added);
hunks = prop_patch->hunks;
@@ -957,9 +980,92 @@ test_parse_unidiff_lacking_trailing_eol(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_parse_unidiff_with_mergeinfo(apr_pool_t *pool)
+{
+ svn_patch_file_t *patch_file;
+ svn_boolean_t reverse;
+ svn_boolean_t ignore_whitespace;
+ int i;
+ apr_pool_t *iterpool;
+
+ reverse = FALSE;
+ ignore_whitespace = FALSE;
+ iterpool = svn_pool_create(pool);
+ for (i = 0; i < 2; i++)
+ {
+ svn_patch_t *patch;
+ svn_mergeinfo_t mergeinfo;
+ svn_mergeinfo_t reverse_mergeinfo;
+ svn_rangelist_t *rangelist;
+ svn_merge_range_t *range;
+
+ svn_pool_clear(iterpool);
+
+ SVN_ERR(create_patch_file(&patch_file, unidiff_with_mergeinfo,
+ pool));
+
+ SVN_ERR(svn_diff_parse_next_patch(&patch, patch_file, reverse,
+ ignore_whitespace, iterpool,
+ iterpool));
+ SVN_TEST_ASSERT(patch);
+ SVN_TEST_STRING_ASSERT(patch->old_filename, "A/C");
+ SVN_TEST_STRING_ASSERT(patch->new_filename, "A/C");
+
+ /* svn:ignore */
+ SVN_TEST_ASSERT(apr_hash_count(patch->prop_patches) == 1);
+
+ SVN_TEST_ASSERT(patch->mergeinfo);
+ SVN_TEST_ASSERT(patch->reverse_mergeinfo);
+
+ if (reverse)
+ {
+ mergeinfo = patch->reverse_mergeinfo;
+ reverse_mergeinfo = patch->mergeinfo;
+ }
+ else
+ {
+ mergeinfo = patch->mergeinfo;
+ reverse_mergeinfo = patch->reverse_mergeinfo;
+ }
+
+ rangelist = svn_hash_gets(reverse_mergeinfo,
+ "/subversion/branches/1.6.x-r935631");
+ SVN_TEST_ASSERT(rangelist);
+ SVN_TEST_ASSERT(rangelist->nelts == 1);
+ range = APR_ARRAY_IDX(rangelist, 0, svn_merge_range_t *);
+ SVN_TEST_ASSERT(range->start == 952682);
+ SVN_TEST_ASSERT(range->end == 955333);
+
+ rangelist = svn_hash_gets(mergeinfo,
+ "/subversion/branches/nfc-nfd-aware-client");
+ SVN_TEST_ASSERT(rangelist);
+ SVN_TEST_ASSERT(rangelist->nelts == 2);
+ range = APR_ARRAY_IDX(rangelist, 0, svn_merge_range_t *);
+ SVN_TEST_ASSERT(range->end == 870276);
+ range = APR_ARRAY_IDX(rangelist, 1, svn_merge_range_t *);
+ SVN_TEST_ASSERT(range->end == 870376);
+
+ rangelist = svn_hash_gets(mergeinfo,
+ "/subversion/branches/1.8.x-openssl-dirs");
+ SVN_TEST_ASSERT(rangelist);
+ SVN_TEST_ASSERT(rangelist->nelts == 1);
+ range = APR_ARRAY_IDX(rangelist, 0, svn_merge_range_t *);
+ SVN_TEST_ASSERT(range->end == 1535139);
+
+ reverse = !reverse;
+ SVN_ERR(svn_diff_close_patch_file(patch_file, pool));
+ }
+ svn_pool_destroy(iterpool);
+ return SVN_NO_ERROR;
+}
+
/* ========================================================================== */
-struct svn_test_descriptor_t test_funcs[] =
+
+static int max_threads = 1;
+
+static struct svn_test_descriptor_t test_funcs[] =
{
SVN_TEST_NULL,
SVN_TEST_PASS2(test_parse_unidiff,
@@ -980,5 +1086,9 @@ struct svn_test_descriptor_t test_funcs[] =
"test git diffs with spaces in paths"),
SVN_TEST_PASS2(test_parse_unidiff_lacking_trailing_eol,
"test parsing unidiffs lacking trailing eol"),
+ SVN_TEST_PASS2(test_parse_unidiff_with_mergeinfo,
+ "test parsing unidiffs with mergeinfo"),
SVN_TEST_NULL
};
+
+SVN_TEST_MAIN