2010-11-10 22:18:41 +01:00
|
|
|
<?php
|
|
|
|
require_once dirname(__FILE__) . '/../functions.php';
|
|
|
|
/**
|
|
|
|
* Unit tests for functions.php
|
|
|
|
*
|
|
|
|
* @author Christian Weiske <cweiske@php.net>
|
|
|
|
*/
|
|
|
|
class FunctionsTest extends PHPUnit_Framework_TestCase
|
|
|
|
{
|
2010-11-10 22:48:16 +01:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-11-10 22:18:41 +01:00
|
|
|
/**
|
|
|
|
* 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/')
|
|
|
|
);
|
|
|
|
}
|
2010-11-10 22:48:16 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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));
|
|
|
|
}
|
2010-11-10 23:09:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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/')
|
|
|
|
);
|
|
|
|
}
|
2010-11-10 22:18:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
?>
|