Merge pull request #17 from abimus/fix/flags

Fix behavior on Server::setFlag()
This commit is contained in:
Robert Hafner 2013-07-11 17:42:05 -07:00
commit 12f147bfd2
3 changed files with 70 additions and 9 deletions

20
phpunit.xml.dist Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
bootstrap="tests/bootstrap.php"
>
<testsuites>
<testsuite name="Fetch Test Suite">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>

View File

@ -179,21 +179,27 @@ class Server
return; return;
if (isset(self::$exclusiveFlags[$flag])) { if (isset(self::$exclusiveFlags[$flag])) {
$kill = $flag; $kill = self::$exclusiveFlags[$flag];
} elseif ($index = array_search($flag, self::$exclusiveFlags)) { } elseif ($index = array_search($flag, self::$exclusiveFlags)) {
$kill = $index; $kill = $index;
} }
if (isset($kill) && isset($this->flags[$kill])) if (isset($kill) && false !== $index = array_search($kill, $this->flags))
unset($this->flags[$kill]); unset($this->flags[$index]);
$index = array_search($flag, $this->flags);
if (isset($value) && $value !== true) { if (isset($value) && $value !== true) {
if ($value == false) { if ($value == false && $index !== false) {
unset($this->flags[$flag]); unset($this->flags[$index]);
} else { } elseif ($value != false) {
$this->flags[] = $flag . '=' . $value; $match = preg_grep('/' . $flag . '/', $this->flags);
if (reset($match)) {
$this->flags[key($match)] = $flag . '=' . $value;
} else {
$this->flags[] = $flag . '=' . $value;
}
} }
} else { } elseif ($index === false) {
$this->flags[] = $flag; $this->flags[] = $flag;
} }
} }

View File

@ -11,6 +11,7 @@
namespace Fetch\Test; namespace Fetch\Test;
use Fetch\Server;
/** /**
* @package Fetch * @package Fetch
@ -18,5 +19,39 @@ namespace Fetch\Test;
*/ */
class ServerTest extends \PHPUnit_Framework_TestCase class ServerTest extends \PHPUnit_Framework_TestCase
{ {
/**
* @dataProvider flagsDataProvider
* @param string $expected server string with %host% placeholder
* @param integer $port to use (needed to test behavior on port 143 and 993 from constructor)
* @param array $flags to set/unset ($flag => $value)
*/
public function testFlags($expected, $port, $flags)
{
$host = 'example.com';
$server = new Server($host, $port);
foreach ($flags as $flag => $value) {
$server->setFlag($flag, $value);
}
$this->assertEquals(str_replace('%host%', $host, $expected), $server->getServerString());
}
public function flagsDataProvider() {
return array(
array('{%host%:143/novalidate-cert}', 143, array()),
array('{%host%:143/validate-cert}', 143, array('validate-cert' => true)),
array('{%host%:143}', 143, array('novalidate-cert' => false)),
array('{%host%:993/ssl}', 993, array()),
array('{%host%:993}', 993, array('ssl' => false)),
array('{%host%:100/tls}', 100, array('tls' => true)),
array('{%host%:100/tls}', 100, array('tls' => true, 'tls' => true)),
array('{%host%:100/notls}', 100, array('tls' => true, 'notls' => true)),
array('{%host%:100}', 100, array('ssl' => true, 'ssl' => false)),
array('{%host%:100/user=foo}', 100, array('user' => 'foo')),
array('{%host%:100/user=foo}', 100, array('user' => 'foo', 'user' => 'foo')),
array('{%host%:100/user=bar}', 100, array('user' => 'foo', 'user' => 'bar')),
array('{%host%:100}', 100, array('user' => 'foo', 'user' => false)),
);
}
} }