1package com.peachpasswords.vault23import org.junit.Assert.assertEquals4import org.junit.Assert.assertFalse5import org.junit.Assert.assertTrue6import org.junit.Test7import java.security.MessageDigest89class PasswordGeneratorTest {10 @Test fun respects_length() {11 repeat(20) { assertEquals(24, PasswordGenerator.generate(PasswordGenerator.Options(length = 24)).length) }12 }1314 @Test fun numbers_only_yields_only_digits() {15 val pw = PasswordGenerator.generate(16 PasswordGenerator.Options(length = 60, includeLowercase = false, includeUppercase = false,17 includeNumbers = true, includeSymbols = false),18 )19 assertTrue(pw.all { it.isDigit() })20 }2122 @Test fun forbidden_chars_are_excluded() {23 val pw = PasswordGenerator.generate(24 PasswordGenerator.Options(length = 200, forbiddenChars = "0O1lI"),25 )26 assertFalse(pw.any { it in "0O1lI" })27 }2829 @Test fun empty_charset_falls_back_to_lowercase() {30 val pw = PasswordGenerator.generate(31 PasswordGenerator.Options(length = 30, includeLowercase = false, includeUppercase = false,32 includeNumbers = false, includeSymbols = false),33 )34 assertEquals(30, pw.length)35 assertTrue(pw.all { it in 'a'..'z' })36 }3738 @Test fun passphrase_defaults_to_five_words() {39 assertEquals(5, PasswordGenerator.generatePassphrase().split("-").size)40 }4142 @Test fun passphrase_supports_four_through_twelve_words() {43 assertEquals(4, PasswordGenerator.generatePassphrase(wordCount = 4).split("-").size)44 assertEquals(12, PasswordGenerator.generatePassphrase(wordCount = 12).split("-").size)45 }4647 @Test fun passphrase_uses_the_selected_separator() {48 assertEquals(8, PasswordGenerator.generatePassphrase(wordCount = 8, separator = ".").split(".").size)49 }5051 @Test fun eff_short_word_list_matches_the_published_source() {52 val normalized = EffShortWordList.words.joinToString(separator = "\n", postfix = "\n")53 val digest = MessageDigest.getInstance("SHA-256")54 .digest(normalized.toByteArray())55 .joinToString("") { "%02x".format(it) }56 assertEquals(1296, EffShortWordList.words.size)57 assertEquals("36ecca49e4fa20ca84b176c32f2e9c82f98f446585190e75f9879a95c08247bf", digest)58 }59}