@@ -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}
0 commit comments