diff --git a/test/test.c b/test/test.c index 7deff34..940d64e 100644 --- a/test/test.c +++ b/test/test.c @@ -3,6 +3,17 @@ #include #include +#ifdef _WIN32 +#include +#define MKDIR(path) _mkdir(path) +#define RMDIR(path) _rmdir(path) +#else +#include +#include +#define MKDIR(path) mkdir(path, 0755) +#define RMDIR(path) rmdir(path) +#endif + #define CHECK(cond, msg) \ do { \ if (!(cond)) { \ @@ -13,6 +24,14 @@ static const char *PAK_PATH = "roundtrip.fpk"; +static void write_file(const char *path, const char *data) +{ + FILE *fp = fopen(path, "wb"); + + fwrite(data, 1, strlen(data), fp); + fclose(fp); +} + int main(void) { struct fpk_writer *w; @@ -66,6 +85,45 @@ int main(void) fpk_close(r); remove(PAK_PATH); + CHECK(MKDIR("adddir_src") == 0, "mkdir(adddir_src) failed"); + CHECK(MKDIR("adddir_src/nested") == 0, "mkdir(adddir_src/nested) failed"); + write_file("adddir_src/root.txt", "root"); + write_file("adddir_src/nested/leaf.txt", "leaf"); + + w = fpk_writer_open("adddir.fpk"); + CHECK(w != NULL, "fpk_writer_open(adddir) failed"); + CHECK(fpk_writer_add_dir(w, "adddir_src", NULL, NULL) == 0, + "fpk_writer_add_dir failed"); + CHECK(fpk_writer_finalize(w) == 0, "fpk_writer_finalize(adddir) failed"); + fpk_writer_close(w); + + r = fpk_open("adddir.fpk"); + CHECK(r != NULL, "fpk_open(adddir) failed"); + CHECK(fpk_entry_count(r) == 2, "adddir entry_count mismatch"); + + entry = fpk_find(r, "root.txt"); + CHECK(entry != NULL, "fpk_find(root.txt) failed"); + data = fpk_read(r, entry, &out_size); + CHECK(data != NULL, "fpk_read(root.txt) failed"); + CHECK(out_size == 4 && memcmp(data, "root", 4) == 0, + "root.txt content mismatch"); + free(data); + + entry = fpk_find(r, "nested/leaf.txt"); + CHECK(entry != NULL, "fpk_find(nested/leaf.txt) failed"); + data = fpk_read(r, entry, &out_size); + CHECK(data != NULL, "fpk_read(nested/leaf.txt) failed"); + CHECK(out_size == 4 && memcmp(data, "leaf", 4) == 0, + "nested/leaf.txt content mismatch"); + free(data); + + fpk_close(r); + remove("adddir.fpk"); + remove("adddir_src/root.txt"); + remove("adddir_src/nested/leaf.txt"); + RMDIR("adddir_src/nested"); + RMDIR("adddir_src"); + printf("PASS\n"); return EXIT_SUCCESS; }