Skip to content

Commit

Permalink
# New getter method for boolean properties added.
Browse files Browse the repository at this point in the history
  • Loading branch information
manuelpichler committed Mar 3, 2010
1 parent 1f88347 commit 1d11653
Show file tree
Hide file tree
Showing 3 changed files with 195 additions and 0 deletions.
17 changes: 17 additions & 0 deletions source/PHP/PMD/AbstractRule.php
Expand Up @@ -359,6 +359,23 @@ public function addProperty($name, $value)
$this->_properties[$name] = $value;
}

/**
* Returns the value of a configured property as a boolean or throws an
* exception when no property with <b>$name</b> exists.
*
* @param string $name The property identifier.
*
* @return boolean
* @throws OutOfBoundsException When no property for <b>$name</b> exists.
*/
public function getBooleanProperty($name)
{
if (isset($this->_properties[$name])) {
return in_array($this->_properties[$name], array('true', 'on', 1));
}
throw new OutOfBoundsException('Property $' . $name . ' does not exist.');
}

/**
* Returns the value of a configured property as an integer or throws an
* exception when no property with <b>$name</b> exists.
Expand Down
2 changes: 2 additions & 0 deletions test/PHP/PMD/AllTests.php
Expand Up @@ -53,6 +53,7 @@
require_once dirname(__FILE__) . '/ReportTest.php';
require_once dirname(__FILE__) . '/RuleSetFactoryTest.php';
require_once dirname(__FILE__) . '/RuleSetTest.php';
require_once dirname(__FILE__) . '/RuleTest.php';
require_once dirname(__FILE__) . '/Node/AllTests.php';
require_once dirname(__FILE__) . '/Regression/AllTests.php';
require_once dirname(__FILE__) . '/Renderer/AllTests.php';
Expand Down Expand Up @@ -86,6 +87,7 @@ public static function suite()
$suite->addTestSuite('PHP_PMD_ReportTest');
$suite->addTestSuite('PHP_PMD_RuleSetFactoryTest');
$suite->addTestSuite('PHP_PMD_RuleSetTest');
$suite->addTestSuite('PHP_PMD_RuleTest');

$suite->addTest(PHP_PMD_Node_AllTests::suite());
$suite->addTest(PHP_PMD_Regression_AllTests::suite());
Expand Down
176 changes: 176 additions & 0 deletions test/PHP/PMD/RuleTest.php
@@ -0,0 +1,176 @@
<?php
/**
* This file is part of PHP_PMD.
*
* PHP Version 5
*
* Copyright (c) 2009-2010, Manuel Pichler <mapi@phpmd.org>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* * Neither the name of Manuel Pichler nor the names of his
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @category PHP
* @package PHP_PMD
* @author Manuel Pichler <mapi@phpmd.org>
* @copyright 2009-2010 Manuel Pichler. All rights reserved.
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version SVN: $Id$
* @link http://phpmd.org
*/

require_once dirname(__FILE__) . '/AbstractTest.php';

require_once dirname(__FILE__) . '/_files/rules/TestRule.php';

require_once 'PHP/PMD/AbstractRule.php';

/**
* Test case for the {@link PHP_PMD_AbstractRule} class.
*
* @category PHP
* @package PHP_PMD
* @author Manuel Pichler <mapi@phpmd.org>
* @copyright 2009-2010 Manuel Pichler. All rights reserved.
* @license http://www.opensource.org/licenses/bsd-license.php BSD License
* @version Release: @package_version@
* @link http://phpmd.org
*/
class PHP_PMD_RuleTest extends PHP_PMD_AbstractTest
{
/**
* testGetIntPropertyReturnsValueOfTypeInteger
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
*/
public function testGetIntPropertyReturnsValueOfTypeInteger()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->addProperty(__FUNCTION__, '42.3');

$this->assertSame(42, $rule->getIntProperty(__FUNCTION__));
}

/**
* testGetBooleanPropertyReturnsTrueForStringValue1
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
*/
public function testGetBooleanPropertyReturnsTrueForStringValue1()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->addProperty(__FUNCTION__, '1');

$this->assertTrue($rule->getBooleanProperty(__FUNCTION__));
}

/**
* testGetBooleanPropertyReturnsTrueForStringValueOn
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
*/
public function testGetBooleanPropertyReturnsTrueForStringValueOn()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->addProperty(__FUNCTION__, 'on');

$this->assertTrue($rule->getBooleanProperty(__FUNCTION__));
}

/**
* testGetBooleanPropertyReturnsTrueForStringValueTrue
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
*/
public function testGetBooleanPropertyReturnsTrueForStringValueTrue()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->addProperty(__FUNCTION__, 'true');

$this->assertTrue($rule->getBooleanProperty(__FUNCTION__));
}

/**
* testGetBooleanPropertyReturnsTrueForDifferentStringValue
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
*/
public function testGetBooleanPropertyReturnsTrueForDifferentStringValue()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->addProperty(__FUNCTION__, 'True');

$this->assertFalse($rule->getBooleanProperty(__FUNCTION__));
}

/**
* testGetIntPropertyThrowsExceptionWhenNoPropertyForNameExists
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
* @expectedException OutOfBoundsException
*/
public function testGetIntPropertyThrowsExceptionWhenNoPropertyForNameExists()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->getIntProperty(__FUNCTION__);
}

/**
* testGetBooleanPropertyThrowsExceptionWhenNoPropertyForNameExists
*
* @return void
* @covers PHP_PMD_AbstractRule
* @group phpmd
* @group unittest
* @expectedException OutOfBoundsException
*/
public function testGetBooleanPropertyThrowsExceptionWhenNoPropertyForNameExists()
{
$rule = $this->getMockForAbstractClass('PHP_PMD_AbstractRule');
$rule->getBooleanProperty(__FUNCTION__);
}
}

0 comments on commit 1d11653

Please sign in to comment.