Implement generic identifier casing conventions.
AI-Assisted: yes AI-Tool: OpenAI Codex / gpt-5.4 xhigh
This commit is contained in:
1
tests/config.nims
Normal file
1
tests/config.nims
Normal file
@@ -0,0 +1 @@
|
||||
switch("path", "$projectDir/../src")
|
||||
61
tests/tidentcasing.nim
Normal file
61
tests/tidentcasing.nim
Normal file
@@ -0,0 +1,61 @@
|
||||
import unittest
|
||||
|
||||
import identcasing
|
||||
|
||||
let canonicalWords = @["naïve", "api", "value"]
|
||||
|
||||
suite "identifier casing":
|
||||
test "renders every supported style":
|
||||
check renderWords(canonicalWords, upperSnakeCase) == "NAÏVE_API_VALUE"
|
||||
check renderWords(canonicalWords, lowerSnakeCase) == "naïve_api_value"
|
||||
check renderWords(canonicalWords, titleSnakeCase) == "Naïve_Api_Value"
|
||||
check renderWords(canonicalWords, lowerKebabCase) == "naïve-api-value"
|
||||
check renderWords(canonicalWords, upperKebabCase) == "NAÏVE-API-VALUE"
|
||||
check renderWords(canonicalWords, trainCase) == "Naïve-Api-Value"
|
||||
check renderWords(canonicalWords, headerCase) == "Naïve-Api-Value"
|
||||
check renderWords(canonicalWords, dotCase) == "naïve.api.value"
|
||||
check renderWords(canonicalWords, lowerCamelCase) == "naïveApiValue"
|
||||
check renderWords(canonicalWords, pascalCase) == "NaïveApiValue"
|
||||
|
||||
test "parses every unambiguous style":
|
||||
check parseWords("NAÏVE_API_VALUE", upperSnakeCase) == canonicalWords
|
||||
check parseWords("naïve_api_value", lowerSnakeCase) == canonicalWords
|
||||
check parseWords("Naïve_Api_Value", titleSnakeCase) == canonicalWords
|
||||
check parseWords("naïve-api-value", lowerKebabCase) == canonicalWords
|
||||
check parseWords("NAÏVE-API-VALUE", upperKebabCase) == canonicalWords
|
||||
check parseWords("Naïve-Api-Value", trainCase) == canonicalWords
|
||||
check parseWords("naïve.api.value", dotCase) == canonicalWords
|
||||
check parseWords("naïveApiValue", lowerCamelCase) == canonicalWords
|
||||
check parseWords("NaïveApiValue", pascalCase) == canonicalWords
|
||||
|
||||
test "splits acronym and digit boundaries in camel styles":
|
||||
check parseWords("URLValue", pascalCase) == @["url", "value"]
|
||||
check parseWords("version2Value", lowerCamelCase) == @["version2", "value"]
|
||||
check convertCase("URLValue", pascalCase, lowerKebabCase) == "url-value"
|
||||
check convertCase("version2Value", lowerCamelCase, lowerSnakeCase) == "version2_value"
|
||||
|
||||
test "keeps digits attached to the preceding camel word":
|
||||
check parseWords("oauth2Client", lowerCamelCase) == @["oauth2", "client"]
|
||||
check parseWords("ipv6Address", lowerCamelCase) == @["ipv6", "address"]
|
||||
check convertCase("oauth2Client", lowerCamelCase, lowerKebabCase) == "oauth2-client"
|
||||
check convertCase("ipv6Address", lowerCamelCase, lowerSnakeCase) == "ipv6_address"
|
||||
|
||||
test "does not round-trip standalone numeric segments through camel case":
|
||||
check convertCase("PBM-123", upperKebabCase, lowerCamelCase) == "pbm123"
|
||||
check convertCase("pbm123", lowerCamelCase, upperKebabCase) == "PBM123"
|
||||
|
||||
test "converts between parseable and rendered styles":
|
||||
check convertCase("naïveApiValue", lowerCamelCase, upperSnakeCase) == "NAÏVE_API_VALUE"
|
||||
check convertCase("NaïveApiValue", pascalCase, upperKebabCase) == "NAÏVE-API-VALUE"
|
||||
check convertCase("naïve_api_value", lowerSnakeCase, trainCase) == "Naïve-Api-Value"
|
||||
|
||||
test "supports the existing pairwise helpers":
|
||||
check lowerKebabCaseToLowerCamelCase("lower-kebab-case") == "lowerKebabCase"
|
||||
check lowerCamelCaseToLowerKebabCase("lowerCamelCase") == "lower-camel-case"
|
||||
check lowerKebabCaseToLowerCamelCase("lower-äbc") == "lowerÄbc"
|
||||
check lowerCamelCaseToLowerKebabCase("lowerÄbc") == "lower-äbc"
|
||||
|
||||
test "handles empty values":
|
||||
check parseWords("", lowerCamelCase) == newSeq[string]()
|
||||
check renderWords([], lowerCamelCase) == ""
|
||||
check convertCase("", lowerCamelCase, upperSnakeCase) == ""
|
||||
Reference in New Issue
Block a user