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