From c687bfe6008bc7a2870e676873c87cd733ebc444 Mon Sep 17 00:00:00 2001 From: mo khan Date: Sun, 14 Jun 2020 21:57:08 -0600 Subject: Add test using mocks --- words.c | 12 ++++++++++++ words.h | 1 + words_test.c | 21 +++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/words.c b/words.c index b9c236a..f5bac5f 100644 --- a/words.c +++ b/words.c @@ -1,3 +1,4 @@ +#include #include int split_words(char *sentence) { @@ -11,3 +12,14 @@ int split_words(char *sentence) { } return count; } + +void words(const char *sentence, void (*callback)(const char *, void *), void *memo) { + char *words = strdup(sentence); + int word_count = split_words(words); + char *word = words; + while (word_count-- > 0) { + (*callback)(word, memo); + word = word + strlen(word) + 1; + } + free(words); +} diff --git a/words.h b/words.h index ac9e13b..f1716a4 100644 --- a/words.h +++ b/words.h @@ -1 +1,2 @@ int split_words(char *sentence); +void words(const char *sentence, void (*callback)(const char *, void *), void *memo); diff --git a/words_test.c b/words_test.c index 651ee6f..c7af6b9 100644 --- a/words_test.c +++ b/words_test.c @@ -1,4 +1,5 @@ #include +#include #include "words.h" #include @@ -22,9 +23,29 @@ Ensure(Words, converts_spaces_to_zeroes) { free(sentence); } +void mocked_callback(const char *word, void *memo) { + mock(word, memo); +} + +Ensure(Words, invokes_callback_once_for_single_word_sentence) { + expect(mocked_callback, + when(word, is_equal_to_string("Word")), when(memo, is_null)); + words("Word", &mocked_callback, NULL); +} + +Ensure(Words, invokes_callback_for_each_word_in_a_phrase) { + expect(mocked_callback, when(word, is_equal_to_string("Birds"))); + expect(mocked_callback, when(word, is_equal_to_string("of"))); + expect(mocked_callback, when(word, is_equal_to_string("a"))); + expect(mocked_callback, when(word, is_equal_to_string("feather"))); + words("Birds of a feather", &mocked_callback, NULL); +} + TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test_with_context(suite, Words, returns_word_count); add_test_with_context(suite, Words, converts_spaces_to_zeroes); + add_test_with_context(suite, Words, invokes_callback_once_for_single_word_sentence); + add_test_with_context(suite, Words, invokes_callback_for_each_word_in_a_phrase); return suite; } -- cgit v1.2.3