<?php
/**
* Unit test suite for HTML_Common2 class
*
* PHP version 5
*
* LICENSE:
*
* Copyright (c) 2004-2014, Alexey Borzov <avb@php.net>
*
* 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.
* * The names of the authors may not 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 HTML
* @package HTML_Common2
* @author Alexey Borzov <avb@php.net>
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @link http://pear.php.net/package/HTML_Common2
*/
if (strpos($_SERVER['argv'][0], 'phpunit') === false) {
/** Include PHPUnit dependencies based on version */
require_once 'PHPUnit/Runner/Version.php';
if (version_compare(PHPUnit_Runner_Version::id(), '3.5.0', '>=')) {
require_once 'PHPUnit/Autoload.php';
} else {
require_once 'PHPUnit/Framework.php';
}
}
if ('@' . 'package_version@' == '2.1.1') {
// If running from SVN checkout, do a relative include
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'HTML/Common2.php';
} else {
// If installed, use include_path
require_once 'HTML/Common2.php';
}
/**
* A non-abstract subclass of HTML_Common2
*
* HTML_Common2 cannot be instantiated due to abstract __toString() method,
* we need to (sort of) implement that.
*/
class HTML_Common2_Concrete extends HTML_Common2
{
public function __toString()
{
return '';
}
}
/**
* A subclass to test the 'watched attributes' functionality of HTML_Common2
*
* Two attributes are watched here: 'readonly' and 'uppercase'. The former
* should not be changed by any of the methods and the value of the latter
* should always be uppercase. This is achieved by implementing the
* onAttributeChange() method defined in HTML_Common2
*/
class HTML_Common2_WatchedAttributes extends HTML_Common2_Concrete
{
protected $watchedAttributes = array('readonly', 'uppercase');
protected $attributes = array(
'readonly' => 'this attribute is readonly',
'uppercase' => 'VALUE OF THIS IS ALWAYS UPPERCASE'
);
protected function onAttributeChange($name, $value = null)
{
if ('readonly' == $name) {
return;
}
if ('uppercase' == $name) {
if (null === $value) {
unset($this->attributes[$name]);
} else {
$this->attributes[$name] = strtoupper($value);
}
}
}
}
/**
* Unit test for HTML_Common2 class
*/
class HTML_Common2_Test extends PHPUnit_Framework_TestCase
{
public function testUnknownOptionIsNull()
{
$this->assertNull(HTML_Common2::getOption('foobar'));
}
public function testAnyOptionAllowed()
{
HTML_Common2::setOption('foobar', 'baz');
$this->assertEquals('baz', HTML_Common2::getOption('foobar'));
}
public function testArrayOfOptionsAllowed()
{
HTML_Common2::setOption(array(
'quux' => 'xyzzy'
));
$this->assertEquals('xyzzy', HTML_Common2::getOption('quux'));
$this->assertArrayHasKey('charset', HTML_Common2::getOption());
}
public function testConstructorSetsDefaultAttributes()
{
$obj = new HTML_Common2_Concrete();
$this->assertEquals(array(), $obj->getAttributes());
$obj = new HTML_Common2_Concrete(array('foo' => 'bar'));
$this->assertEquals(array('foo' => 'bar'), $obj->getAttributes());
}
public function testUnknownAttributeIsNull()
{
$obj = new HTML_Common2_Concrete();
$this->assertNull($obj->getAttribute('foobar'));
}
public function testAttributeNamesAreLowercased()
{
$obj = new HTML_Common2_Concrete();
$obj->setAttributes(array('BAZ' => 'quux'));
$obj->setAttribute('Foo', 'bar');
$obj->mergeAttributes(array('XyZZy' => 'xyzzy value'));
$this->assertEquals('bar', $obj->getAttribute('FOO'));
$obj->removeAttribute('fOO');
$this->assertEquals(
array('baz' => 'quux', 'xyzzy' => 'xyzzy value'),
$obj->getAttributes()
);
}
public function testAttributeValuesAreStrings()
{
$obj = new HTML_Common2_Concrete();
$obj->setAttributes(array('foo' => null, 'bar' => 10));
$obj->setAttribute('baz', 2.5);
$obj->mergeAttributes(array('foobar' => 42));
foreach ($obj->getAttributes() as $attribute) {
$this->assertInternalType('string', $attribute);
}
}
public function testDefaultIndentLevelIsZero()
{
$obj = new HTML_Common2_Concrete();
$this->assertEquals(0, $obj->getIndentLevel());
}
public function testIndentLevelIsNonnegative()
{
$obj = new HTML_Common2_Concrete();
$obj->setIndentLevel(-1);
$this->assertEquals(0, $obj->getIndentLevel());
$obj->setIndentLevel(1);
$this->assertEquals(1, $obj->getIndentLevel());
}
public function testDefaultCommentIsNull()
{
$obj = new HTML_Common2_Concrete();
$this->assertNull($obj->getComment());
}
public function testAttributesAsStringAccepted()
{
$obj = new HTML_Common2_Concrete('multiple style= "height: 2em;" class=\'foo\' width=100% ');
$this->assertEquals(
array('multiple' => 'multiple', 'style' => 'height: 2em;',
'class' => 'foo', 'width' => '100%'),
$obj->getAttributes()
);
}
public function testNonXhtmlAttributesTransformed()
{
$obj = new HTML_Common2_Concrete(array('multiple'));
$obj->setAttribute('selected');
$obj->mergeAttributes('checked nowrap');
$this->assertEquals(
array('multiple' => 'multiple', 'selected' => 'selected',
'checked' => 'checked', 'nowrap' => 'nowrap'),
$obj->getAttributes()
);
}
public function testWellFormedXhtmlGenerated()
{
$obj = new HTML_Common2_Concrete(array('foo' => 'bar&"baz"', 'quux' => 'xyz\'zy'));
$this->assertEquals(
' foo="bar&"baz"" quux="xyz'zy"',
$obj->getAttributes(true)
);
}
public function testCanWatchAttributes()
{
$obj = new HTML_Common2_WatchedAttributes();
$obj->setAttributes(array('readonly' => 'something', 'uppercase' => 'new value', 'foo' => 'bar'));
$this->assertEquals(
array('readonly' => 'this attribute is readonly', 'uppercase' => 'NEW VALUE', 'foo' => 'bar'),
$obj->getAttributes()
);
$obj->mergeAttributes(array('readonly' => 'something', 'uppercase' => 'other value', 'foo' => 'baz'));
$this->assertEquals(
array('readonly' => 'this attribute is readonly', 'uppercase' => 'OTHER VALUE', 'foo' => 'baz'),
$obj->getAttributes()
);
$obj->setAttribute('readonly', 'something else');
$obj->setAttribute('uppercase', 'yet another value');
$obj->setAttribute('foo', 'quux');
$this->assertEquals(
array('readonly' => 'this attribute is readonly', 'uppercase' => 'YET ANOTHER VALUE', 'foo' => 'quux'),
$obj->getAttributes()
);
$obj->removeAttribute('readonly');
$obj->removeAttribute('uppercase');
$obj->removeAttribute('foo');
$this->assertEquals(
array('readonly' => 'this attribute is readonly'),
$obj->getAttributes()
);
}
public function testFluentInterfaces()
{
$obj = new HTML_Common2_Concrete();
$this->assertSame($obj, $obj->setAttributes(array('foo' => 'foo value')));
$this->assertSame($obj, $obj->mergeAttributes(array('bar' => 'bar value')));
$this->assertSame($obj, $obj->setAttribute('baz', 'baz value'));
$this->assertSame($obj, $obj->removeAttribute('bar'));
$this->assertSame($obj, $obj->setComment('A comment'));
$this->assertSame($obj, $obj->setIndentLevel(3));
}
public function testCanAddCssClasses()
{
$obj = new HTML_Common2_Concrete();
$obj->addClass('foobar');
$obj->addClass('foobar');
$this->assertEquals('foobar', $obj->getAttribute('class'));
$obj->addClass('quux xyzzy');
$this->assertFalse($obj->hasClass('bar'));
$this->assertTrue($obj->hasClass('foobar'));
$this->assertTrue($obj->hasClass('quux'));
$this->assertTrue($obj->hasClass('xyzzy'));
$obj->addClass(array('newclass'));
$this->assertTrue($obj->hasClass('newclass'));
}
public function testCanRemoveCssClasses()
{
$obj = new HTML_Common2_Concrete(array('class' => 'foobar quux xyzzy'));
$obj->removeClass('foobar xyzzy');
$this->assertFalse($obj->hasClass('xyzzy'));
$this->assertFalse($obj->hasClass('foobar'));
$this->assertTrue($obj->hasClass('quux'));
$obj->removeClass(array('quux'));
$this->assertEquals(null, $obj->getAttribute('class'));
}
public function testArrayAccess()
{
$obj = new HTML_Common2_Concrete(array('baz' => 'quux'));
$this->assertTrue(isset($obj['baz']));
$this->assertEquals('quux', $obj['baz']);
$obj['foo'] = 'bar';
$this->assertTrue(isset($obj['foo']));
$this->assertEquals('bar', $obj['foo']);
unset($obj['fOo']);
$this->assertFalse(isset($obj['foo']));
$obj[] = 'disabled';
$this->assertTrue(isset($obj['disabled']));
$this->assertEquals('disabled', $obj['disabled']);
}
}
?>
Copyright 2K16 - 2K18 Indonesian Hacker Rulez