]> git.saurik.com Git - apple/libc.git/blobdiff - tests/envbuf.c
Libc-1272.200.26.tar.gz
[apple/libc.git] / tests / envbuf.c
diff --git a/tests/envbuf.c b/tests/envbuf.c
new file mode 100644 (file)
index 0000000..1c6cd96
--- /dev/null
@@ -0,0 +1,85 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <darwintest.h>
+#include "darwintest_utils.h"
+
+#define IS_FLAG_SET(fp, flag) ((fp)->_flags & (flag))
+#define BUFFER_SIZE(fp) ((fp)->_bf._size)
+
+static FILE* test_setup(void)
+{
+       char* temp_dir;
+       temp_dir = dt_tmpdir();
+       T_LOG("Temp Dir: %s\n", temp_dir);
+
+       char temp_path[128];
+       snprintf(temp_path, sizeof(temp_path), "%s/%s", temp_dir, "test_file");
+       T_LOG("Using Temporary File: %s\n", temp_path);
+       FILE* fp = fopen(temp_path, "w");
+       T_LOG("File opened: %d\n", fileno(fp));
+       T_ASSERT_EQ(fileno(fp), 3, "file descriptor matches");
+       // Need to prime the buffer
+       fprintf(fp, "Test\n");
+
+       return fp;
+}
+
+T_DECL(envbuf_PR_38637477_unbuf_all, "Forcing unbuffered through environment variable", T_META_ENVVAR("STDBUF=U"))
+{
+       FILE* fp = test_setup();
+
+       T_EXPECT_TRUE(IS_FLAG_SET(fp, __SNBF), "unbuffered");
+       T_EXPECT_FALSE(IS_FLAG_SET(fp, __SLBF), "not line buffered");
+       T_EXPECT_EQ(BUFFER_SIZE(fp), 1, "buffer size 1");
+}
+
+
+T_DECL(envbuf_PR_38637477_line_all, "Forcing line buffering through environment variable", T_META_ENVVAR("STDBUF=L16"))
+{
+       FILE* fp = test_setup();
+
+       T_EXPECT_FALSE(IS_FLAG_SET(fp, __SNBF), "not unbuffered");
+       T_EXPECT_TRUE(IS_FLAG_SET(fp, __SLBF), "line buffered");
+       T_EXPECT_EQ(BUFFER_SIZE(fp), 16, "buffer size 16");
+}
+
+T_DECL(envbuf_PR_38637477_full_all, "Forcing full buffering through environment variable", T_META_ENVVAR("STDBUF=F16"))
+{
+       FILE* fp = test_setup();
+
+       T_EXPECT_FALSE(IS_FLAG_SET(fp, __SNBF), "not unbuffered");
+       T_EXPECT_FALSE(IS_FLAG_SET(fp, __SLBF), "not line buffered");
+       T_EXPECT_EQ(BUFFER_SIZE(fp), 16, "buffer size 16");
+}
+
+T_DECL(envbuf_PR_38637477_unbuf_stdout, "Forcing unbuffered through environment variable for stdout", T_META_ENVVAR("STDBUF1=U"))
+{
+
+       fprintf(stdout, "Test\n");
+
+       T_EXPECT_TRUE(IS_FLAG_SET(stdout, __SNBF), "unbuffered");
+       T_EXPECT_FALSE(IS_FLAG_SET(stdout, __SLBF), "not linebuffered");
+       T_EXPECT_EQ(BUFFER_SIZE(stdout), 1, "buffer size 1");
+}
+
+T_DECL(envbuf_PR_38637477_line_stdout, "Forcing line buffering through environment variable for stdout", T_META_ENVVAR("STDBUF1=L32"))
+{
+
+       fprintf(stdout, "Test\n");
+
+       T_EXPECT_FALSE(IS_FLAG_SET(stdout, __SNBF), "not unbuffered");
+       T_EXPECT_TRUE(IS_FLAG_SET(stdout, __SLBF), "line buffered");
+       T_EXPECT_EQ(BUFFER_SIZE(stdout), 32, "buffer size 32");
+}
+
+T_DECL(envbuf_PR_38637477_full_stdout, "Forcing full buffering through environment variable for stdout", T_META_ENVVAR("STDBUF1=F16"))
+{
+
+       fprintf(stdout, "Test\n");
+
+       T_EXPECT_FALSE(IS_FLAG_SET(stdout, __SNBF), "not unbuffered");
+       T_EXPECT_FALSE(IS_FLAG_SET(stdout, __SLBF), "not line buffered");
+       T_EXPECT_EQ(BUFFER_SIZE(stdout), 16, "buffer size 16");
+}