commit 065097b81bad3326a9bd536fbdf646f408638a94 Author: Nick Mathewson nickm@torproject.org Date: Thu Mar 6 12:12:13 2014 -0500
tinytest tt_{mem,str}_op now handle NULLs better
Now a NULL argument to either makes it fail, not crash.
Fies bug 9004; bugfix on 0.2.2.4-alpha. --- changes/bug9004 | 6 ++++++ src/ext/tinytest_macros.h | 9 +++++++-- src/test/test.h | 13 +++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/changes/bug9004 b/changes/bug9004 new file mode 100644 index 0000000..5bab7ea --- /dev/null +++ b/changes/bug9004 @@ -0,0 +1,6 @@ + o Minor bugfixes (testing): + - Improve the tinytest implementation of string operation tests + so that comparisons NULL strings no longer crash the tests; + they now just fail, normally. Fixes bug 9004; bugfix on + 0.2.2.4-alpha. + diff --git a/src/ext/tinytest_macros.h b/src/ext/tinytest_macros.h index 9ff69b1..5bb8f8e 100644 --- a/src/ext/tinytest_macros.h +++ b/src/ext/tinytest_macros.h @@ -144,6 +144,10 @@ tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \ {print_=value_;},{},die_on_fail)
+#define tt_assert_test_type_opt(a,b,str_test,type,test,fmt,die_on_fail) \ + tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \ + {print_=value_?value_:"<NULL>";},{},die_on_fail) + /* Helper: assert that a op b, when cast to type. Format the values with * printf format fmt on failure. */ #define tt_assert_op_type(a,op,b,type,fmt) \ @@ -163,8 +167,9 @@ (val1_ op val2_),"%p",TT_EXIT_TEST_FUNCTION)
#define tt_str_op(a,op,b) \ - tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \ - (strcmp(val1_,val2_) op 0),"<%s>",TT_EXIT_TEST_FUNCTION) + tt_assert_test_type_opt(a,b,#a" "#op" "#b,const char *, \ + (val1_ && val2_ && strcmp(val1_,val2_) op 0),"<%s>", \ + TT_EXIT_TEST_FUNCTION)
#define tt_want_int_op(a,op,b) \ tt_assert_test_type(a,b,#a" "#op" "#b,long,(val1_ op val2_),"%ld",(void)0) diff --git a/src/test/test.h b/src/test/test.h index a89b558..b902c6e 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -38,12 +38,17 @@ #define test_mem_op(expr1, op, expr2, len) \ tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2, \ const char *, \ - (memcmp(val1_, val2_, len) op 0), \ + (val1_ && val2_ && memcmp(val1_, val2_, len) op 0), \ char *, "%s", \ { size_t printlen = (len)*2+1; \ - print_ = tor_malloc(printlen); \ - base16_encode(print_, printlen, value_, \ - (len)); }, \ + if (value_) { \ + print_ = tor_malloc(printlen); \ + base16_encode(print_, printlen, value_, \ + (len)); \ + } else { \ + print_ = tor_strdup("null"); \ + } \ + }, \ { tor_free(print_); }, \ TT_EXIT_TEST_FUNCTION \ );
tor-commits@lists.torproject.org