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) == ""