gs-slug/src/test/scala/gs/slug/v0/SlugTests.scala
Pat Garrity 87c9e6b94f
Some checks failed
/ Build and Test Library Snapshot (pull_request) Failing after 43s
(patch) Enable pre-commit.
2024-03-23 22:54:29 -05:00

59 lines
1.7 KiB
Scala

package gs.slug.v0
class SlugTests extends munit.FunSuite:
test("should instantiate valid slugs") {
('a' to 'z').foreach(c => assertValidSlug(c.toString()))
('0' to '9').foreach(c => assertValidSlug(c.toString()))
(1 to 10).foreach(parts => assertValidSlug(segmented(parts)))
}
test("should reject invalid slugs") {
('A' to 'Z').foreach(c => assertInvalidSlug(c.toString()))
assertInvalidSlug("-")
assertInvalidSlug("_")
assertInvalidSlug("a--z")
assertInvalidSlug("-a")
assertInvalidSlug("a-")
assertInvalidSlug("a_z")
assertInvalidSlug("a-b-c--d")
assertInvalidSlug("1--2")
assertInvalidSlug("!")
assertInvalidSlug("@")
assertInvalidSlug("#")
assertInvalidSlug("$")
assertInvalidSlug("%")
assertInvalidSlug("^")
assertInvalidSlug("&")
assertInvalidSlug("*")
assertInvalidSlug("(")
assertInvalidSlug(")")
assertInvalidSlug("=")
assertInvalidSlug("+")
assertInvalidSlug(";")
assertInvalidSlug(":")
assertInvalidSlug(",")
assertInvalidSlug(".")
assertInvalidSlug("<")
assertInvalidSlug(">")
assertInvalidSlug("/")
assertInvalidSlug("?")
assertInvalidSlug("'")
assertInvalidSlug("\"")
assertInvalidSlug("[")
assertInvalidSlug("{")
assertInvalidSlug("]")
assertInvalidSlug("}")
assertInvalidSlug("\\")
assertInvalidSlug("|")
}
private def assertValidSlug(candidate: String): Unit =
assert(Slug.validate(candidate).map(_.str()) == Some(candidate))
private def assertInvalidSlug(candidate: String): Unit =
assert(Slug.validate(candidate) == None)
private def segmented(parts: Int): String =
val segment = ('a' to 'z').mkString ++ ('0' to '9').mkString
(1 to parts).map(_ => segment).mkString("-")