make ACLFormatter::expand() nullable and return an empty array
- optimize tests
This commit is contained in:
parent
aa7be41728
commit
f4ad82bcfb
2 changed files with 93 additions and 146 deletions
|
@ -14,13 +14,13 @@ final class ACLFormatter
|
|||
*
|
||||
* @param string|null $ids A angle-bracketed list of IDs
|
||||
*
|
||||
* @return array|null The array based on the IDs (null in case there is no list)
|
||||
* @return array The array based on the IDs (empty in case there is no list)
|
||||
*/
|
||||
public function expand(string $ids = null)
|
||||
{
|
||||
// In case there is no ID list, return null (=> no ACL set)
|
||||
// In case there is no ID list, return empty array (=> no ACL set)
|
||||
if (!isset($ids)) {
|
||||
return null;
|
||||
return [];
|
||||
}
|
||||
|
||||
// turn string array of angle-bracketed elements into numeric array
|
||||
|
|
|
@ -12,155 +12,96 @@ use PHPUnit\Framework\TestCase;
|
|||
*/
|
||||
class ACLFormaterTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* test expand_acl, perfect input
|
||||
*/
|
||||
public function testExpandAclNormal()
|
||||
public function assertAcl($text, array $assert = [])
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text='<1><2><3><' . Group::FOLLOWERS . '><' . Group::MUTUALS . '>';
|
||||
$this->assertEquals(array('1', '2', '3', Group::FOLLOWERS, Group::MUTUALS), $aclFormatter->expand($text));
|
||||
$acl = $aclFormatter->expand($text);
|
||||
|
||||
$this->assertEquals($assert, $acl);
|
||||
|
||||
$this->assertMergable($acl);
|
||||
}
|
||||
|
||||
public function assertMergable(array $aclOne, array $aclTwo = [])
|
||||
{
|
||||
$this->assertTrue(is_array($aclOne));
|
||||
$this->assertTrue(is_array($aclTwo));
|
||||
|
||||
$aclMerged = array_unique(array_merge($aclOne, $aclTwo));
|
||||
$this->assertTrue(is_array($aclMerged));
|
||||
|
||||
return $aclMerged;
|
||||
}
|
||||
|
||||
public function dataExpand()
|
||||
{
|
||||
return [
|
||||
'normal' => [
|
||||
'input' => '<1><2><3><' . Group::FOLLOWERS . '><' . Group::MUTUALS . '>',
|
||||
'assert' => ['1', '2', '3', Group::FOLLOWERS, Group::MUTUALS],
|
||||
],
|
||||
'nigNumber' => [
|
||||
'input' => '<1><' . PHP_INT_MAX . '><15>',
|
||||
'assert' => ['1', (string)PHP_INT_MAX, '15'],
|
||||
],
|
||||
'string' => [
|
||||
'input' => '<1><279012><tt>',
|
||||
'assert' => ['1', '279012'],
|
||||
],
|
||||
'space' => [
|
||||
'input' => '<1><279 012><32>',
|
||||
'assert' => ['1', '32'],
|
||||
],
|
||||
'empty' => [
|
||||
'input' => '',
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception?
|
||||
'noBrackets' => [
|
||||
'input' => 'According to documentation, that\'s invalid. ', //should be invalid
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception?
|
||||
'justOneBracket' => [
|
||||
'input' => '<Another invalid string', //should be invalid
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception?
|
||||
'justOneBracket2' => [
|
||||
'input' => 'Another invalid> string', //should be invalid
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception?
|
||||
'closeOnly' => [
|
||||
'input' => 'Another> invalid> string>', //should be invalid
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception?
|
||||
'openOnly' => [
|
||||
'input' => '<Another< invalid string<', //should be invalid
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception?
|
||||
'noMatching1' => [
|
||||
'input' => '<Another<> invalid <string>', //should be invalid
|
||||
'assert' => [],
|
||||
],
|
||||
/// @todo should there be an exception? Or array(1, 3)
|
||||
// (This should be array(1,3) - mike)
|
||||
'emptyMatch' => [
|
||||
'input' => '<1><><3>', //should be invalid
|
||||
'assert' => ['1', '3'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* test with a big number
|
||||
* @dataProvider dataExpand
|
||||
*/
|
||||
public function testExpandAclBigNumber()
|
||||
public function testExpand($input, array $assert)
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text='<1><' . PHP_INT_MAX . '><15>';
|
||||
$this->assertEquals(array('1', (string)PHP_INT_MAX, '15'), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test with a string in it.
|
||||
*
|
||||
* @todo is this valid input? Otherwise: should there be an exception?
|
||||
*/
|
||||
public function testExpandAclString()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="<1><279012><tt>";
|
||||
$this->assertEquals(array('1', '279012'), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test with a ' ' in it.
|
||||
*
|
||||
* @todo is this valid input? Otherwise: should there be an exception?
|
||||
*/
|
||||
public function testExpandAclSpace()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="<1><279 012><32>";
|
||||
$this->assertEquals(array('1', '32'), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test empty input
|
||||
*/
|
||||
public function testExpandAclEmpty()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="";
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, no < at all
|
||||
*
|
||||
* @todo should there be an exception?
|
||||
*/
|
||||
public function testExpandAclNoBrackets()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="According to documentation, that's invalid. "; //should be invalid
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, just open <
|
||||
*
|
||||
* @todo should there be an exception?
|
||||
*/
|
||||
public function testExpandAclJustOneBracket1()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="<Another invalid string"; //should be invalid
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, just close >
|
||||
*
|
||||
* @todo should there be an exception?
|
||||
*/
|
||||
public function testExpandAclJustOneBracket2()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="Another invalid> string"; //should be invalid
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, just close >
|
||||
*
|
||||
* @todo should there be an exception?
|
||||
*/
|
||||
public function testExpandAclCloseOnly()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="Another> invalid> string>"; //should be invalid
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, just open <
|
||||
*
|
||||
* @todo should there be an exception?
|
||||
*/
|
||||
public function testExpandAclOpenOnly()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="<Another< invalid string<"; //should be invalid
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, open and close do not match
|
||||
*
|
||||
* @todo should there be an exception?
|
||||
*/
|
||||
public function testExpandAclNoMatching1()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="<Another<> invalid <string>"; //should be invalid
|
||||
$this->assertEquals(array(), $aclFormatter->expand($text));
|
||||
}
|
||||
|
||||
/**
|
||||
* test invalid input, empty <>
|
||||
*
|
||||
* @todo should there be an exception? Or array(1, 3)
|
||||
* (This should be array(1,3) - mike)
|
||||
*/
|
||||
public function testExpandAclEmptyMatch()
|
||||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$text="<1><><3>";
|
||||
$this->assertEquals(array('1', '3'), $aclFormatter->expand($text));
|
||||
$this->assertAcl($input, $assert);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -170,8 +111,14 @@ class ACLFormaterTest extends TestCase
|
|||
{
|
||||
$aclFormatter = new ACLFormatter();
|
||||
|
||||
$this->assertNull($aclFormatter->expand(null));
|
||||
$this->assertNull($aclFormatter->expand());
|
||||
$allow_people = $aclFormatter->expand();
|
||||
$allow_groups = $aclFormatter->expand();
|
||||
|
||||
$this->assertEmpty($aclFormatter->expand(null));
|
||||
$this->assertEmpty($aclFormatter->expand());
|
||||
|
||||
$recipients = array_unique(array_merge($allow_people, $allow_groups));
|
||||
$this->assertEmpty($recipients);
|
||||
}
|
||||
|
||||
public function dataAclToString()
|
||||
|
|
Loading…
Reference in a new issue