git_tests.c (2541B)
1 #include <stdlib.h> 2 #include <sys/stat.h> 3 #include "git/internal.h" 4 #include "utest.h" 5 6 UTEST(git_format_filemode, RegularFile) { 7 char* mode = git_format_filemode(S_IFREG | 0644); 8 EXPECT_STREQ("-rw-r--r--", mode); 9 free(mode); 10 } 11 12 UTEST(git_format_filemode, ExecutableFile) { 13 char* mode = git_format_filemode(S_IFREG | 0755); 14 EXPECT_STREQ("-rwxr-xr-x", mode); 15 free(mode); 16 } 17 18 UTEST(git_format_filemode, Directory) { 19 char* mode = git_format_filemode(S_IFDIR | 0755); 20 EXPECT_STREQ("drwxr-xr-x", mode); 21 free(mode); 22 } 23 24 UTEST(git_format_filemode, SymbolicLink) { 25 char* mode = git_format_filemode(S_IFLNK | 0777); 26 EXPECT_STREQ("lrwxrwxrwx", mode); 27 free(mode); 28 } 29 30 UTEST(git_format_filemode, Setuid) { 31 char* mode = git_format_filemode(S_IFREG | S_ISUID | 0755); 32 EXPECT_STREQ("-rwsr-xr-x", mode); 33 free(mode); 34 35 mode = git_format_filemode(S_IFREG | S_ISUID | 0644); 36 EXPECT_STREQ("-rwSr--r--", mode); 37 free(mode); 38 } 39 40 UTEST(git_format_filemode, Setgid) { 41 char* mode = git_format_filemode(S_IFREG | S_ISGID | 0755); 42 EXPECT_STREQ("-rwxr-sr-x", mode); 43 free(mode); 44 45 mode = git_format_filemode(S_IFREG | S_ISGID | 0644); 46 EXPECT_STREQ("-rw-r-Sr--", mode); 47 free(mode); 48 } 49 50 UTEST(git_format_filemode, StickyBit) { 51 /* Sticky bit with execute bit set: 't' */ 52 char* mode = git_format_filemode(S_IFDIR | S_ISVTX | 0777); 53 EXPECT_STREQ("drwxrwxrwt", mode); 54 free(mode); 55 56 mode = git_format_filemode(S_IFDIR | S_ISVTX | 0755); 57 EXPECT_STREQ("drwxr-xr-t", mode); 58 free(mode); 59 60 /* Sticky bit without execute bit set: 'T' */ 61 mode = git_format_filemode(S_IFDIR | S_ISVTX | 0754); 62 EXPECT_STREQ("drwxr-xr-T", mode); 63 free(mode); 64 } 65 66 UTEST(git_format_filemode, OtherTypes) { 67 /* Block device */ 68 char* mode = git_format_filemode(S_IFBLK | 0600); 69 EXPECT_EQ('b', mode[0]); 70 free(mode); 71 72 /* Character device */ 73 mode = git_format_filemode(S_IFCHR | 0600); 74 EXPECT_EQ('c', mode[0]); 75 free(mode); 76 77 /* FIFO */ 78 mode = git_format_filemode(S_IFIFO | 0600); 79 EXPECT_EQ('p', mode[0]); 80 free(mode); 81 82 /* Socket */ 83 mode = git_format_filemode(S_IFSOCK | 0600); 84 EXPECT_EQ('s', mode[0]); 85 free(mode); 86 } 87 88 UTEST(git_get_filetype, AllTypes) { 89 EXPECT_EQ('-', git_get_filetype(S_IFREG)); 90 EXPECT_EQ('d', git_get_filetype(S_IFDIR)); 91 EXPECT_EQ('l', git_get_filetype(S_IFLNK)); 92 EXPECT_EQ('b', git_get_filetype(S_IFBLK)); 93 EXPECT_EQ('c', git_get_filetype(S_IFCHR)); 94 EXPECT_EQ('p', git_get_filetype(S_IFIFO)); 95 EXPECT_EQ('s', git_get_filetype(S_IFSOCK)); 96 EXPECT_EQ('?', git_get_filetype(0)); /* Unknown */ 97 }