Skip to content

Commit

Permalink
msvcrt/tests: Add tests for check buffering state of standard streams.
Browse files Browse the repository at this point in the history
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
  • Loading branch information
Eric Pouech authored and julliard committed Apr 11, 2024
1 parent 72987ff commit 417d25e
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions dlls/msvcrt/tests/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -3059,6 +3059,64 @@ static void test_ioinfo_flags(void)
free(tempf);
}

static void test_std_stream_buffering(void)
{
int dup_fd, ret, pos;
FILE *file;
char ch;

dup_fd = _dup(STDOUT_FILENO);
ok(dup_fd != -1, "_dup failed\n");

file = freopen("std_stream_test.tmp", "w", stdout);
ok(file != NULL, "freopen failed\n");

ret = fprintf(stdout, "test");
pos = _telli64(STDOUT_FILENO);

fflush(stdout);
_dup2(dup_fd, STDOUT_FILENO);
close(dup_fd);
setvbuf(stdout, NULL, _IONBF, 0);

ok(ret == 4, "fprintf(stdout) returned %d\n", ret);
ok(!pos, "expected stdout to be buffered\n");

dup_fd = _dup(STDERR_FILENO);
ok(dup_fd != -1, "_dup failed\n");

file = freopen("std_stream_test.tmp", "w", stderr);
ok(file != NULL, "freopen failed\n");

ret = fprintf(stderr, "test");
ok(ret == 4, "fprintf(stderr) returned %d\n", ret);
pos = _telli64(STDERR_FILENO);
ok(!pos, "expected stderr to be buffered\n");

fflush(stderr);
_dup2(dup_fd, STDERR_FILENO);
close(dup_fd);

dup_fd = _dup(STDIN_FILENO);
ok(dup_fd != -1, "_dup failed\n");

file = freopen("std_stream_test.tmp", "r", stdin);
ok(file != NULL, "freopen failed\n");

ch = 0;
ret = fscanf(stdin, "%c", &ch);
ok(ret == 1, "fscanf returned %d\n", ret);
ok(ch == 't', "ch = 0x%x\n", (unsigned char)ch);
pos = _telli64(STDIN_FILENO);
ok(pos == 4, "pos = %d\n", pos);

fflush(stdin);
_dup2(dup_fd, STDIN_FILENO);
close(dup_fd);

ok(DeleteFileA("std_stream_test.tmp"), "DeleteFile failed\n");
}

START_TEST(file)
{
int arg_c;
Expand Down Expand Up @@ -3135,6 +3193,7 @@ START_TEST(file)
test_fopen_hints();
test_open_hints();
test_ioinfo_flags();
test_std_stream_buffering();

/* Wait for the (_P_NOWAIT) spawned processes to finish to make sure the report
* file contains lines in the correct order
Expand Down

0 comments on commit 417d25e

Please sign in to comment.