From: Philip Peterson <philip.c.peterson@xxxxxxxxx> This patchset makes the parse_range function in apply be non-internal linkage in order to expose to the unit testing framework. In so doing, because there is another function called parse_range, I gave this one a more specific name, parse_fragment_range. Other than that, this commit adds several test cases (positive and negative) for the function. Signed-off-by: Philip Peterson <philip.c.peterson@xxxxxxxxx> --- Makefile | 1 + apply.c | 8 ++--- apply.h | 4 +++ t/unit-tests/t-apply.c | 67 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 t/unit-tests/t-apply.c diff --git a/Makefile b/Makefile index 15990ff3122..369092aedfe 100644 --- a/Makefile +++ b/Makefile @@ -1339,6 +1339,7 @@ THIRD_PARTY_SOURCES += compat/regex/% THIRD_PARTY_SOURCES += sha1collisiondetection/% THIRD_PARTY_SOURCES += sha1dc/% +UNIT_TEST_PROGRAMS += t-apply UNIT_TEST_PROGRAMS += t-basic UNIT_TEST_PROGRAMS += t-mem-pool UNIT_TEST_PROGRAMS += t-strbuf diff --git a/apply.c b/apply.c index 7608e3301ca..199a1150df6 100644 --- a/apply.c +++ b/apply.c @@ -1430,8 +1430,8 @@ static int parse_num(const char *line, unsigned long *p) return ptr - line; } -static int parse_range(const char *line, int len, int offset, const char *expect, - unsigned long *p1, unsigned long *p2) +int parse_fragment_range(const char *line, int len, int offset, const char *expect, + unsigned long *p1, unsigned long *p2) { int digits, ex; @@ -1530,8 +1530,8 @@ static int parse_fragment_header(const char *line, int len, struct fragment *fra return -1; /* Figure out the number of lines in a fragment */ - offset = parse_range(line, len, 4, " +", &fragment->oldpos, &fragment->oldlines); - offset = parse_range(line, len, offset, " @@", &fragment->newpos, &fragment->newlines); + offset = parse_fragment_range(line, len, 4, " +", &fragment->oldpos, &fragment->oldlines); + offset = parse_fragment_range(line, len, offset, " @@", &fragment->newpos, &fragment->newlines); return offset; } diff --git a/apply.h b/apply.h index 7cd38b1443c..bbc5e3caeb5 100644 --- a/apply.h +++ b/apply.h @@ -187,3 +187,7 @@ int apply_all_patches(struct apply_state *state, int options); #endif + + +int parse_fragment_range(const char *line, int len, int offset, const char *expect, + unsigned long *p1, unsigned long *p2); diff --git a/t/unit-tests/t-apply.c b/t/unit-tests/t-apply.c new file mode 100644 index 00000000000..ff0abfb2e0b --- /dev/null +++ b/t/unit-tests/t-apply.c @@ -0,0 +1,67 @@ +#include "test-lib.h" +#include "apply.h" + +#define FAILURE -1 + +static void setup_static(const char *line, int len, int offset, + const char *expect, int assert_result, + unsigned long assert_p1, + unsigned long assert_p2) +{ + unsigned long p1 = 9999; + unsigned long p2 = 9999; + int result = parse_fragment_range(line, len, offset, expect, &p1, &p2); + check_int(result, ==, assert_result); + check_int(p1, ==, assert_p1); + check_int(p2, ==, assert_p2); +} + +int cmd_main(int argc, const char **argv) +{ + char* text; + int expected_result; + + /* Success */ + text = "@@ -4,4 +"; + expected_result = 9; + TEST(setup_static(text, strlen(text), 4, " +", expected_result, 4, 4), + "well-formed range"); + + text = "@@ -4 +8 @@"; + expected_result = 7; + TEST(setup_static(text, strlen(text), 4, " +", expected_result, 4, 1), + "non-comma range"); + + /* Failure */ + text = "@@ -X,4 +"; + expected_result = FAILURE; + TEST(setup_static(text, strlen(text), 4, " +", expected_result, 9999, 9999), + "non-digit range (first coordinate)"); + + text = "@@ -4,X +"; + expected_result = FAILURE; + TEST(setup_static(text, strlen(text), 4, " +", expected_result, 4, 1), // p2 is 1, a little strange but not catastrophic + "non-digit range (second coordinate)"); + + text = "@@ -4,4 -"; + expected_result = FAILURE; + TEST(setup_static(text, strlen(text), 4, " +", expected_result, 4, 4), + "non-expected trailing text"); + + text = "@@ -4,4"; + expected_result = FAILURE; + TEST(setup_static(text, strlen(text), 4, " +", expected_result, 4, 4), + "not long enough for expected trailing text"); + + text = "@@ -4,4"; + expected_result = FAILURE; + TEST(setup_static(text, strlen(text), 7, " +", expected_result, 9999, 9999), + "not long enough for offset"); + + text = "@@ -4,4"; + expected_result = FAILURE; + TEST(setup_static(text, strlen(text), -1, " +", expected_result, 9999, 9999), + "negative offset"); + + return test_done(); +} -- gitgitgadget