summaryrefslogtreecommitdiffhomepage
path: root/test/user_tests/libsystem_test/io.test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/user_tests/libsystem_test/io.test.cc')
-rw-r--r--test/user_tests/libsystem_test/io.test.cc155
1 files changed, 155 insertions, 0 deletions
diff --git a/test/user_tests/libsystem_test/io.test.cc b/test/user_tests/libsystem_test/io.test.cc
new file mode 100644
index 00000000..dfc21990
--- /dev/null
+++ b/test/user_tests/libsystem_test/io.test.cc
@@ -0,0 +1,155 @@
+/// \file io.test.cc
+/// \brief File I/O API tests.
+/// \author Amlal El Mahrouss (amlal at nekernel dot org)
+
+#include <libSystem/SystemKit/System.h>
+#include <public/frameworks/KernelTest.fwrk/headers/TestCase.h>
+
+/// \note File open/close tests
+
+KT_DECL_TEST(IoOpenFileInvalid, []() -> bool {
+ auto file = IoOpenFile(nullptr, nullptr);
+ return file == nullptr;
+});
+
+KT_DECL_TEST(IoOpenFileValidPath, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+ IoCloseFile(file);
+ return YES;
+});
+
+KT_DECL_TEST(IoCloseFileValid, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+ IoCloseFile(file);
+ return YES;
+});
+
+/// \note File positioning tests
+
+KT_DECL_TEST(IoSeekFileValid, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+
+ UInt64 pos = IoSeekFile(file, 100);
+ IoCloseFile(file);
+
+ return pos != ~0UL;
+});
+
+KT_DECL_TEST(IoTellFileValid, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+
+ IoSeekFile(file, 50);
+ UInt64 pos = IoTellFile(file);
+ IoCloseFile(file);
+
+ return pos == 50;
+});
+
+KT_DECL_TEST(IoRewindFileValid, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+
+ IoSeekFile(file, 100);
+ IoRewindFile(file);
+ UInt64 pos = IoTellFile(file);
+ IoCloseFile(file);
+
+ return pos == 0;
+});
+
+/// \note File read/write tests
+
+KT_DECL_TEST(IoWriteFileValid, []() -> bool {
+ auto file = IoOpenFile("/test_write.txt", nullptr);
+ if (!file) return NO;
+
+ const char data[] = "Test data";
+ UInt32 written = IoWriteFile(file, (VoidPtr) data, sizeof(data));
+ IoCloseFile(file);
+
+ return written == sizeof(data);
+});
+
+KT_DECL_TEST(IoReadFileValid, []() -> bool {
+ auto file = IoOpenFile("/test_read.txt", nullptr);
+ if (!file) return NO;
+
+ char buffer[64];
+ VoidPtr buf_ptr = buffer;
+ UInt32 read = IoReadFile(file, &buf_ptr, sizeof(buffer));
+ IoCloseFile(file);
+
+ return read > 0;
+});
+
+KT_DECL_TEST(IoWriteFileNull, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+
+ UInt32 written = IoWriteFile(file, nullptr, 10);
+ IoCloseFile(file);
+
+ return written == 0;
+});
+
+/// \note File metadata tests
+
+KT_DECL_TEST(IoMimeFileValid, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+
+ const Char* mime = IoMimeFile(file);
+ IoCloseFile(file);
+
+ return mime != nullptr;
+});
+
+KT_DECL_TEST(IoDimFileValid, []() -> bool {
+ auto file = IoOpenFile("/test_dir", nullptr);
+ if (!file) return NO;
+
+ const Char* dim = IoDimFile(file);
+ IoCloseFile(file);
+
+ return dim != nullptr;
+});
+
+/// \note File control tests
+
+KT_DECL_TEST(IoCtrlFileValid, []() -> bool {
+ auto file = IoOpenFile("/test.txt", nullptr);
+ if (!file) return NO;
+
+ char in_data[16] = {0};
+ char out_data[16] = {0};
+ SInt32 result = IoCtrlFile(file, 1, in_data, out_data);
+ IoCloseFile(file);
+
+ return result != 0;
+});
+
+/// \brief Run file I/O tests.
+SInt32 KT_TEST_MAIN() {
+ KT_RUN_TEST(IoOpenFileInvalid);
+ KT_RUN_TEST(IoOpenFileValidPath);
+ KT_RUN_TEST(IoCloseFileValid);
+
+ KT_RUN_TEST(IoSeekFileValid);
+ KT_RUN_TEST(IoTellFileValid);
+ KT_RUN_TEST(IoRewindFileValid);
+
+ KT_RUN_TEST(IoWriteFileValid);
+ KT_RUN_TEST(IoReadFileValid);
+ KT_RUN_TEST(IoWriteFileNull);
+
+ KT_RUN_TEST(IoMimeFileValid);
+ KT_RUN_TEST(IoDimFileValid);
+
+ KT_RUN_TEST(IoCtrlFileValid);
+
+ return KT_TEST_SUCCESS;
+}