forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			112 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?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/')); | ||
|  |     } | ||
|  | } |