@@ -64,8 +64,11 @@ func TestCaseHelpersWithOptionalReplacer_StrcaseInspiredInitialisms(t *testing.T
6464 r , err := NewReplacer (
6565 Rule {Token : "Api" , Replacement : "API" },
6666 Rule {Token : "Http" , Replacement : "HTTP" },
67+ Rule {Token : "Https" , Replacement : "HTTPS" },
6768 Rule {Token : "Id" , Replacement : "ID" },
6869 Rule {Token : "Json" , Replacement : "JSON" },
70+ Rule {Token : "Url" , Replacement : "URL" },
71+ Rule {Token : "Xss" , Replacement : "XSS" },
6972 )
7073 require .NoError (t , err )
7174
@@ -76,6 +79,67 @@ func TestCaseHelpersWithOptionalReplacer_StrcaseInspiredInitialisms(t *testing.T
7679 assert .Equal (t , "httpStatusCode" , ToCamelCase ("http_status_code" , r ))
7780 assert .Equal (t , "HTTPStatusCode" , ToPascalCase ("http_status_code" , r ))
7881 assert .Equal (t , "http_status_code" , ToSnakeCase ("HTTPStatusCode" , r ))
82+ assert .Equal (t , "https" , ToCamelCase ("https" , r ))
83+ assert .Equal (t , "HTTPS" , ToPascalCase ("https" , r ))
84+ assert .Equal (t , "HTTPS" , ToPascalCase ("Https" , r ))
85+ assert .Equal (t , "HTTPS" , ToPascalCase ("HTTPS" , r ))
86+ assert .Equal (t , "iHTTPS" , ToCamelCase ("IHTTPS" , r ))
87+ assert .Equal (t , "IHTTPS" , ToPascalCase ("IHTTPS" , r ))
88+ assert .Equal (t , "IHTTPS" , ToPascalCase ("IHttps" , r ))
89+ assert .Equal (t , "ihttps" , ToSnakeCase ("IHTTPS" , r ))
90+ assert .Equal (t , "ihttps" , ToKebabCase ("IHTTPS" , r ))
91+ assert .Equal (t , "aHTTPClient" , ToCamelCase ("aHTTPClient" , r ))
92+ assert .Equal (t , "AHTTPClient" , ToPascalCase ("aHTTPClient" , r ))
93+ assert .Equal (t , "iHTTP" , ToCamelCase ("IHTTP" , r ))
94+ assert .Equal (t , "iHTTP" , ToCamelCase ("ihttp" , r ))
95+ assert .Equal (t , "iHTTP" , ToCamelCase ("iHttp" , r ))
96+ assert .Equal (t , "iHTTP2" , ToCamelCase ("IHTTP2" , r ))
97+ assert .Equal (t , "iHTTP2" , ToCamelCase ("ihttp2" , r ))
98+ assert .Equal (t , "iHTTP2" , ToCamelCase ("iHttp2" , r ))
99+ assert .Equal (t , "IHTTP" , ToPascalCase ("IHTTP" , r ))
100+ assert .Equal (t , "IHTTP" , ToPascalCase ("iHTTP" , r ))
101+ assert .Equal (t , "IHTTP" , ToPascalCase ("ihttp" , r ))
102+ assert .Equal (t , "IHTTP" , ToPascalCase ("iHttp" , r ))
103+ assert .Equal (t , "IHTTP2" , ToPascalCase ("IHTTP2" , r ))
104+ assert .Equal (t , "IHTTP2" , ToPascalCase ("ihttp2" , r ))
105+ assert .Equal (t , "IHTTP2" , ToPascalCase ("iHttp2" , r ))
106+ assert .Equal (t , "ihttp" , ToSnakeCase ("IHTTP" , r ))
107+ assert .Equal (t , "ihttp" , ToSnakeCase ("iHTTP" , r ))
108+ assert .Equal (t , "ihttp" , ToSnakeCase ("iHttp" , r ))
109+ assert .Equal (t , "ihttp2" , ToSnakeCase ("IHTTP2" , r ))
110+ assert .Equal (t , "ihttp2" , ToSnakeCase ("iHTTP2" , r ))
111+ assert .Equal (t , "ihttp2" , ToSnakeCase ("iHttp2" , r ))
112+ assert .Equal (t , "ihttp" , ToKebabCase ("IHTTP" , r ))
113+ assert .Equal (t , "ihttp" , ToKebabCase ("iHTTP" , r ))
114+ assert .Equal (t , "ihttp" , ToKebabCase ("iHttp" , r ))
115+ assert .Equal (t , "ihttp2" , ToKebabCase ("IHTTP2" , r ))
116+ assert .Equal (t , "ihttp2" , ToKebabCase ("iHTTP2" , r ))
117+ assert .Equal (t , "ihttp2" , ToKebabCase ("iHttp2" , r ))
118+ assert .Equal (t , "URLs" , ToPascalCase ("urls" , r ))
119+ assert .Equal (t , "URLs" , ToPascalCase ("uRLs" , r ))
120+ assert .Equal (t , "urls" , ToCamelCase ("urls" , r ))
121+ assert .Equal (t , "URLs" , ToPascalCase ("Urls" , r ))
122+ assert .Equal (t , "xss" , ToCamelCase ("xss" , r ))
123+ assert .Equal (t , "XSS" , ToPascalCase ("xss" , r ))
124+ assert .Equal (t , "xss" , ToSnakeCase ("XSS" , r ))
125+ assert .Equal (t , "xss" , ToKebabCase ("XSS" , r ))
126+ assert .Equal (t , "xURLValue" , ToCamelCase ("xURLValue" , r ))
127+ assert .Equal (t , "XURLValue" , ToPascalCase ("xURLValue" , r ))
128+ assert .Equal (t , "x_url_value" , ToSnakeCase ("xURLValue" , r ))
129+ assert .Equal (t , "x-url-value" , ToKebabCase ("xURLValue" , r ))
130+ assert .Equal (t , "userURLs" , ToCamelCase ("userUrls" , r ))
131+ assert .Equal (t , "userURLs" , ToCamelCase ("userURLs" , r ))
132+ assert .Equal (t , "userURLs" , ToCamelCase ("UserUrls" , r ))
133+ assert .Equal (t , "userURLs" , ToCamelCase ("UserURLs" , r ))
134+ assert .Equal (t , "userURLs" , ToCamelCase ("user_urls" , r ))
135+ assert .Equal (t , "UserURLs" , ToPascalCase ("userUrls" , r ))
136+ assert .Equal (t , "UserURLs" , ToPascalCase ("userURLs" , r ))
137+ assert .Equal (t , "UserURLs" , ToPascalCase ("UserUrls" , r ))
138+ assert .Equal (t , "UserURLs" , ToPascalCase ("UserURLs" , r ))
139+ assert .Equal (t , "UserURLs" , ToPascalCase ("user_urls" , r ))
140+ assert .Equal (t , "user_urls" , ToSnakeCase ("UserURLs" , r ))
141+ assert .Equal (t , "user-urls" , ToKebabCase ("UserURLs" , r ))
142+ assert .Equal (t , "urls" , ToSnakeCase ("URLs" , r ))
79143
80144 assert .Equal (t , "jsonBlob" , ToCamelCase ("json_blob" , r ))
81145 assert .Equal (t , "JSONBlob" , ToPascalCase ("json_blob" , r ))
@@ -111,3 +175,36 @@ func TestCaseHelpersUseOnlyFirstReplacer(t *testing.T) {
111175
112176 assert .Equal (t , "APIClient" , ToPascalCase ("api_client" , first , second ))
113177}
178+
179+ func TestCaseHelpersCompoundTransformations (t * testing.T ) {
180+ r , err := NewReplacer (
181+ Rule {Token : "Http" , Replacement : "HTTP" },
182+ Rule {Token : "Https" , Replacement : "HTTPS" },
183+ Rule {Token : "Url" , Replacement : "URL" },
184+ )
185+ require .NoError (t , err )
186+
187+ assert .Equal (t , "itthps" , ToSnakeCase (ToCamelCase ("itthps" )))
188+ assert .Equal (t , "itthps" , ToSnakeCase (ToPascalCase ("itthps" )))
189+ assert .Equal (t , "i_tthps" , ToSnakeCase (ToCamelCase ("i_tthps" )))
190+ assert .Equal (t , "i_tthps" , ToSnakeCase (ToPascalCase ("i_tthps" )))
191+ assert .Equal (t , "ihttps" , ToSnakeCase (ToCamelCase ("i_https" , r ), r ))
192+ assert .Equal (t , "ihttps" , ToSnakeCase (ToPascalCase ("i_https" , r ), r ))
193+ assert .Equal (t , "user_urls" , ToSnakeCase (ToCamelCase ("user_urls" , r ), r ))
194+ assert .Equal (t , "user_urls" , ToSnakeCase (ToPascalCase ("user_urls" , r ), r ))
195+ assert .Equal (t , "x-url-value" , ToKebabCase (ToCamelCase ("x_url_value" , r ), r ))
196+ assert .Equal (t , "x_url_value" , ToSnakeCase (ToPascalCase ("x_url_value" , r ), r ))
197+ }
198+
199+ func TestCaseHelpersOverlappingCompoundRulesBacktrack (t * testing.T ) {
200+ r , err := NewReplacer (
201+ Rule {Token : "A" , Replacement : "A" },
202+ Rule {Token : "Ab" , Replacement : "AB" },
203+ Rule {Token : "Bc" , Replacement : "BC" },
204+ )
205+ require .NoError (t , err )
206+
207+ assert .Equal (t , "ABC" , r .Replace ("Abc" ))
208+ assert .Equal (t , "aBC" , ToCamelCase ("abc" , r ))
209+ assert .Equal (t , "ABC" , ToPascalCase ("abc" , r ))
210+ }
0 commit comments