summaryrefslogtreecommitdiff
path: root/plugins/FeedSub/tests/FeedDiscoveryTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/FeedSub/tests/FeedDiscoveryTest.php')
-rw-r--r--plugins/FeedSub/tests/FeedDiscoveryTest.php111
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/'));
+ }
+}