62 lines
3.4 KiB
Nim
62 lines
3.4 KiB
Nim
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) == ""
|