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
|
#include "spm.h"
#include "framework.h"
const char *testFmt = "case %zu: '%s' is length %zu, expected %zu\n";
const char *testFmtChars = "case %zu: '%s' got '%c' (pos: %zu), expected '%c'\n";
int main(int argc, char *argv[]) {
char *tty_path = NULL;
if ((tty_path = ttyname(STDOUT_FILENO)) == NULL) {
perror("tty check");
return 0;
}
const int max_banner = 'z';
char buf[BUFSIZ] = {0,};
char *buffer = buf;
int stdout_save = 0;
fflush(stdout);
for (size_t i = 'A', letters = 'A'; i <= (size_t)max_banner; i++, letters++) {
char letter[] = {letters, '\0'};
size_t buffer_len = 0;
// Redirect stdout
stdout_save = dup(STDOUT_FILENO);
freopen("/dev/null", "w", stdout);
setvbuf(stdout, buffer, _IOLBF, sizeof(buf));
// Do test
print_banner(letter, i);
fflush(stdout);
strip(buffer);
buffer_len = strlen(buffer);
myassert(buffer_len == i, testFmt, i, buffer, buffer_len, i);
for (size_t j = 0; j < buffer_len; j++) {
myassert(buffer[j] == (int)letters, testFmtChars, i, buffer, j, buffer[j], (int)letters, buffer[j]);
}
// Restore stdout
dup2(stdout_save, STDOUT_FILENO);
setvbuf(stdout, NULL, _IONBF, 0);
}
}
|