diff --git a/src/main/java/PasswordGenerator.java b/src/main/java/PasswordGenerator.java index fd122a5..f57d346 100644 --- a/src/main/java/PasswordGenerator.java +++ b/src/main/java/PasswordGenerator.java @@ -5,11 +5,13 @@ public class PasswordGenerator { final String lowercaseCharacters = "abcdefghjkmnpqrstuvwxyz"; final String uppercaseCharacters = "ABCDEFGHJKMNPQRSTUVWXYZ"; final String digits = "0123456789"; + final String specialCharacters = ".!?=@#$()%^&/*_-+"; private int length = 12; private boolean useUppercase = true; private boolean useLowercase = true; private boolean useDigits = true; + private boolean useSpecialCharacters = true; public String generateRandomPassword() { @@ -26,6 +28,9 @@ public class PasswordGenerator { if (isUseDigits()) { characterPool += digits; } + if (isUseSpecialCharacters()) { + characterPool += specialCharacters; + } for (int generatorPosition = 0; generatorPosition < getLength(); generatorPosition++) { generatedPassword.append(characterPool.charAt(rand.nextInt(characterPool.length()))); @@ -57,6 +62,14 @@ public class PasswordGenerator { this.useDigits = useDigits; } + public boolean isUseSpecialCharacters() { + return useSpecialCharacters; + } + + public void setUseSpecialCharacters(boolean useSpecialCharacters) { + this.useSpecialCharacters = useSpecialCharacters; + } + public int getLength() { return length; } diff --git a/src/test/java/PasswordGeneratorTest.java b/src/test/java/PasswordGeneratorTest.java index 6ff1dc1..17baabd 100644 --- a/src/test/java/PasswordGeneratorTest.java +++ b/src/test/java/PasswordGeneratorTest.java @@ -47,4 +47,12 @@ class PasswordGeneratorTest { passwordGenerator.setUseDigits(true); assertTrue(Pattern.compile("^(?=.*\\d).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); } + + @Test + void testPasswordSpecialCharactersRequirement() { + passwordGenerator.setUseSpecialCharacters(false); + assertFalse(Pattern.compile("^(?=.*[.!?=@#$()%^&/*_\\-+]).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); + passwordGenerator.setUseSpecialCharacters(true); + assertTrue(Pattern.compile("^(?=.*[.!?=@#$()%^&/*_\\-+]).+$").matcher(passwordGenerator.generateRandomPassword()).matches()); + } }