Skip to content

Commit fc9cdf6

Browse files
Update test_myshell.c
1 parent c82a2ff commit fc9cdf6

File tree

1 file changed

+191
-0
lines changed

1 file changed

+191
-0
lines changed

code/tests/cases/test_myshell.c

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,118 @@ FOSSIL_TEST(c_test_myshell_put_get_del) {
132132
remove(file_name);
133133
}
134134

135+
FOSSIL_TEST(c_test_myshell_put_all_types) {
136+
fossil_bluecrab_myshell_error_t err;
137+
const char *file_name = "test_put_all_types.myshell";
138+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
139+
ASSUME_ITS_TRUE(db != NULL);
140+
141+
const char *types[] = {
142+
"null", "bool", "i8", "i16", "i32", "i64", "u8", "u16", "u32", "u64",
143+
"f32", "f64", "oct", "hex", "bin", "char", "cstr", "array", "object",
144+
"enum", "datetime", "duration"
145+
};
146+
const char *values[] = {
147+
"", "true", "127", "32767", "2147483647", "9223372036854775807",
148+
"255", "65535", "4294967295", "18446744073709551615",
149+
"3.14", "2.71828", "0755", "0xFF", "0b1010", "A", "hello", "[1,2]", "{\"k\":1}", "VAL", "2024-06-01T12:00:00Z", "1h30m"
150+
};
151+
152+
char value[128];
153+
for (size_t i = 0; i < sizeof(types)/sizeof(types[0]); ++i) {
154+
char key[32];
155+
snprintf(key, sizeof(key), "key_%s", types[i]);
156+
err = fossil_myshell_put(db, key, types[i], values[i]);
157+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_SUCCESS);
158+
159+
err = fossil_myshell_get(db, key, value, sizeof(value));
160+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_SUCCESS);
161+
ASSUME_ITS_EQUAL_CSTR(value, values[i]);
162+
}
163+
164+
fossil_myshell_close(db);
165+
remove(file_name);
166+
}
167+
168+
FOSSIL_TEST(c_test_myshell_put_invalid_type) {
169+
fossil_bluecrab_myshell_error_t err;
170+
const char *file_name = "test_put_invalid_type.myshell";
171+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
172+
ASSUME_ITS_TRUE(db != NULL);
173+
174+
err = fossil_myshell_put(db, "badkey", "notatype", "value");
175+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_TYPE);
176+
177+
fossil_myshell_close(db);
178+
remove(file_name);
179+
}
180+
181+
FOSSIL_TEST(c_test_myshell_get_not_found) {
182+
fossil_bluecrab_myshell_error_t err;
183+
const char *file_name = "test_get_not_found.myshell";
184+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
185+
ASSUME_ITS_TRUE(db != NULL);
186+
187+
char value[128];
188+
err = fossil_myshell_get(db, "nonexistent", value, sizeof(value));
189+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_NOT_FOUND);
190+
191+
fossil_myshell_close(db);
192+
remove(file_name);
193+
}
194+
195+
FOSSIL_TEST(c_test_myshell_get_buffer_too_small) {
196+
fossil_bluecrab_myshell_error_t err;
197+
const char *file_name = "test_get_buffer_small.myshell";
198+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
199+
ASSUME_ITS_TRUE(db != NULL);
200+
201+
err = fossil_myshell_put(db, "shortkey", "cstr", "longvalue");
202+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_SUCCESS);
203+
204+
char value[4]; // too small for "longvalue"
205+
err = fossil_myshell_get(db, "shortkey", value, sizeof(value));
206+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_BUFFER_TOO_SMALL);
207+
208+
fossil_myshell_close(db);
209+
remove(file_name);
210+
}
211+
212+
FOSSIL_TEST(c_test_myshell_del_not_found) {
213+
fossil_bluecrab_myshell_error_t err;
214+
const char *file_name = "test_del_not_found.myshell";
215+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
216+
ASSUME_ITS_TRUE(db != NULL);
217+
218+
// Try to delete a key that does not exist
219+
err = fossil_myshell_del(db, "nonexistent_key");
220+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_NOT_FOUND);
221+
222+
fossil_myshell_close(db);
223+
remove(file_name);
224+
}
225+
226+
FOSSIL_TEST(c_test_myshell_del_twice) {
227+
fossil_bluecrab_myshell_error_t err;
228+
const char *file_name = "test_del_twice.myshell";
229+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
230+
ASSUME_ITS_TRUE(db != NULL);
231+
232+
// Put a key and delete it
233+
err = fossil_myshell_put(db, "key", "cstr", "value");
234+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_SUCCESS);
235+
236+
err = fossil_myshell_del(db, "key");
237+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_SUCCESS);
238+
239+
// Try to delete again
240+
err = fossil_myshell_del(db, "key");
241+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_NOT_FOUND);
242+
243+
fossil_myshell_close(db);
244+
remove(file_name);
245+
}
246+
135247
FOSSIL_TEST(c_test_myshell_stage_unstage) {
136248
fossil_bluecrab_myshell_error_t err;
137249
const char *file_name = "test_stage_unstage.myshell";
@@ -185,6 +297,74 @@ FOSSIL_TEST(c_test_myshell_backup_restore) {
185297
remove(restore_file);
186298
}
187299

300+
FOSSIL_TEST(c_test_myshell_open_invalid_path) {
301+
fossil_bluecrab_myshell_error_t err;
302+
fossil_bluecrab_myshell_t *db = fossil_myshell_open(NULL, &err);
303+
ASSUME_ITS_TRUE(db == NULL);
304+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
305+
306+
db = fossil_myshell_open("not_a_myshell.txt", &err);
307+
ASSUME_ITS_TRUE(db == NULL);
308+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
309+
}
310+
311+
FOSSIL_TEST(c_test_myshell_create_existing_file) {
312+
fossil_bluecrab_myshell_error_t err;
313+
const char *file_name = "test_existing.myshell";
314+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
315+
ASSUME_ITS_TRUE(db != NULL);
316+
fossil_myshell_close(db);
317+
318+
db = fossil_myshell_create(file_name, &err);
319+
ASSUME_ITS_TRUE(db == NULL);
320+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_ALREADY_EXISTS);
321+
322+
remove(file_name);
323+
}
324+
325+
FOSSIL_TEST(c_test_myshell_backup_restore_null_args) {
326+
fossil_bluecrab_myshell_error_t err;
327+
const char *file_name = "test_backup_restore_null.myshell";
328+
fossil_bluecrab_myshell_t *db = fossil_myshell_create(file_name, &err);
329+
ASSUME_ITS_TRUE(db != NULL);
330+
331+
err = fossil_myshell_backup(NULL, "backup.bak");
332+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
333+
334+
err = fossil_myshell_backup(db, NULL);
335+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_CONFIG_INVALID);
336+
337+
err = fossil_myshell_backup(db, "");
338+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_CONFIG_INVALID);
339+
340+
err = fossil_myshell_restore(NULL, "target.myshell");
341+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
342+
343+
err = fossil_myshell_restore("backup.bak", NULL);
344+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
345+
346+
fossil_myshell_close(db);
347+
remove(file_name);
348+
}
349+
350+
FOSSIL_TEST(c_test_myshell_diff_null_args) {
351+
fossil_bluecrab_myshell_error_t err;
352+
char diff[128];
353+
err = fossil_myshell_diff(NULL, NULL, diff, sizeof(diff));
354+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
355+
356+
err = fossil_myshell_diff(NULL, NULL, NULL, sizeof(diff));
357+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
358+
359+
err = fossil_myshell_diff(NULL, NULL, diff, 0);
360+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
361+
}
362+
363+
FOSSIL_TEST(c_test_myshell_check_integrity_null) {
364+
fossil_bluecrab_myshell_error_t err = fossil_myshell_check_integrity(NULL);
365+
ASSUME_ITS_TRUE(err == FOSSIL_MYSHELL_ERROR_INVALID_FILE);
366+
}
367+
188368
// * * * * * * * * * * * * * * * * * * * * * * * *
189369
// * Fossil Logic Test Pool
190370
// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -193,8 +373,19 @@ FOSSIL_TEST_GROUP(c_myshell_database_tests) {
193373
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_commit_branch_checkout);
194374
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_errstr);
195375
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_put_get_del);
376+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_put_all_types);
377+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_put_invalid_type);
378+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_get_not_found);
379+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_get_buffer_too_small);
380+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_del_not_found);
381+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_del_twice);
196382
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_stage_unstage);
197383
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_backup_restore);
384+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_open_invalid_path);
385+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_create_existing_file);
386+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_backup_restore_null_args);
387+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_diff_null_args);
388+
FOSSIL_TEST_ADD(c_myshell_fixture, c_test_myshell_check_integrity_null);
198389

199390
FOSSIL_TEST_REGISTER(c_myshell_fixture);
200391
} // end of tests

0 commit comments

Comments
 (0)