diff options
author | Brion Vibber <brion@pobox.com> | 2010-04-23 15:40:48 -0700 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-04-23 15:40:48 -0700 |
commit | 8fd0059bf69ed16ed4efad7b8e16dc2afda32e18 (patch) | |
tree | 88b030330d671dbbb8dfd6430d45f29d9e4d8bea /tests | |
parent | 9c8052e755e5ad4c8120ace9acdd75ee910e2ab7 (diff) |
Test cases and fixes for Atom and RSS content decoding.
Fix extraction of Atom <content type="text"> and <content type="html">; we were failing to escape plaintext source data to HTML, and doing an extraneous double-deescape on HTML source resulting in breakage of notices containing text that looks like HTML. Only <content type="xhtml"> was working correctly previously.
Fixes for RSS2 content processing: we were failing to load <content:encoded> at all due to using wrong element name, and were applying an extraneous de-escape for <description> rather than the escaping that is required to turn plaintext into HTML. (Per spec, <description> must be plaintext.)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ActivityParseTests.php | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/ActivityParseTests.php b/tests/ActivityParseTests.php index 4563da914..378478d74 100644 --- a/tests/ActivityParseTests.php +++ b/tests/ActivityParseTests.php @@ -32,6 +32,18 @@ class ActivityParseTests extends PHPUnit_Framework_TestCase $this->assertEquals('tag:versioncentral.example.org,2009:/change/1643245', $act->objects[0]->id); } + public function testExample2() + { + global $_example2; + $dom = DOMDocument::loadXML($_example2); + $act = new Activity($dom->documentElement); + + $this->assertFalse(empty($act)); + // Did we handle <content type="html"> correctly with a typical payload? + $this->assertEquals("<p>Geraldine posted a Photo on PhotoPanic</p>\n " . + "<img src=\"/geraldine/photo1.jpg\">", trim($act->content)); + } + public function testExample3() { global $_example3; @@ -305,6 +317,71 @@ class ActivityParseTests extends PHPUnit_Framework_TestCase } + public function testAtomContent() + { + $tests = array(array("<content>Some regular plain text.</content>", + "Some regular plain text."), + array("<content><b>this is not HTML</b></content>", + "<b>this is not HTML</b>"), + array("<content type='html'>Some regular plain HTML.</content>", + "Some regular plain HTML."), + array("<content type='html'><b>this is too HTML</b></content>", + "<b>this is too HTML</b>"), + array("<content type='html'>&lt;b&gt;but this is not HTML!&lt;/b&gt;</content>", + "<b>but this is not HTML!</b>"), + array("<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Some regular plain XHTML.</div></content>", + "Some regular plain XHTML."), + array("<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'><b>This is some XHTML!</b></div></content>", + "<b>This is some XHTML!</b>"), + array("<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'><b>This is not some XHTML!</b></div></content>", + "<b>This is not some XHTML!</b>"), + array("<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>&lt;b&gt;This is not some XHTML either!&lt;/b&gt;</div></content>", + "&lt;b&gt;This is not some XHTML either!&lt;/b&gt;")); + foreach ($tests as $data) { + list($source, $output) = $data; + $xml = "<entry xmlns='http://www.w3.org/2005/Atom'>" . + "<id>http://example.com/fakeid</id>" . + "<author><name>Test</name></author>" . + "<title>Atom content tests</title>" . + $source . + "</entry>"; + $dom = DOMDocument::loadXML($xml); + $act = new Activity($dom->documentElement); + + $this->assertFalse(empty($act)); + $this->assertEquals($output, trim($act->content)); + } + } + + public function testRssContent() + { + $tests = array(array("<content:encoded>Some regular plain HTML.</content:encoded>", + "Some regular plain HTML."), + array("<content:encoded>Some <b>exciting bold HTML</b></content:encoded>", + "Some <b>exciting bold HTML</b>"), + array("<content:encoded>Some &lt;b&gt;escaped non-HTML.&lt;/b&gt;</content:encoded>", + "Some <b>escaped non-HTML.</b>"), + array("<description>Some plain text.</description>", + "Some plain text."), + array("<description>Some <b>non-HTML text</b></description>", + "Some <b>non-HTML text</b>"), + array("<description>Some &lt;b&gt;double-escaped text&lt;/b&gt;</description>", + "Some &lt;b&gt;double-escaped text&lt;/b&gt;")); + foreach ($tests as $data) { + list($source, $output) = $data; + $xml = "<item xmlns:content='http://purl.org/rss/1.0/modules/content/'>" . + "<guid>http://example.com/fakeid</guid>" . + "<title>RSS content tests</title>" . + $source . + "</item>"; + $dom = DOMDocument::loadXML($xml); + $act = new Activity($dom->documentElement); + + $this->assertFalse(empty($act)); + $this->assertEquals($output, trim($act->content)); + } + } + } $_example1 = <<<EXAMPLE1 |