<?php require_once dirname(__FILE__) . '/../functions.php'; /** * Unit tests for functions.php * * @author Christian Weiske <cweiske@php.net> */ class FunctionsTest extends PHPUnit_Framework_TestCase { protected $tmpFile = null; public function __construct() { $this->tmpFile = sys_get_temp_dir() . '/tt-rss-unittest.dat'; } public function tearDown() { if (file_exists($this->tmpFile)) { unlink($this->tmpFile); } } /** * Test fix_url with feed:// urls */ public function testFixUrlFeed() { $this->assertEquals('http://tt-rss.org/', fix_url('feed://tt-rss.org')); $this->assertEquals('http://tt-rss.org/', fix_url('feed://tt-rss.org/')); } /** * Test fix_url with non-http protocols */ public function testFixUrlProtocols() { $this->assertEquals('https://tt-rss.org/', fix_url('https://tt-rss.org')); $this->assertEquals('ftp://tt-rss.org/', fix_url('ftp://tt-rss.org/')); $this->assertEquals( 'reallylongprotocolisthat://tt-rss.org/', fix_url('reallylongprotocolisthat://tt-rss.org') ); } /** * Test fix_url with domain names only */ public function testFixUrlDomainOnly() { $this->assertEquals('http://tt-rss.org/', fix_url('tt-rss.org')); $this->assertEquals('http://tt-rss.org/', fix_url('tt-rss.org/')); $this->assertEquals('http://tt-rss.org/', fix_url('http://tt-rss.org')); $this->assertEquals('http://tt-rss.org/', fix_url('http://tt-rss.org/')); } /** * Test fix_url with domain + paths */ public function testFixUrlWithPaths() { $this->assertEquals('http://tt-rss.org/foo', fix_url('tt-rss.org/foo')); $this->assertEquals( 'http://tt-rss.org/foo/bar/baz', fix_url('tt-rss.org/foo/bar/baz') ); $this->assertEquals( 'http://tt-rss.org/foo/bar/baz/', fix_url('tt-rss.org/foo/bar/baz/') ); } /** * Test url_is_html() on html with a doctype */ public function testUrlIsHtmlNormalHtmlWithDoctype() { file_put_contents( $this->tmpFile, <<<HTM <!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" xml:lang="en"> <head> HTM ); $this->assertTrue(url_is_html($this->tmpFile)); file_put_contents( $this->tmpFile, <<<HTM <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> HTM ); $this->assertTrue(url_is_html($this->tmpFile)); } /** * Test url_is_html() on html with a doctype and xml header */ public function testUrlIsHtmlNormalHtmlWithDoctypeAndXml() { file_put_contents( $this->tmpFile, <<<HTM <?xml version="1.0" encoding="utf-8"?> <!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" xml:lang="en"> <head> HTM ); $this->assertTrue(url_is_html($this->tmpFile)); } /** * Test url_is_html() on html without a doctype */ public function testUrlIsHtmlNormalHtmlWithoutDoctype() { file_put_contents( $this->tmpFile, <<<HTM <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> HTM ); $this->assertTrue(url_is_html($this->tmpFile)); } /** * Test url_is_html() on UPPERCASE HTML */ public function testUrlIsHtmlNormalHtmlUppercase() { file_put_contents( $this->tmpFile, <<<HTM <HTML XMLNS="http://www.w3.org/1999/xhtml" XML:LANG="en"> <HEAD> HTM ); $this->assertTrue(url_is_html($this->tmpFile)); file_put_contents( $this->tmpFile, <<<HTM <HTML> <HEAD> HTM ); $this->assertTrue(url_is_html($this->tmpFile)); } /** * Test url_is_html() on atom */ public function testUrlIsHtmlAtom() { file_put_contents( $this->tmpFile, <<<HTM <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Christians Tagebuch</title> HTM ); $this->assertFalse(url_is_html($this->tmpFile)); } /** * Test url_is_html() on RSS */ public function testUrlIsHtmlRss() { file_put_contents( $this->tmpFile, <<<HTM <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"> <channel> <title><![CDATA[Planet-PEAR]]></title> HTM ); $this->assertFalse(url_is_html($this->tmpFile)); } /** * Test rewrite_relative_url() with a relative path */ public function testRewriteRelativeUrlRelative() { $this->assertEquals( 'http://tt-rss.org/foo/bar', rewrite_relative_url('http://tt-rss.org', 'foo/bar') ); $this->assertEquals( 'http://tt-rss.org/foo/bar', rewrite_relative_url('http://tt-rss.org/', 'foo/bar') ); $this->assertEquals( 'http://tt-rss.org/bar', rewrite_relative_url('http://tt-rss.org/foo', 'bar') ); $this->assertEquals( 'http://tt-rss.org/foo/bar', rewrite_relative_url('http://tt-rss.org/foo/', 'bar') ); $this->assertEquals( 'http://tt-rss.org/f/o/bar', rewrite_relative_url('http://tt-rss.org/f/o/o', 'bar') ); $this->assertEquals( 'http://tt-rss.org/f/o/o/bar', rewrite_relative_url('http://tt-rss.org/f/o/o/', 'bar') ); } /** * Test rewrite_relative_url() with an absolute path */ public function testRewriteRelativeUrlAbsolutePath() { $this->assertEquals( 'http://tt-rss.org/bar/', rewrite_relative_url('http://tt-rss.org/foo/', '/bar/') ); $this->assertEquals( 'http://tt-rss.org/bar/', rewrite_relative_url('http://tt-rss.org/so/what/is/next', '/bar/') ); $this->assertEquals( 'http://tt-rss.org/bar/', rewrite_relative_url('http://tt-rss.org/so/what/is/next/', '/bar/') ); } /** * Test rewrite_relative_url() with an absolute URL */ public function testRewriteRelativeUrlAbsoluteUrl() { $this->assertEquals( 'http://example.org/bar/', rewrite_relative_url('http://tt-rss.org/foo/', 'http://example.org/bar/') ); } } ?>