File: stream_test.c

package info (click to toggle)
libdbi-drivers 0.9.0-13
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,160 kB
  • sloc: ansic: 19,030; sh: 10,963; xml: 2,759; makefile: 584
file content (119 lines) | stat: -rw-r--r-- 3,796 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <cgreen/cgreen.h>
#include <stdio.h>

char *read_paragraph(int (*read)(void *), void *stream);
void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out);

static int stub_stream(void *stream) {
    return (int)stubbed_result();
}

static void reading_lines_from_empty_stream_gives_null() {
    always_return(stub_stream, EOF);
    assert_equal(read_paragraph(&stub_stream, NULL), NULL);
}

static void one_character_stream_gives_one_character_line() {
    will_return(stub_stream, 'a');
    will_return(stub_stream, EOF);
    char *line = read_paragraph(&stub_stream, NULL);
    assert_string_equal(line, "a");
    free(line);
}

static void one_word_stream_gives_one_word_line() {
    will_return(stub_stream, 't');
    will_return(stub_stream, 'h');
    will_return(stub_stream, 'e');
    always_return(stub_stream, EOF);
    assert_string_equal(read_paragraph(&stub_stream, NULL), "the");
}

static void drops_line_ending_from_word_and_stops() {
    will_return(stub_stream, 't');
    will_return(stub_stream, 'h');
    will_return(stub_stream, 'e');
    will_return(stub_stream, '\n');
    assert_string_equal(read_paragraph(&stub_stream, NULL), "the");
}

static void single_line_ending_gives_empty_line() {
    will_return(stub_stream, '\n');
    assert_string_equal(read_paragraph(&stub_stream, NULL), "");
}

static int reader(void *stream) {
    checked_integer(stream);
    return (int)stubbed_result();
}

static void writer(void *stream, char *paragraph) {
    checked_integer(stream);
    checked_string(paragraph);
}

static void one_character_is_made_into_a_one_letter_paragraph() {
    mock(reader, 'a', NULL);
    always_mock(reader, EOF, NULL);
    expect(writer, NULL, "a");
    by_paragraph(&reader, NULL, &writer, NULL);
}

static void no_line_endings_makes_one_paragraph() {
    mock(reader, 'a', NULL);
    mock(reader, ' ', NULL);
    mock(reader, 'b', NULL);
    mock(reader, ' ', NULL);
    mock(reader, 'c', NULL);
    always_mock(reader, EOF, NULL);
    expect(writer, NULL, "a b c");
    by_paragraph(&reader, NULL, &writer, NULL);
}

static void line_endings_generate_separate_paragraphs() {
    mock(reader, 'a', NULL);
    mock(reader, '\n', NULL);
    mock(reader, 'b', NULL);
    mock(reader, '\n', NULL);
    mock(reader, 'c', NULL);
    always_mock(reader, EOF, NULL);
    expect(writer, NULL, "a");
    expect(writer, NULL, "b");
    expect(writer, NULL, "c");
    by_paragraph(&reader, NULL, &writer, NULL);
}

static void resources_are_paired_with_the_functions() {
    mock(reader, 'a', (void *)1);
    always_mock(reader, EOF, (void *)1);
    expect(writer, (void *)2, "a");
    by_paragraph(&reader, (void *)1, &writer, (void *)2);
}

static void empty_paragraphs_are_ignored() {
    mock(reader, '\n', NULL);
    always_mock(reader, EOF, NULL);
    expect_never(writer);
    by_paragraph(&reader, NULL, &writer, NULL);
}

static TestSuite *stream_tests() {
    TestSuite *suite = create_test_suite();
    add_test(suite, reading_lines_from_empty_stream_gives_null);
    add_test(suite, one_character_stream_gives_one_character_line);
    add_test(suite, one_word_stream_gives_one_word_line);
    add_test(suite, drops_line_ending_from_word_and_stops);
    add_test(suite, single_line_ending_gives_empty_line);
    add_test(suite, one_character_is_made_into_a_one_letter_paragraph);
    add_test(suite, no_line_endings_makes_one_paragraph);
    add_test(suite, line_endings_generate_separate_paragraphs);
    add_test(suite, resources_are_paired_with_the_functions);
    add_test(suite, empty_paragraphs_are_ignored);
    return suite;
}

int main(int argc, char **argv) {
    TestSuite *suite = create_test_suite();
	add_suite(suite, stream_tests());
    return run_test_suite(suite, create_text_reporter());
}