File: string_sequence_test.c

package info (click to toggle)
cfengine3 3.24.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 37,552 kB
  • sloc: ansic: 163,161; sh: 10,296; python: 2,950; makefile: 1,744; lex: 784; yacc: 633; perl: 211; pascal: 157; xml: 21; sed: 13
file content (136 lines) | stat: -rw-r--r-- 3,991 bytes parent folder | download | duplicates (2)
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <platform.h>
#include <sequence.h>
#include <string_sequence.h>
#include <test.h>


static void test_StringJoin(void)
{
    const char *argv[] = { "one", "two", "three" };
    const int argc = sizeof(argv) / sizeof(argv[0]);

    Seq *seq = SeqFromArgv(argc, argv);

    char *actual = StringJoin(seq, NULL);
    assert_string_equal(actual, "onetwothree");
    free(actual);

    actual = StringJoin(seq, "");
    assert_string_equal(actual, "onetwothree");
    free(actual);

    actual = StringJoin(seq, ", ");
    assert_string_equal(actual, "one, two, three");
    free(actual);

    SeqDestroy(seq);
    seq = SeqNew(0, NULL);

    actual = StringJoin(seq, NULL);
    assert_string_equal(actual, "");
    free(actual);

    actual = StringJoin(seq, "");
    assert_string_equal(actual, "");
    free(actual);

    actual = StringJoin(seq, ", ");
    assert_string_equal(actual, "");
    free(actual);

    SeqDestroy(seq);
}

static void test_StringSplit(void)
{
    {
        Seq *const seq = StringSplit("foo", ",");
        assert_int_equal(SeqLength(seq), 1);
        assert_string_equal(SeqAt(seq, 0), "foo");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("foo,bar", ",");
        assert_int_equal(SeqLength(seq), 2);
        assert_string_equal(SeqAt(seq, 0), "foo");
        assert_string_equal(SeqAt(seq, 1), "bar");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("foo,bar,baz", ",");
        assert_int_equal(SeqLength(seq), 3);
        assert_string_equal(SeqAt(seq, 0), "foo");
        assert_string_equal(SeqAt(seq, 1), "bar");
        assert_string_equal(SeqAt(seq, 2), "baz");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("foo,bar,baz,", ",");
        assert_int_equal(SeqLength(seq), 4);
        assert_string_equal(SeqAt(seq, 0), "foo");
        assert_string_equal(SeqAt(seq, 1), "bar");
        assert_string_equal(SeqAt(seq, 2), "baz");
        assert_string_equal(SeqAt(seq, 3), "");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("", ",");
        assert_int_equal(SeqLength(seq), 1);
        assert_string_equal(SeqAt(seq, 0), "");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("/etc/os-release", "/");
        assert_int_equal(SeqLength(seq), 3);
        assert_string_equal(SeqAt(seq, 0), "");
        assert_string_equal(SeqAt(seq, 1), "etc");
        assert_string_equal(SeqAt(seq, 2), "os-release");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit(".ssh/authorized_keys", "/");
        assert_int_equal(SeqLength(seq), 2);
        assert_string_equal(SeqAt(seq, 0), ".ssh");
        assert_string_equal(SeqAt(seq, 1), "authorized_keys");
        SeqDestroy(seq);
    }
    {
        Seq *const seq =
            StringSplit("C:\\Program Files\\Cfengine/bin/cf-agent.exe", "\\/");
        assert_int_equal(SeqLength(seq), 5);
        assert_string_equal(SeqAt(seq, 0), "C:");
        assert_string_equal(SeqAt(seq, 2), "Cfengine");
        assert_string_equal(SeqAt(seq, 4), "cf-agent.exe");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("/foo//bar\\/baz\\", "\\/");
        assert_int_equal(SeqLength(seq), 7);
        assert_string_equal(SeqAt(seq, 0), "");
        assert_string_equal(SeqAt(seq, 1), "foo");
        assert_string_equal(SeqAt(seq, 2), "");
        assert_string_equal(SeqAt(seq, 3), "bar");
        assert_string_equal(SeqAt(seq, 4), "");
        assert_string_equal(SeqAt(seq, 5), "baz");
        assert_string_equal(SeqAt(seq, 6), "");
        SeqDestroy(seq);
    }
    {
        Seq *const seq = StringSplit("foo", "");
        assert_int_equal(SeqLength(seq), 1);
        assert_string_equal(SeqAt(seq, 0), "foo");
        SeqDestroy(seq);
    }
}

int main()
{
    PRINT_TEST_BANNER();
    const UnitTest tests[] =
    {
        unit_test(test_StringJoin),
        unit_test(test_StringSplit),
    };

    return run_tests(tests);
}