芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp5/includes/test/HTML_CSS/tests/HTML_CSS_TestSuite_Bugs.php
* @license http://www.opensource.org/licenses/bsd-license.php BSD * @version CVS: $Id: HTML_CSS_TestSuite_Bugs.php,v 1.7 2009/07/03 16:17:34 farell Exp $ * @link http://pear.php.net/package/HTML_CSS * @since File available since Release 1.4.0 */ if (!defined("PHPUnit_MAIN_METHOD")) { define("PHPUnit_MAIN_METHOD", "HTML_CSS_TestSuite_Bugs::main"); } require_once "PHPUnit/Framework/TestCase.php"; require_once "PHPUnit/Framework/TestSuite.php"; require_once 'HTML/CSS.php'; require_once 'PEAR.php'; require_once 'Event/Dispatcher.php'; /** * Test suite class to test old bugs of HTML_CSS * * @category HTML * @package HTML_CSS * @author Laurent Laville
* @license http://www.opensource.org/licenses/bsd-license.php BSD * @version Release: 1.5.4 * @link http://pear.php.net/package/HTML_CSS * @since File available since Release 1.4.0 */ class HTML_CSS_TestSuite_Bugs extends PHPUnit_Framework_TestCase { /** * A CSS object * @var object */ protected $css; /** * All default options to configure HTML_CSS behavior * @var array */ protected $default_options; /** * Instance of Event_Dispatcher for test listener * @var object */ protected $dispatcher; /** * Runs the test methods of this class. * * @static * @return void */ public static function main() { include_once "PHPUnit/TextUI/TestRunner.php"; $suite = new PHPUnit_Framework_TestSuite('HTML_CSS Bugs Tests'); $result = PHPUnit_TextUI_TestRunner::run($suite); } /** * Sets up the fixture. * This method is called before a test is executed. * * @return void */ protected function setUp() { $this->dispatcher = Event_Dispatcher::getInstance(); $tab = ' '; $eol = strtolower(substr(PHP_OS, 0, 3)) == 'win' ? "\r\n" : "\n"; // default options, rewrites only for regression test of bug #10103 $this->default_options = array('xhtml' => true, 'tab' => $tab, 'cache' => true, 'oneline' => false, 'charset' => 'iso-8859-1', 'contentDisposition' => false, 'lineEnd' => $eol, 'groupsfirst' => true, 'allowduplicates' => false); $prefs = array('push_callback' => array($this, 'handleError'), 'error_callback' => array($this, 'handleErrorOutput')); $this->css = new HTML_CSS($this->default_options, $prefs); } /** * Tears down the fixture. * This method is called after a test is executed. * * @return void */ protected function tearDown() { unset($this->css); } /** * Don't die if the error is an exception (as default callback) * * @param int $code a numeric error code. * Valid are HTML_CSS_ERROR_* constants * @param string $level error level ('exception', 'error', 'warning', ...) * * @return int PEAR_ERROR_CALLBACK */ public function handleError($code, $level) { return PEAR_ERROR_CALLBACK; } /** * Do nothing (no display, no log) when an error is raised * * @param object $css_error instance of HTML_CSS_Error * * @return void */ public function handleErrorOutput($css_error) { } /** * Regression test for bug #725 * * @return void * @link http://pear.php.net/bugs/bug.php?id=725 * differs hierarchy elements with difference in spaces between * @group bugs */ public function testBug725() { $strcss = " body td { /* 3 spaces between body and td */ margin: 20px; padding: 20px; border: 0; color: #444; }"; $e = $this->css->parseString($strcss); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $style = 'body td '; $e = $this->css->setStyle($style, 'margin', '0'); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $gs = array('body td' => array('margin' => '0', 'padding' => '20px', 'border' => '0', 'color' => '#444')); $def = $this->css->toArray(); $this->assertSame($gs, $def, 'setStyle should change the "' . $style . '" not add an other one'); } /** * Regression test for bug #998 * * When parsing in some CSS like: * * .sec { display: none; } * .month:before { content: "-"; } * .year:before { content: "-"; } * .min:before { content: ":"; } * .sec:before { content: ":"; } * * the resulting array should be: * * [.sec] => Array ( [display] => none ) * [.month:before] => Array ( [content] => "-" ) * [.year:before] => Array ( [content] => "-" ) * [.min:before] => Array ( [content] => ":" ) * [.sec:before] => Array ( [content] => ":" ) * * and not : * * [.sec] => Array ( [display] => none ) * [.month:before] => Array ( [content] => "-" ) * [.year:before] => Array ( [content] => "-" ) * [.min:before] => Array ( [content] => " ) * [.sec:before] => Array ( [content] => " ) * * @return void * @link http://pear.php.net/bugs/bug.php?id=998 * parseString incorrectly reads attribute values with colons in * @group bugs */ public function testBug998() { $strcss = ' .sec { display: none; } .month:before { content: "-"; } .year:before { content: "-"; } .min:before { content: ":"; } .sec:before { content: ":"; } '; $e = $this->css->parseString($strcss); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $gs = array('.sec' => array('display' => 'none'), '.month:before' => array('content' => '"-"'), '.year:before' => array('content' => '"-"'), '.min:before' => array('content' => '":"'), '.sec:before' => array('content' => '":"')); $def = $this->css->toArray(); $this->assertSame($gs, $def, 'parseString incorrectly reads attribute values with colons in'); } /** * Regression test for bug #1066 * * @return void * @link http://pear.php.net/bugs/bug.php?id=1066 * Values are not trimmed * @group bugs */ public function testBug1066() { $strcss = ' html { display: block; /* 8 spaces after colon */ } '; $e = $this->css->parseString($strcss); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $gs = array('html' => array('display' => 'block')); $def = $this->css->toArray(); $this->assertSame($gs, $def, 'parseString incorrectly reads ' . 'attribute values with spaces after colon'); } /** * Regression test for bug #1072 * * @return void * @link http://pear.php.net/bugs/bug.php?id=1072 * HTML_CSS Not cascading properties * @group bugs */ public function testBug1072() { $strcss = ' p { font-family: Arial; } p { font-family: Courier; } p, td { font-family: Times; } td p { font-family: Comic; } '; $e = $this->css->parseString($strcss); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $e = $this->css->getStyle('p', 'font-family'); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $this->assertSame('Times', $e, 'HTML_CSS is not cascading style ' . 'when a "selector" is part of a group'); $gs = array('p' => array('font-family' => 'Courier'), 'p, td' => array('font-family' => 'Times'), 'td p' => array('font-family' => 'Comic')); $def = $this->css->toArray(); $this->assertSame($gs, $def, 'HTML_CSS is not cascading style ' . 'when a "selector" is part of a group'); } /** * Regression test for bug #1084 * * @return void * @link http://pear.php.net/bugs/bug.php?id=1084 * parseSelectors incorrectly assumes selector structure * @group bugs */ public function testBug1084() { $sa = '#heading .shortname'; $e = $this->css->parseSelectors($sa); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $this->assertSame($sa, $e, 'parseSelectors incorrectly assumes selector structure "' . $sa . '"'); $sb = '#heading .icon'; $e = $this->css->parseSelectors($sb); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $this->assertSame($sb, $e, 'parseSelectors incorrectly assumes selector structure "' . $sb . '"'); $sc = '#heading .icon img'; $e = $this->css->parseSelectors($sc); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $this->assertSame($sc, $e, 'parseSelectors incorrectly assumes selector structure "' . $sc . '"'); $sd = 'a#heading.icon:active'; $e = $this->css->parseSelectors($sd); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertFalse(PEAR::isError($e), $msg); $this->assertSame($sd, $e, 'parseSelectors incorrectly assumes selector structure "' . $sd . '"'); } /** * Regression test for bug #12039 * * Even if it was considered as bogus, this test case prevent from invalid * data source. * * @return void * @link http://pear.php.net/bugs/bug.php?id=12039 * @group bugs */ public function testBug12039() { $strcss = ' .back2top { clear: both; height: 11px; text-align: right; } a.top { background: none no-repeat top left; text-decoration: none; width: {IMG_ICON_BACK_TOP_WIDTH}px; height: {IMG_ICON_BACK_TOP_HEIGHT}px; display: block; float: right; overflow: hidden; letter-spacing: 1000px; text-indent: 11px; } '; $e = $this->css->parseString($strcss); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertTrue(PEAR::isError($e), $msg); $this->assertContains('valid CSS structure', $msg); } /** * Regression test for bug #3920 * * @return void * @link http://pear.php.net/bugs/bug.php?id=3920 * Inappropriate style rule reordering * @group bugs */ public function testBug3920() { $this->css->setStyle('#right', 'position', ' absolute'); $this->css->setStyle('#right', 'right', '0px'); $this->css->setStyle('#right', 'top', '100px'); $this->css->setStyle('#right', 'background', '#fff'); $this->css->setStyle('#right', 'border', '1px solid #000'); $this->css->setStyle('#right', 'padding', '0px 5px'); $this->css->setStyle('#right', 'width', '200px'); $bodyRightGroup = $this->css->createGroup("* body #right"); $this->css->setGroupStyle($bodyRightGroup, 'width', '189px'); $this->css->setGroupStyle($bodyRightGroup, 'background-color', 'lightgrey'); // set global 'allowduplicates' option for IE hack $this->css->allowduplicates = true; // PHP5 signature, see __set() for PHP4 /* IE 5.5 */ $this->css->setStyle('#header', 'height', '81px'); $this->css->setStyle('#header', 'border-top', 'solid #000'); $this->css->setStyle('#header', 'border-right', 'solid #000'); $this->css->setStyle('#header', 'border-left', 'solid #000'); $this->css->setStyle('#header', 'voice-family', '"\"}\""'); $this->css->setStyle('#header', 'voice-family', 'inherit'); /* IE 6 */ $this->css->setStyle('#header', 'height', '99px'); $gs = array('#right' => array('position' => ' absolute', 'right' => '0px', 'top' => '100px', 'background' => '#fff', 'border' => '1px solid #000', 'padding' => '0px 5px', 'width' => '200px'), '* body #right' => array('width' => '189px', 'background-color' => 'lightgrey'), '#header' => array(1 => array('height' => '81px'), 2 => array('border-top' => 'solid #000'), 3 => array('border-right' => 'solid #000'), 4 => array('border-left' => 'solid #000'), 5 => array('voice-family' => '"\\"}\\""'), 6 => array('voice-family' => 'inherit'), 7 => array('height' => '99px'))); $def = $this->css->toArray(); $this->assertSame($gs, $def, 'inappropriate style rule reordering'); } /** * Regression test for bug #10103 * * @return void * @link http://pear.php.net/bugs/bug.php?id=10103 * @group bugs */ public function testBug10103() { foreach ($this->default_options as $opt => $val) { $this->assertSame($this->css->__get($opt), $val, "option '$opt' sets is invalid"); } } /** * Regression test for bug #15690 * * @return void * @link http://pear.php.net/bugs/bug.php?id=15690 * @group bugs */ public function testBug15690() { $this->css->setStyle('p','font-size','12px'); $e = $this->css->setSameStyle('body, td, th, li, dt, dd', 'p'); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertTrue(PEAR::isError($e), $msg); } /** * Regression test for bug #16354 * * Does not parse multiple simple At-rules properly * * @return void * @link http://pear.php.net/bugs/bug.php?id=16354 * @group bugs */ public function testBug16354() { $str = " @import \"foo.css\"; @import \"bar.css\"; "; $this->dispatcher->post($this, 'startTest', $str); $this->css->parseString($str, true); $this->dispatcher->post($this, 'endTest', $this->css->toArray()); $exp = array( '@import' => array( '1' => array( '"foo.css"' => '', ), '2' => array( '"bar.css"' => '', ), ), ); $this->assertSame($exp, $this->css->toArray()); } /** * Regression test for bug #16355 * * Simple at rules nested within other at rules are reported as top level at rules * * @return void * @link http://pear.php.net/bugs/bug.php?id=16355 * @group bugs */ public function testBug16355() { $str = " @media screen { @import \"screen-main.css\"; body { font-size: 10pt } } "; $this->dispatcher->post($this, 'startTest', $str); $e = $this->css->parseString($str); $this->dispatcher->post($this, 'endTest', $this->css->toArray()); $msg = PEAR::isError($e) ? $e->getMessage() : null; $this->assertTrue(PEAR::isError($e), $msg); $this->assertContains('valid CSS structure', $msg); } /** * Regression test for bug #16357 * * Multiple equal complex at rules not parsed correctly * * @return void * @link http://pear.php.net/bugs/bug.php?id=16357 * @group bugs */ public function testBug16357() { $str = " @media print { body { font-size: 10pt } } @media screen { body { font-size: 10pt; font-weight: bold } } @media screen { body { font-size: 12pt } } "; $this->dispatcher->post($this, 'startTest', $str); $this->css->parseString($str, true); $this->dispatcher->post($this, 'endTest', $this->css->toArray()); $exp = array ( '@media' => array ( 'print' => array ( 'body' => array ( 'font-size' => '10pt', ), ), 'screen' => array ( 'body' => array ( 'font-size' => '12pt', 'font-weight' => 'bold', ), ), ), ); $this->assertSame($exp, $this->css->toArray()); } /** * Regression test for bug #16358 * * Multiple media types on media at rule not parsed correctly * * @return void * @link http://pear.php.net/bugs/bug.php?id=16358 * @group bugs */ public function testBug16358() { $str = " @media screen, tv, presentation { body { font-size: 12pt } } "; $this->dispatcher->post($this, 'startTest', $str); $this->css->parseString($str, true); $this->dispatcher->post($this, 'endTest', $this->css->toArray()); $exp = array( '@media' => array( 'screen, tv, presentation' => array( 'body' => array( 'font-size' => '12pt', ), ), ), ); $this->assertSame($exp, $this->css->toArray()); } /** * Regression test for bug #16359 * * Multiple selectors on a single rule inside a complex at rule not properly parsed * * @return void * @link http://pear.php.net/bugs/bug.php?id=16359 * @group bugs */ public function testBug16359() { $str = " @media screen { body, p { font-size: 12pt } } "; $this->dispatcher->post($this, 'startTest', $str); $this->css->parseString($str, true); $this->dispatcher->post($this, 'endTest', $this->css->toArray()); $exp = array( '@media' => array( 'screen' => array( 'body, p' => array( 'font-size' => '12pt', ), ), ), ); $this->assertSame($exp, $this->css->toArray()); } /** * Regression test for bug #16360 * * Multiple selectors inside a complex at rule not properly parsed * * @return void * @link http://pear.php.net/bugs/bug.php?id=16360 * @group bugs */ public function testBug16360() { $str = " @media screen { body{ font-size: 12pt } p { font-size: 12pt } } "; $this->dispatcher->post($this, 'startTest', $str); $this->css->parseString($str, true); $this->dispatcher->post($this, 'endTest', $this->css->toArray()); $exp = array( '@media' => array( 'screen' => array( 'body' => array( 'font-size' => '12pt', ), 'p' => array( 'font-size' => '12pt', ), ), ), ); $this->assertSame($exp, $this->css->toArray()); } } // Call HTML_CSS_TestSuite_Bugs::main() if file is executed directly. if (PHPUnit_MAIN_METHOD == "HTML_CSS_TestSuite_Bugs::main") { HTML_CSS_TestSuite_Standard::main(); } ?>