fileblob_tests.c (2506B)
1 #include "writer/gopher/fileblob.h" 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <string.h> 6 7 #include "fs_inmemory.h" 8 #include "git/file.h" 9 #include "git/repo.h" 10 #include "test_utils.h" 11 #include "utest.h" 12 13 struct gopher_fileblob { 14 int dummy; 15 }; 16 17 UTEST_F_SETUP(gopher_fileblob) { 18 inmemory_fs_clear(); 19 } 20 21 UTEST_F_TEARDOWN(gopher_fileblob) {} 22 23 UTEST_F(gopher_fileblob, basic) { 24 GitRepo repo = {.short_name = "test-repo"}; 25 GopherFileBlob* blob_writer = 26 gopher_fileblob_create(&repo, g_fs_inmemory, "src/main.c"); 27 ASSERT_NE(NULL, blob_writer); 28 29 const char* content = "int main() {\n return 0;\n}\n"; 30 GitFile file = { 31 .repo_path = "src/main.c", 32 .content = (char*)content, 33 .size_bytes = strlen(content), 34 .size_lines = 3, 35 }; 36 37 gopher_fileblob_begin(blob_writer); 38 gopher_fileblob_add_file(blob_writer, &file); 39 gopher_fileblob_end(blob_writer); 40 gopher_fileblob_free(blob_writer); 41 42 const char* buf = inmemory_fs_get_buffer("file/src/main.c.gph"); 43 ASSERT_NE(NULL, buf); 44 45 /* Verify Header/Filename */ 46 EXPECT_STR_SEQUENCE(buf, "main.c", "(27B)", "---"); 47 48 /* Verify Content and Line Numbers (6 spaces for line num) */ 49 EXPECT_STR_SEQUENCE(buf, " 1 int main()", " 2 return 0;", 50 " 3 }"); 51 } 52 53 UTEST_F(gopher_fileblob, binary) { 54 GitRepo repo = {.short_name = "test-repo"}; 55 GopherFileBlob* blob_writer = 56 gopher_fileblob_create(&repo, g_fs_inmemory, "logo.png"); 57 58 GitFile file = { 59 .repo_path = "logo.png", 60 .size_bytes = 100, 61 .size_lines = -1, /* Binary */ 62 }; 63 64 gopher_fileblob_begin(blob_writer); 65 gopher_fileblob_add_file(blob_writer, &file); 66 gopher_fileblob_end(blob_writer); 67 gopher_fileblob_free(blob_writer); 68 69 const char* buf = inmemory_fs_get_buffer("file/logo.png.gph"); 70 ASSERT_NE(NULL, buf); 71 EXPECT_STR_SEQUENCE(buf, "logo.png", "Binary file."); 72 } 73 74 UTEST_F(gopher_fileblob, too_large) { 75 GitRepo repo = {.short_name = "test-repo"}; 76 GopherFileBlob* blob_writer = 77 gopher_fileblob_create(&repo, g_fs_inmemory, "big.txt"); 78 79 GitFile file = { 80 .repo_path = "big.txt", 81 .size_bytes = 1000000, 82 .size_lines = -2, /* Too large */ 83 }; 84 85 gopher_fileblob_begin(blob_writer); 86 gopher_fileblob_add_file(blob_writer, &file); 87 gopher_fileblob_end(blob_writer); 88 gopher_fileblob_free(blob_writer); 89 90 const char* buf = inmemory_fs_get_buffer("file/big.txt.gph"); 91 ASSERT_NE(NULL, buf); 92 EXPECT_STR_SEQUENCE(buf, "big.txt", "File too large to display."); 93 }