<?php
/**
* Test methods for the P4 Validate StrongPassword class.
*
* @copyright 2011 Perforce Software. All rights reserved.
* @license Please see LICENSE.txt in top-level folder of this distribution.
* @version <release>/<patch>
*/
class P4_Validate_StrongPasswordTest extends TestCase
{
/**
* Test instantiation.
*/
public function testInstantiation()
{
$validator = new P4_Validate_StrongPassword;
$this->assertTrue($validator instanceof P4_Validate_StrongPassword, 'Expected class');
}
/**
* Test isValid.
*/
public function testIsValid()
{
$weakPasswordMessage = "Passwords must be at least 8 characters long and contain "
. "mixed case or both alphabetic and non-alphabetic characters.";
$tests = array(
array(
'label' => __LINE__ .': null',
'value' => null,
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': empty',
'value' => '',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': short (7 characters, only digits)',
'value' => '1234567',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': short (7 characters, mixed case)',
'value' => 'asdQWEr',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': short (7 characters, alpha & nonalpha)',
'value' => 'Xa1b2c3',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': weak (only lowercase letters)',
'value' => 'qwertyuiop',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': weak (only uppercase letters)',
'value' => 'ZXCVBNML',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': weak (only nonaplha)',
'value' => '123456789!',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': weak (only nonaplha)',
'value' => '!12@_)0^%$',
'valid' => false,
'error' => array(
'weakPassword' => $weakPasswordMessage
),
),
array(
'label' => __LINE__ .': strong (mixed case)',
'value' => 'aByUopXZkjhIU',
'valid' => true,
'error' => array(),
),
array(
'label' => __LINE__ .': strong (mixed case)',
'value' => 'xxxXxxxx',
'valid' => true,
'error' => array(),
),
array(
'label' => __LINE__ .': strong (mixed case)',
'value' => 'ABCDEFGh',
'valid' => true,
'error' => array(),
),
array(
'label' => __LINE__ .': strong (alpha & nonaplha)',
'value' => 'gf12ty2h4u5y66',
'valid' => true,
'error' => array(),
),
array(
'label' => __LINE__ .': strong (alpha & nonaplha)',
'value' => '1234567A',
'valid' => true,
'error' => array(),
),
array(
'label' => __LINE__ .': strong (alpha & nonaplha)',
'value' => 'abcxyz!u',
'valid' => true,
'error' => array(),
),
array(
'label' => __LINE__ .': strong (alpha & nonaplha)',
'value' => 'OOAAXX1Q',
'valid' => true,
'error' => array(),
),
);
foreach ($tests as $test) {
$label = $test['label'];
$validator = new P4_Validate_StrongPassword;
$this->assertSame(
$test['valid'],
$validator->isValid($test['value']),
"$label - Expected validation result."
);
$this->assertSame(
$test['error'],
$validator->getMessages(),
"$label - Expected error message(s)"
);
}
}
}