From: <dg...@us...> - 2009-07-31 13:50:03
|
Revision: 1929 http://simpletest.svn.sourceforge.net/simpletest/?rev=1929&view=rev Author: dgheath Date: 2009-07-31 13:49:36 +0000 (Fri, 31 Jul 2009) Log Message: ----------- Option values now have tags stripped, more closely mirroring browser behaviour. Also, added work-around for html-tidys over-zealous empty tag stripping. Modified Paths: -------------- simpletest/trunk/tag.php simpletest/trunk/test/parsing_test.php simpletest/trunk/tidy_parser.php Modified: simpletest/trunk/tag.php =================================================================== --- simpletest/trunk/tag.php 2009-07-31 13:00:11 UTC (rev 1928) +++ simpletest/trunk/tag.php 2009-07-31 13:49:36 UTC (rev 1929) @@ -1017,7 +1017,7 @@ if (trim($this->getValue()) == $compare) { return true; } - return trim($this->getContent()) == $compare; + return trim(strip_tags($this->getContent())) == $compare; } /** @@ -1028,7 +1028,7 @@ */ function getDefault() { if ($this->getAttribute('value') === false) { - return $this->getContent(); + return strip_tags($this->getContent()); } return $this->getAttribute('value'); } Modified: simpletest/trunk/test/parsing_test.php =================================================================== --- simpletest/trunk/test/parsing_test.php 2009-07-31 13:00:11 UTC (rev 1928) +++ simpletest/trunk/test/parsing_test.php 2009-07-31 13:49:36 UTC (rev 1929) @@ -425,6 +425,31 @@ $this->assertEqual($page->getField(new SimpleByName('a')), 'aaa'); } + function testSelectionOptionsAreNormalised() { + $raw = '<form>' . + '<select name="a">' . + '<option selected><b>Big</b> bold</option>' . + '<option>small <em>italic</em></option>' . + '</select>' . + '</form>'; + $page = $this->whenVisiting('http://host', $raw); + $this->assertEqual($page->getField(new SimpleByName('a')), 'Big bold'); + $this->assertTrue($page->setField(new SimpleByName('a'), 'small italic')); + $this->assertEqual($page->getField(new SimpleByName('a')), 'small italic'); + } + + function testCanParseBlankOptions() { + $raw = '<form> + <select id=4 name="d"> + <option value="d1">D1</option> + <option value="d2">D2</option> + <option></option> + </select> + </form>'; + $page = $this->whenVisiting('http://host', $raw); + $this->assertTrue($page->setField(new SimpleByName('d'), '')); + } + function testSettingSelectionFieldByEnclosingLabel() { $raw = '<form>' . '<label>Stuff' . @@ -470,7 +495,7 @@ } } -abstract class TestOfParsingUsingPhpParser extends TestOfParsing { +class TestOfParsingUsingPhpParser extends TestOfParsing { function whenVisiting($url, $content) { $response = new MockSimpleHttpResponse(); @@ -486,20 +511,9 @@ $this->assertEqual($page->getTitle(), "Me&Me"); } - function testCanParseBlankOptions() { - $raw = '<form> - <select id=4 name="d"> - <option value="d1">D1</option> - <option value="d2">D2</option> - <option></option> - </select> - </form>'; - $page = $this->whenVisiting('http://host', $raw); - $this->assertTrue($page->setField(new SimpleByName('d'), '')); - } } -class TestOfParsingUsingTidyParser extends TestOfParsing { +abstract class TestOfParsingUsingTidyParser extends TestOfParsing { function skip() { $this->skipUnless(extension_loaded('tidy'), 'Install \'tidy\' php extension to enable html tidy based parser'); @@ -512,6 +526,5 @@ $builder = new SimpleTidyPageBuilder(); return $builder->parse($response); } - } ?> \ No newline at end of file Modified: simpletest/trunk/tidy_parser.php =================================================================== --- simpletest/trunk/tidy_parser.php 2009-07-31 13:00:11 UTC (rev 1928) +++ simpletest/trunk/tidy_parser.php 2009-07-31 13:49:36 UTC (rev 1929) @@ -46,7 +46,9 @@ */ function parse($response) { $this->page = new SimplePage($response); - $tidied = tidy_parse_string($response->getContent(), array('output-html' => true), 'latin1'); + $tidied = tidy_parse_string($this->guardEmptyTags($response->getContent()), + array('output-html' => true, 'new-empty-tags' => 'empty', 'new-inline-tags' => 'empty'), + 'latin1'); if ($tidied->errorBuffer) { foreach(explode("\n", $tidied->errorBuffer) as $notice) { //user_error($notice, E_USER_NOTICE); @@ -60,6 +62,16 @@ } /** + * HTML tidy strips out empty tags such as <option> which we + * need to preserve. This method inserts an additional tag. + * @param string The raw html. + * @return string The html with guard tags inserted. + */ + private function guardEmptyTags($html) { + return preg_replace('|<([^>/][^>]*)>(\s*)</|', '<\1><empty>\2</', $html); + } + + /** * Visits the given node and all children */ private function walkTree($node) { @@ -127,7 +139,7 @@ $options = array(); if ($node->name == 'option') { $options[] = $this->tags()->createTag($node->name, $this->attributes($node)) - ->addContent($this->innerHtml($node)); + ->addContent($this->innerHtml($node)); } if ($node->hasChildren()) { foreach ($node->child as $child) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |