@Test
  public void testLengthRestriction() {
    List<PasswordRestriction> restrictions = new ArrayList<PasswordRestriction>();
    // one that will fail
    restrictions.add(LENGTH_RESTRICTION);
    // one that will pass
    restrictions.add(SYMBOL_RESTRICTION);
    SimplePasswordStrengthChecker checker =
        new SimplePasswordStrengthChecker(restrictions, this.dictionary, this.keyboard);
    String pwd = "1W2sa#4";
    PasswordStrengthCheckResult result = checker.check("", pwd, null);
    assertNotNull(result);
    assertNotNull(result.getPassedRestrictions());
    assertNotNull(result.getRestrictionFailures());

    assertEquals(1, result.getPassedRestrictions().size());
    assertEquals(1, result.getRestrictionFailures().size());

    assertNotNull(result.getStrength());

    assertEquals(
        MESSAGES.passwordNotLongEnough(8).getMessage(),
        result.getRestrictionFailures().get(0).getMessage());
    assertEquals(SYMBOL_RESTRICTION, result.getPassedRestrictions().get(0));
  }
  @Test
  public void testAdHocRestriction() {
    List<PasswordRestriction> restrictions = new ArrayList<PasswordRestriction>();
    restrictions.add(ALPHA_RESTRICTION);
    restrictions.add(SYMBOL_RESTRICTION);
    SimplePasswordStrengthChecker checker =
        new SimplePasswordStrengthChecker(restrictions, this.dictionary, this.keyboard);
    String pwd = "!#*_3x";
    List<PasswordRestriction> adHocRestrictions = new ArrayList<PasswordRestriction>();
    ValueRestriction restriction = new ValueRestriction(new String[] {pwd});
    adHocRestrictions.add(restriction);

    PasswordStrengthCheckResult result = checker.check("", pwd, adHocRestrictions);
    assertNotNull(result);
    assertNotNull(result.getPassedRestrictions());
    assertNotNull(result.getRestrictionFailures());

    assertEquals(2, result.getPassedRestrictions().size());
    assertEquals(1, result.getRestrictionFailures().size());

    assertNotNull(result.getStrength());

    assertEquals(ALPHA_RESTRICTION, result.getPassedRestrictions().get(0));
    assertEquals(SYMBOL_RESTRICTION, result.getPassedRestrictions().get(1));
    assertEquals(
        MESSAGES.passwordMustNotBeEqual(pwd).getMessage(),
        result.getRestrictionFailures().get(0).getMessage());
  }
  @Test
  public void testDigitsRestriction() {
    List<PasswordRestriction> restrictions = new ArrayList<PasswordRestriction>();
    // one that will fail
    restrictions.add(DIGIT_RESTRICTION);
    // one that will pass
    restrictions.add(ALPHA_RESTRICTION);
    SimplePasswordStrengthChecker checker =
        new SimplePasswordStrengthChecker(restrictions, this.dictionary, this.keyboard);
    String pwd = "DW$sa#x";
    PasswordStrengthCheckResult result = checker.check("", pwd, null);
    assertNotNull(result);
    assertNotNull(result.getPassedRestrictions());
    assertNotNull(result.getRestrictionFailures());

    assertEquals(1, result.getPassedRestrictions().size());
    assertEquals(1, result.getRestrictionFailures().size());

    assertNotNull(result.getStrength());

    assertEquals(
        MESSAGES.passwordMustHaveDigit(1), result.getRestrictionFailures().get(0).getMessage());
    assertEquals(ALPHA_RESTRICTION, result.getPassedRestrictions().get(0));
  }