Skip to content

Commit 4425d60

Browse files
add new cases
1 parent 8409b1b commit 4425d60

File tree

2 files changed

+222
-6
lines changed

2 files changed

+222
-6
lines changed

code/tests/cases/test_syscall.c

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,123 @@ FOSSIL_TEST(c_test_sys_call_create_file) {
6060
remove(filename); // Clean up the test file
6161
}
6262

63+
FOSSIL_TEST(c_test_sys_call_delete_file) {
64+
const char *filename = "delete_me.txt";
65+
FILE *f = fopen(filename, "w");
66+
if (f) fclose(f);
67+
int result = fossil_sys_call_delete_file(filename);
68+
ASSUME_ITS_TRUE(result == 0);
69+
ASSUME_ITS_TRUE(!fossil_sys_call_file_exists(filename));
70+
}
71+
72+
FOSSIL_TEST(c_test_sys_call_file_exists) {
73+
const char *filename = "exists.txt";
74+
FILE *f = fopen(filename, "w");
75+
if (f) fclose(f);
76+
ASSUME_ITS_TRUE(fossil_sys_call_file_exists(filename) == 1);
77+
remove(filename);
78+
ASSUME_ITS_TRUE(fossil_sys_call_file_exists(filename) == 0);
79+
}
80+
81+
FOSSIL_TEST(c_test_sys_call_create_directory) {
82+
const char *dirname = "test_dir";
83+
int result = fossil_sys_call_create_directory(dirname);
84+
ASSUME_ITS_TRUE(result == 0);
85+
ASSUME_ITS_TRUE(fossil_sys_call_is_directory(dirname) == 1);
86+
fossil_sys_call_delete_directory(dirname, 0);
87+
}
88+
89+
FOSSIL_TEST(c_test_sys_call_delete_directory_non_recursive) {
90+
const char *dirname = "dir_non_recursive";
91+
fossil_sys_call_create_directory(dirname);
92+
int result = fossil_sys_call_delete_directory(dirname, 0);
93+
ASSUME_ITS_TRUE(result == 0);
94+
ASSUME_ITS_TRUE(fossil_sys_call_is_directory(dirname) == 0);
95+
}
96+
97+
FOSSIL_TEST(c_test_sys_call_delete_directory_recursive) {
98+
const char *dirname = "dir_recursive";
99+
const char *filename = "dir_recursive/file.txt";
100+
fossil_sys_call_create_directory(dirname);
101+
FILE *f;
102+
#if defined(_WIN32)
103+
char path[256];
104+
snprintf(path, sizeof(path), "%s\\file.txt", dirname);
105+
f = fopen(path, "w");
106+
#else
107+
f = fopen(filename, "w");
108+
#endif
109+
if (f) fclose(f);
110+
int result = fossil_sys_call_delete_directory(dirname, 1);
111+
ASSUME_ITS_TRUE(result == 0);
112+
ASSUME_ITS_TRUE(fossil_sys_call_is_directory(dirname) == 0);
113+
}
114+
115+
FOSSIL_TEST(c_test_sys_call_getcwd_and_chdir) {
116+
char orig[256], temp[256];
117+
fossil_sys_call_getcwd(orig, sizeof(orig));
118+
fossil_sys_call_create_directory("cwd_test");
119+
fossil_sys_call_chdir("cwd_test");
120+
fossil_sys_call_getcwd(temp, sizeof(temp));
121+
ASSUME_ITS_TRUE(strstr(temp, "cwd_test") != NULL);
122+
fossil_sys_call_chdir(orig);
123+
fossil_sys_call_delete_directory("cwd_test", 0);
124+
}
125+
126+
FOSSIL_TEST(c_test_sys_call_list_directory) {
127+
const char *dirname = "list_dir";
128+
fossil_sys_call_create_directory(dirname);
129+
char fname1[256], fname2[256];
130+
#if defined(_WIN32)
131+
snprintf(fname1, sizeof(fname1), "%s\\a.txt", dirname);
132+
snprintf(fname2, sizeof(fname2), "%s\\b.txt", dirname);
133+
#else
134+
snprintf(fname1, sizeof(fname1), "%s/a.txt", dirname);
135+
snprintf(fname2, sizeof(fname2), "%s/b.txt", dirname);
136+
#endif
137+
FILE *f1 = fopen(fname1, "w");
138+
FILE *f2 = fopen(fname2, "w");
139+
if (f1) fclose(f1);
140+
if (f2) fclose(f2);
141+
142+
char **list = NULL;
143+
size_t count = 0;
144+
int result = fossil_sys_call_list_directory(dirname, &list, &count);
145+
ASSUME_ITS_TRUE(result == 0);
146+
ASSUME_ITS_TRUE(count >= 2);
147+
for (size_t i = 0; i < count; ++i) free(list[i]);
148+
free(list);
149+
150+
fossil_sys_call_delete_file(fname1);
151+
fossil_sys_call_delete_file(fname2);
152+
fossil_sys_call_delete_directory(dirname, 0);
153+
}
154+
155+
FOSSIL_TEST(c_test_sys_call_is_directory_and_is_file) {
156+
const char *dirname = "type_dir";
157+
const char *filename = "type_file.txt";
158+
fossil_sys_call_create_directory(dirname);
159+
FILE *f = fopen(filename, "w");
160+
if (f) fclose(f);
161+
ASSUME_ITS_TRUE(fossil_sys_call_is_directory(dirname) == 1);
162+
ASSUME_ITS_TRUE(fossil_sys_call_is_file(filename) == 1);
163+
fossil_sys_call_delete_file(filename);
164+
fossil_sys_call_delete_directory(dirname, 0);
165+
}
166+
167+
FOSSIL_TEST(c_test_sys_call_sleep) {
168+
int start = fossil_sys_call_getpid(); // Just to use something
169+
fossil_sys_call_sleep(1); // Sleep for 1 ms (may be longer on some platforms)
170+
int end = fossil_sys_call_getpid();
171+
ASSUME_ITS_TRUE(start == end); // PID should not change
172+
}
173+
174+
FOSSIL_TEST(c_test_sys_call_execute_capture) {
175+
char buffer[128];
176+
int result = fossil_sys_call_execute_capture("echo HelloWorld", buffer, sizeof(buffer));
177+
ASSUME_ITS_TRUE(result == 0);
178+
ASSUME_ITS_TRUE(strstr(buffer, "HelloWorld") != NULL);
179+
}
63180

64181
// * * * * * * * * * * * * * * * * * * * * * * * *
65182
// * Fossil Logic Test Pool
@@ -69,6 +186,16 @@ FOSSIL_TEST_GROUP(c_syscall_tests) {
69186
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_execute);
70187
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_getpid);
71188
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_create_file);
189+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_delete_file);
190+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_file_exists);
191+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_create_directory);
192+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_delete_directory_non_recursive);
193+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_delete_directory_recursive);
194+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_getcwd_and_chdir);
195+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_list_directory);
196+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_is_directory_and_is_file);
197+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_sleep);
198+
FOSSIL_TEST_ADD(c_syscall_suite, c_test_sys_call_execute_capture);
72199

73200
FOSSIL_TEST_REGISTER(c_syscall_suite);
74201
}

code/tests/cases/test_syscall.cpp

Lines changed: 95 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,20 @@ FOSSIL_TEARDOWN(cpp_syscall_suite) {
4444
// * * * * * * * * * * * * * * * * * * * * * * * *
4545

4646
FOSSIL_TEST(cpp_test_sys_call_execute) {
47-
int result = fossil_sys_call_execute("echo Fossil Logic");
47+
int result = fossil::sys::Syscall::execute("echo Fossil Logic");
4848
ASSUME_ITS_TRUE(result == 0);
4949
}
5050

5151
FOSSIL_TEST(cpp_test_sys_call_getpid) {
52-
int pid = fossil_sys_call_getpid();
52+
int pid = fossil::sys::Syscall::getpid();
5353
ASSUME_ITS_TRUE(pid > 0);
5454
}
5555

5656
FOSSIL_TEST(cpp_test_sys_call_create_file) {
57-
const char *filename = "test_file.txt";
58-
int result = fossil_sys_call_create_file(filename);
57+
const std::string filename = "test_file.txt";
58+
int result = fossil::sys::Syscall::create_file(filename);
5959
ASSUME_ITS_TRUE(result == 0);
60-
remove(filename); // Clean up the test file
60+
remove(filename.c_str()); // Clean up the test file
6161
}
6262

6363
FOSSIL_TEST(cpp_test_sys_call_execute_string) {
@@ -79,11 +79,91 @@ FOSSIL_TEST(cpp_test_sys_call_create_file_class) {
7979

8080
FOSSIL_TEST(cpp_test_sys_call_create_file_cstr_class) {
8181
const char *filename = "test_file_cstr_class.txt";
82-
int result = fossil::sys::Syscall::create_file(filename);
82+
int result = fossil::sys::Syscall::create_file(std::string(filename));
8383
ASSUME_ITS_TRUE(result == 0);
8484
remove(filename); // Clean up the test file
8585
}
8686

87+
FOSSIL_TEST(cpp_test_sys_call_delete_file) {
88+
const std::string filename = "test_delete_file.txt";
89+
// Create file first
90+
int create_result = fossil::sys::Syscall::create_file(filename);
91+
ASSUME_ITS_TRUE(create_result == 0);
92+
// Delete file
93+
int delete_result = fossil::sys::Syscall::delete_file(filename);
94+
ASSUME_ITS_TRUE(delete_result == 0);
95+
}
96+
97+
FOSSIL_TEST(cpp_test_sys_call_file_exists) {
98+
const std::string filename = "test_exists_file.txt";
99+
fossil::sys::Syscall::create_file(filename);
100+
int exists = fossil::sys::Syscall::file_exists(filename);
101+
ASSUME_ITS_TRUE(exists == 1);
102+
fossil::sys::Syscall::delete_file(filename);
103+
int not_exists = fossil::sys::Syscall::file_exists(filename);
104+
ASSUME_ITS_TRUE(not_exists == 0);
105+
}
106+
107+
FOSSIL_TEST(cpp_test_sys_call_create_directory) {
108+
const std::string dirname = "test_dir";
109+
int result = fossil::sys::Syscall::create_directory(dirname);
110+
ASSUME_ITS_TRUE(result == 0);
111+
fossil::sys::Syscall::delete_directory(dirname, 0);
112+
}
113+
114+
FOSSIL_TEST(cpp_test_sys_call_delete_directory) {
115+
const std::string dirname = "test_del_dir";
116+
fossil::sys::Syscall::create_directory(dirname);
117+
int result = fossil::sys::Syscall::delete_directory(dirname, 0);
118+
ASSUME_ITS_TRUE(result == 0);
119+
}
120+
121+
FOSSIL_TEST(cpp_test_sys_call_is_directory) {
122+
const std::string dirname = "test_is_dir";
123+
fossil::sys::Syscall::create_directory(dirname);
124+
int is_dir = fossil::sys::Syscall::is_directory(dirname);
125+
ASSUME_ITS_TRUE(is_dir == 1);
126+
fossil::sys::Syscall::delete_directory(dirname, 0);
127+
}
128+
129+
FOSSIL_TEST(cpp_test_sys_call_is_file) {
130+
const std::string filename = "test_is_file.txt";
131+
fossil::sys::Syscall::create_file(filename);
132+
int is_file = fossil::sys::Syscall::is_file(filename);
133+
ASSUME_ITS_TRUE(is_file == 1);
134+
fossil::sys::Syscall::delete_file(filename);
135+
}
136+
137+
FOSSIL_TEST(cpp_test_sys_call_chdir_and_getcwd) {
138+
const std::string dirname = "test_chdir_dir";
139+
fossil::sys::Syscall::create_directory(dirname);
140+
char cwd_before[256];
141+
std::string cwd_str_before(256, '\0');
142+
fossil::sys::Syscall::getcwd(&cwd_str_before, cwd_str_before.size());
143+
int chdir_result = fossil::sys::Syscall::chdir(dirname);
144+
ASSUME_ITS_TRUE(chdir_result == 0);
145+
std::string cwd_str_after(256, '\0');
146+
fossil::sys::Syscall::getcwd(&cwd_str_after, cwd_str_after.size());
147+
ASSUME_ITS_TRUE(cwd_str_after.find(dirname) != std::string::npos);
148+
fossil::sys::Syscall::chdir(cwd_str_before);
149+
fossil::sys::Syscall::delete_directory(dirname, 0);
150+
}
151+
152+
FOSSIL_TEST(cpp_test_sys_call_sleep) {
153+
auto start = std::chrono::steady_clock::now();
154+
fossil::sys::Syscall::sleep(100);
155+
auto end = std::chrono::steady_clock::now();
156+
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
157+
ASSUME_ITS_TRUE(elapsed >= 90); // Allow some tolerance
158+
}
159+
160+
FOSSIL_TEST(cpp_test_sys_call_execute_capture) {
161+
std::string buffer(128, '\0');
162+
int result = fossil::sys::Syscall::execute_capture("echo FossilCapture", &buffer);
163+
ASSUME_ITS_TRUE(result == 0);
164+
ASSUME_ITS_TRUE(buffer.find("FossilCapture") != std::string::npos);
165+
}
166+
87167
// * * * * * * * * * * * * * * * * * * * * * * * *
88168
// * Fossil Logic Test Pool
89169
// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -96,6 +176,15 @@ FOSSIL_TEST_GROUP(cpp_syscall_tests) {
96176
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_getpid_class);
97177
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_create_file_class);
98178
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_create_file_cstr_class);
179+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_delete_file);
180+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_file_exists);
181+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_create_directory);
182+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_delete_directory);
183+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_is_directory);
184+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_is_file);
185+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_chdir_and_getcwd);
186+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_sleep);
187+
FOSSIL_TEST_ADD(cpp_syscall_suite, cpp_test_sys_call_execute_capture);
99188

100189
FOSSIL_TEST_REGISTER(cpp_syscall_suite);
101190
}

0 commit comments

Comments
 (0)