objective categorical abstract machine language personal data server
at main 191 lines 7.1 kB view raw
1open Alcotest 2open Hermes_cli.Naming 3 4(** helpers *) 5let test_string = testable Fmt.string String.equal 6 7let test_camel_to_snake_simple () = 8 check test_string "simple camelCase" "first_name" (camel_to_snake "firstName") 9 10let test_camel_to_snake_single () = 11 check test_string "single word" "name" (camel_to_snake "name") 12 13let test_camel_to_snake_already_snake () = 14 check test_string "already snake_case" "first_name" 15 (camel_to_snake "first_name") 16 17let test_camel_to_snake_multiple_caps () = 18 check test_string "multiple caps" "auth_factor_token" 19 (camel_to_snake "authFactorToken") 20 21let test_camel_to_snake_leading_cap () = 22 check test_string "leading capital" "name" (camel_to_snake "Name") 23 24let test_camel_to_snake_all_caps () = 25 check test_string "all caps sequence" "d_i_d" (camel_to_snake "DID") 26 27let test_camel_to_snake_empty () = 28 check test_string "empty string" "" (camel_to_snake "") 29 30let test_is_reserved_type () = 31 check bool "type is reserved" true (is_reserved "type") 32 33let test_is_reserved_module () = 34 check bool "module is reserved" true (is_reserved "module") 35 36let test_is_reserved_and () = 37 check bool "and is reserved" true (is_reserved "and") 38 39let test_is_reserved_user () = 40 check bool "user is not reserved" false (is_reserved "user") 41 42let test_is_reserved_case_insensitive () = 43 check bool "TYPE is reserved (case insensitive)" true (is_reserved "TYPE") 44 45let test_escape_keyword_reserved () = 46 check test_string "escapes type" "type_" (escape_keyword "type") 47 48let test_escape_keyword_not_reserved () = 49 check test_string "does not escape user" "user" (escape_keyword "user") 50 51let test_escape_keyword_module () = 52 check test_string "escapes module" "module_" (escape_keyword "module") 53 54let test_field_name_camel () = 55 check test_string "converts camelCase" "first_name" (field_name "firstName") 56 57let test_field_name_reserved () = 58 check test_string "escapes reserved" "type_" (field_name "type") 59 60let test_field_name_camel_reserved () = 61 check test_string "converts and escapes" "to_" (field_name "to") 62 63let test_module_name_simple () = 64 check test_string "capitalizes" "App" (module_name_of_segment "app") 65 66let test_module_name_already_cap () = 67 check test_string "already capitalized" "App" (module_name_of_segment "App") 68 69let test_module_name_empty () = 70 check test_string "empty string" "" (module_name_of_segment "") 71 72let test_module_path_simple () = 73 check (list test_string) "simple path" ["App"; "Bsky"; "Graph"] 74 (module_path_of_nsid "app.bsky.graph") 75 76let test_module_path_single () = 77 check (list test_string) "single segment" ["App"] (module_path_of_nsid "app") 78 79let test_module_path_full () = 80 check (list test_string) "full nsid" 81 ["Com"; "Atproto"; "Server"; "CreateSession"] 82 (module_path_of_nsid "com.atproto.server.createSession") 83 84let test_type_name_of_nsid () = 85 check test_string "extracts last segment" "get_profile" 86 (type_name_of_nsid "app.bsky.actor.getProfile") 87 88let test_type_name_simple () = 89 check test_string "converts name" "invite_code" (type_name "inviteCode") 90 91let test_type_name_reserved () = 92 check test_string "escapes reserved" "type_" (type_name "type") 93 94let test_def_module_name () = 95 check test_string "capitalizes" "InviteCode" (def_module_name "inviteCode") 96 97let test_variant_local_ref () = 98 check test_string "local ref" "Relationship" 99 (variant_name_of_ref "#relationship") 100 101let test_variant_external_ref () = 102 check test_string "external ref" "SomeDef" 103 (variant_name_of_ref "com.example.defs#someDef") 104 105let test_variant_just_nsid () = 106 check test_string "just nsid" "Defs" (variant_name_of_ref "com.example.defs") 107 108let test_flat_module_name () = 109 check test_string "flat name" "Com_atproto_server_defs" 110 (flat_module_name_of_nsid "com.atproto.server.defs") 111 112let test_flat_module_name_short () = 113 check test_string "short nsid" "App_bsky" 114 (flat_module_name_of_nsid "app.bsky") 115 116let test_file_path () = 117 check test_string "file path" "com_atproto_server_defs.ml" 118 (file_path_of_nsid "com.atproto.server.defs") 119 120let test_key_annotation_needed () = 121 check test_string "annotation needed" " [@key \"firstName\"]" 122 (key_annotation "firstName" "first_name") 123 124let test_key_annotation_not_needed () = 125 check test_string "annotation not needed" "" (key_annotation "name" "name") 126 127let camel_to_snake_tests = 128 [ ("simple camelCase", `Quick, test_camel_to_snake_simple) 129 ; ("single word", `Quick, test_camel_to_snake_single) 130 ; ("already snake_case", `Quick, test_camel_to_snake_already_snake) 131 ; ("multiple caps", `Quick, test_camel_to_snake_multiple_caps) 132 ; ("leading capital", `Quick, test_camel_to_snake_leading_cap) 133 ; ("all caps", `Quick, test_camel_to_snake_all_caps) 134 ; ("empty string", `Quick, test_camel_to_snake_empty) ] 135 136let is_reserved_tests = 137 [ ("type is reserved", `Quick, test_is_reserved_type) 138 ; ("module is reserved", `Quick, test_is_reserved_module) 139 ; ("and is reserved", `Quick, test_is_reserved_and) 140 ; ("user is not reserved", `Quick, test_is_reserved_user) 141 ; ("case insensitive", `Quick, test_is_reserved_case_insensitive) ] 142 143let escape_keyword_tests = 144 [ ("escapes reserved", `Quick, test_escape_keyword_reserved) 145 ; ("does not escape non-reserved", `Quick, test_escape_keyword_not_reserved) 146 ; ("escapes module", `Quick, test_escape_keyword_module) ] 147 148let field_name_tests = 149 [ ("converts camelCase", `Quick, test_field_name_camel) 150 ; ("escapes reserved", `Quick, test_field_name_reserved) 151 ; ("converts and escapes", `Quick, test_field_name_camel_reserved) ] 152 153let module_name_tests = 154 [ ("capitalizes segment", `Quick, test_module_name_simple) 155 ; ("already capitalized", `Quick, test_module_name_already_cap) 156 ; ("empty string", `Quick, test_module_name_empty) 157 ; ("module path simple", `Quick, test_module_path_simple) 158 ; ("module path single", `Quick, test_module_path_single) 159 ; ("module path full", `Quick, test_module_path_full) ] 160 161let type_name_tests = 162 [ ("type_name_of_nsid", `Quick, test_type_name_of_nsid) 163 ; ("type_name simple", `Quick, test_type_name_simple) 164 ; ("type_name reserved", `Quick, test_type_name_reserved) 165 ; ("def_module_name", `Quick, test_def_module_name) ] 166 167let variant_name_tests = 168 [ ("local ref", `Quick, test_variant_local_ref) 169 ; ("external ref", `Quick, test_variant_external_ref) 170 ; ("just nsid", `Quick, test_variant_just_nsid) ] 171 172let flat_module_tests = 173 [ ("flat module name", `Quick, test_flat_module_name) 174 ; ("flat module short", `Quick, test_flat_module_name_short) 175 ; ("file path", `Quick, test_file_path) ] 176 177let annotation_tests = 178 [ ("annotation needed", `Quick, test_key_annotation_needed) 179 ; ("annotation not needed", `Quick, test_key_annotation_not_needed) ] 180 181let () = 182 run "Naming" 183 [ ("camel_to_snake", camel_to_snake_tests) 184 ; ("is_reserved", is_reserved_tests) 185 ; ("escape_keyword", escape_keyword_tests) 186 ; ("field_name", field_name_tests) 187 ; ("module_name", module_name_tests) 188 ; ("type_name", type_name_tests) 189 ; ("variant_name", variant_name_tests) 190 ; ("flat_module", flat_module_tests) 191 ; ("annotations", annotation_tests) ]