diff options
author | Brion Vibber <brion@pobox.com> | 2009-11-19 20:55:38 -0800 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2009-11-19 21:04:21 -0800 |
commit | dd36c2de23dbdb30f333be1f9d5292d62363b0c8 (patch) | |
tree | 89eae38f77e74b51478cc2ec0c13a0ac249d75ba /plugins/FeedSub/tests/FeedDiscoveryTest.php | |
parent | dc90e90fd2748f953a2d4750105817b41cafe43a (diff) |
Initial functional version of feed subscription plugin, currently supporting only PuSH-enabled feeds.
Diffstat (limited to 'plugins/FeedSub/tests/FeedDiscoveryTest.php')
-rw-r--r-- | plugins/FeedSub/tests/FeedDiscoveryTest.php | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/plugins/FeedSub/tests/FeedDiscoveryTest.php b/plugins/FeedSub/tests/FeedDiscoveryTest.php new file mode 100644 index 000000000..1c5249701 --- /dev/null +++ b/plugins/FeedSub/tests/FeedDiscoveryTest.php @@ -0,0 +1,111 @@ +<?php + +if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { + print "This script must be run from the command line\n"; + exit(); +} + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); +define('STATUSNET', true); +define('LACONICA', true); + +require_once INSTALLDIR . '/lib/common.php'; +require_once INSTALLDIR . '/plugins/FeedSub/feedsub.php'; + +class FeedDiscoveryTest extends PHPUnit_Framework_TestCase +{ + /** + * @dataProvider provider + * + */ + public function testProduction($url, $html, $expected) + { + $sub = new FeedDiscovery(); + $url = $sub->discoverFromHTML($url, $html); + $this->assertEquals($expected, $url); + } + + static public function provider() + { + $sampleHeader = <<<END +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head profile="http://gmpg.org/xfn/11"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + +<title>leŭksman </title> + +<meta name="generator" content="WordPress 2.8.6" /> <!-- leave this for stats --> + +<link rel="stylesheet" href="http://leuksman.com/log/wp-content/themes/leuksman/style.css" type="text/css" media="screen" /> +<link rel="alternate" type="application/rss+xml" title="leŭksman RSS Feed" href="http://leuksman.com/log/feed/" /> +<link rel="pingback" href="http://leuksman.com/log/xmlrpc.php" /> + +<meta name="viewport" content="width = 640" /> + +<xmeta name="viewport" content="initial-scale=2.3, user-scalable=no" /> + +<style type="text/css" media="screen"> + + #page { background: url("http://leuksman.com/log/wp-content/themes/leuksman/images/kubrickbg.jpg") repeat-y top; border: none; } + +</style> + +<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://leuksman.com/log/xmlrpc.php?rsd" /> +<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://leuksman.com/log/wp-includes/wlwmanifest.xml" /> +<link rel='index' title='leŭksman' href='http://leuksman.com/log' /> +<meta name="generator" content="WordPress 2.8.6" /> +</head> +<body> +</body> +</html> +END; + return array( + array('http://example.com/', + '<html><link rel="alternate" href="http://example.com/feed/rss" type="application/rss+xml">', + 'http://example.com/feed/rss'), + array('http://example.com/atom', + '<html><link rel="alternate" href="http://example.com/feed/atom" type="application/atom+xml">', + 'http://example.com/feed/atom'), + array('http://example.com/empty', + '<html><link rel="alternate" href="http://example.com/index.pdf" type="application/pdf">', + false), + array('http://example.com/tagsoup', + '<body><pre><LINK rel=alternate hRef=http://example.com/feed/rss type=application/rss+xml><fnork', + 'http://example.com/feed/rss'), + // 'rel' attribute must be lowercase, alone per http://www.rssboard.org/rss-autodiscovery + array('http://example.com/tagsoup2', + '<body><pre><LINK rel=" feeders alternate 467" hRef=http://example.com/feed/rss type=application/rss+xml><fnork', + false), + array('http://example.com/tagsoup3', + '<body><pre><LINK rel=ALTERNATE hRef=http://example.com/feed/rss type=application/rss+xml><fnork', + false), + array('http://example.com/relative/link1', + '<html><link rel="alternate" href="/feed/rss" type="application/rss+xml">', + 'http://example.com/feed/rss'), + array('http://example.com/relative/link2', + '<html><link rel="alternate" href="../feed/rss" type="application/rss+xml">', + 'http://example.com/feed/rss'), + array('http://example.com/relative/link3', + '<html><link rel="alternate" href="http:/feed/rss" type="application/rss+xml">', + 'http://example.com/feed/rss'), + array('http://example.com/base/link1', + '<html><link rel="alternate" href="/feed/rss" type="application/rss+xml"><base href="http://target.example.com/">', + 'http://target.example.com/feed/rss'), + array('http://example.com/base/link2', + '<html><link rel="alternate" href="feed/rss" type="application/rss+xml"><base href="http://target.example.com/">', + 'http://target.example.com/feed/rss'), + array('http://example.com/base/link3', + '<html><link rel="alternate" href="http:/feed/rss" type="application/rss+xml"><base href="http://target.example.com/">', + 'http://target.example.com/feed/rss'), + // Trick question! There's a <base> but no href on it + array('http://example.com/relative/fauxbase', + '<html><link rel="alternate" href="../feed/rss" type="application/rss+xml"><base target="top">', + 'http://example.com/feed/rss'), + // Actual WordPress blog header example + array('http://leuksman.com/log/', + $sampleHeader, + 'http://leuksman.com/log/feed/')); + } +} |