aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/dbal/db_tools_test.php60
-rw-r--r--tests/mock/cache.php22
-rw-r--r--tests/mock_user.php16
-rw-r--r--tests/network/ftp_fsock_pasv_epsv_test.php63
-rw-r--r--tests/session/append_sid_test.php51
-rw-r--r--tests/template/template_test.php5
-rw-r--r--tests/text_processing/censor_text_test.php85
-rw-r--r--tests/tmp/.gitkeep (renamed from tests/utf/data/.gitkeep)0
-rw-r--r--tests/utf/normalizer_test.php11
9 files changed, 307 insertions, 6 deletions
diff --git a/tests/dbal/db_tools_test.php b/tests/dbal/db_tools_test.php
index ddea500f83..753cc08fc5 100644
--- a/tests/dbal/db_tools_test.php
+++ b/tests/dbal/db_tools_test.php
@@ -271,6 +271,66 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case
'foo' => array('UINT', 42)))
);
+ $this->assertTrue($this->tools->sql_table_exists('prefix_test_table'));
+
$this->tools->sql_table_drop('prefix_test_table');
+
+ $this->assertFalse($this->tools->sql_table_exists('prefix_test_table'));
+ }
+
+ public function test_peform_schema_changes_drop_tables()
+ {
+ $db_tools = $this->getMock('phpbb_db_tools', array(
+ 'sql_table_exists',
+ 'sql_table_drop',
+ ), array(&$this->db));
+
+ // pretend all tables exist
+ $db_tools->expects($this->any())->method('sql_table_exists')
+ ->will($this->returnValue(true));
+
+ // drop tables
+ $db_tools->expects($this->exactly(2))->method('sql_table_drop');
+ $db_tools->expects($this->at(1))->method('sql_table_drop')
+ ->with($this->equalTo('dropped_table_1'));
+ $db_tools->expects($this->at(3))->method('sql_table_drop')
+ ->with($this->equalTo('dropped_table_2'));
+
+ $db_tools->perform_schema_changes(array(
+ 'drop_tables' => array(
+ 'dropped_table_1',
+ 'dropped_table_2',
+ ),
+ ));
+ }
+
+ public function test_peform_schema_changes_drop_columns()
+ {
+ $db_tools = $this->getMock('phpbb_db_tools', array(
+ 'sql_column_exists',
+ 'sql_column_remove',
+ ), array(&$this->db));
+
+ // pretend all columns exist
+ $db_tools->expects($this->any())->method('sql_column_exists')
+ ->will($this->returnValue(true));
+ $db_tools->expects($this->any())->method('sql_column_exists')
+ ->will($this->returnValue(true));
+
+ // drop columns
+ $db_tools->expects($this->exactly(2))->method('sql_column_remove');
+ $db_tools->expects($this->at(1))->method('sql_column_remove')
+ ->with($this->equalTo('existing_table'), $this->equalTo('dropped_column_1'));
+ $db_tools->expects($this->at(3))->method('sql_column_remove')
+ ->with($this->equalTo('existing_table'), $this->equalTo('dropped_column_2'));
+
+ $db_tools->perform_schema_changes(array(
+ 'drop_columns' => array(
+ 'existing_table' => array(
+ 'dropped_column_1',
+ 'dropped_column_2',
+ ),
+ ),
+ ));
}
}
diff --git a/tests/mock/cache.php b/tests/mock/cache.php
index 11e525ff79..020574b0bb 100644
--- a/tests/mock/cache.php
+++ b/tests/mock/cache.php
@@ -41,6 +41,28 @@ class phpbb_mock_cache
{
return $this->data['_bots'];
}
+
+ /**
+ * Obtain list of word censors. We don't need to parse them here,
+ * that is tested elsewhere.
+ */
+ public function obtain_word_list()
+ {
+ return array(
+ 'match' => array(
+ '#(?<![\\p{Nd}\\p{L}_-])([\\p{Nd}\\p{L}_-]*?badword1[\\p{Nd}\\p{L}_-]*?)(?![\\p{Nd}\\p{L}_-])#iu',
+ '#(?<![\\p{Nd}\\p{L}_-])([\\p{Nd}\\p{L}_-]*?badword2)(?![\\p{Nd}\\p{L}_-])#iu',
+ '#(?<![\\p{Nd}\\p{L}_-])(badword3[\\p{Nd}\\p{L}_-]*?)(?![\\p{Nd}\\p{L}_-])#iu',
+ '#(?<![\\p{Nd}\\p{L}_-])(badword4)(?![\\p{Nd}\\p{L}_-])#iu',
+ ),
+ 'replace' => array(
+ 'replacement1',
+ 'replacement2',
+ 'replacement3',
+ 'replacement4',
+ ),
+ );
+ }
public function set_bots($bots)
{
diff --git a/tests/mock_user.php b/tests/mock_user.php
index 74d31c4c4a..5b89ea3e19 100644
--- a/tests/mock_user.php
+++ b/tests/mock_user.php
@@ -17,4 +17,20 @@ class phpbb_mock_user
{
public $host = "testhost";
public $page = array('root_script_path' => '/');
+
+ private $options = array();
+ public function optionget($item)
+ {
+ if (!isset($this->options[$item]))
+ {
+ throw new Exception(sprintf("You didn't set the option '%s' on the mock user using optionset.", $item));
+ }
+
+ return $this->options[$item];
+ }
+
+ public function optionset($item, $value)
+ {
+ $this->options[$item] = $value;
+ }
}
diff --git a/tests/network/ftp_fsock_pasv_epsv_test.php b/tests/network/ftp_fsock_pasv_epsv_test.php
new file mode 100644
index 0000000000..6ad811e3ca
--- /dev/null
+++ b/tests/network/ftp_fsock_pasv_epsv_test.php
@@ -0,0 +1,63 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions_transfer.php';
+
+/**
+* @group slow
+*/
+class phpbb_network_ftp_fsock_pasv_epsv_test extends phpbb_test_case
+{
+ static protected $ipv4;
+
+ static public function setUpBeforeClass()
+ {
+ $hostname = 'ftp.debian.org.';
+ self::$ipv4 = gethostbyname($hostname);
+
+ if (self::$ipv4 == $hostname)
+ {
+ self::markTestSkipped("Got no A record back from DNS query for $hostname");
+ }
+ }
+
+ public function test_pasv()
+ {
+ // PASV
+ $this->assert_ls_contains_debian(self::$ipv4);
+ }
+
+ public function test_epsv()
+ {
+ $ipv4 = self::$ipv4;
+ // EPSV
+ $this->assert_ls_contains_debian("[::ffff:$ipv4]");
+ }
+
+ protected function assert_ls_contains_debian($hostname)
+ {
+ $o = $this->get_object($hostname);
+ $result = $o->_init();
+ // This test may fail on IPv6 addresses if IPv6 support is
+ // not available. PHP must be compiled with IPv6 support enabled,
+ // and your operating system must be configured for IPv6 as well.
+ if ($result !== true)
+ {
+ $this->markTestSkipped("Failed to connect to $hostname: $result");
+ }
+ $this->assertContains('debian', $o->_ls());
+ $o->_close();
+ }
+
+ protected function get_object($hostname)
+ {
+ return new ftp_fsock($hostname, 'anonymous', 'anonymous@localhost.tld', '/');
+ }
+}
diff --git a/tests/session/append_sid_test.php b/tests/session/append_sid_test.php
new file mode 100644
index 0000000000..1a3ad633e3
--- /dev/null
+++ b/tests/session/append_sid_test.php
@@ -0,0 +1,51 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
+
+class phpbb_session_append_sid_test extends phpbb_test_case
+{
+
+ public function append_sid_data()
+ {
+ return array(
+ array('viewtopic.php?t=1&amp;f=2', false, true, false, 'viewtopic.php?t=1&amp;f=2', 'parameters in url-argument'),
+ array('viewtopic.php', 't=1&amp;f=2', true, false, 'viewtopic.php?t=1&amp;f=2', 'parameters in params-argument using amp'),
+ array('viewtopic.php', 't=1&f=2', false, false, 'viewtopic.php?t=1&f=2', 'parameters in params-argument using &'),
+ array('viewtopic.php', array('t' => 1, 'f' => 2), true, false, 'viewtopic.php?t=1&amp;f=2', 'parameters in params-argument as array'),
+
+ // Custom sid parameter
+ array('viewtopic.php', 't=1&amp;f=2', true, 'custom-sid', 'viewtopic.php?t=1&amp;f=2&amp;sid=custom-sid', 'using session_id'),
+
+ // Testing anchors
+ array('viewtopic.php?t=1&amp;f=2#anchor', false, true, false, 'viewtopic.php?t=1&amp;f=2#anchor', 'anchor in url-argument'),
+ array('viewtopic.php', 't=1&amp;f=2#anchor', true, false, 'viewtopic.php?t=1&amp;f=2#anchor', 'anchor in params-argument'),
+ array('viewtopic.php', array('t' => 1, 'f' => 2, '#' => 'anchor'), true, false, 'viewtopic.php?t=1&amp;f=2#anchor', 'anchor in params-argument (array)'),
+
+ // Anchors and custom sid
+ array('viewtopic.php?t=1&amp;f=2#anchor', false, true, 'custom-sid', 'viewtopic.php?t=1&amp;f=2&amp;sid=custom-sid#anchor', 'anchor in url-argument using session_id'),
+ array('viewtopic.php', 't=1&amp;f=2#anchor', true, 'custom-sid', 'viewtopic.php?t=1&amp;f=2&amp;sid=custom-sid#anchor', 'anchor in params-argument using session_id'),
+ array('viewtopic.php', array('t' => 1, 'f' => 2, '#' => 'anchor'), true, 'custom-sid', 'viewtopic.php?t=1&amp;f=2&amp;sid=custom-sid#anchor', 'anchor in params-argument (array) using session_id'),
+
+ // Empty parameters should not append the ?
+ array('viewtopic.php', false, true, false, 'viewtopic.php', 'no params using bool false'),
+ array('viewtopic.php', '', true, false, 'viewtopic.php', 'no params using empty string'),
+ array('viewtopic.php', array(), true, false, 'viewtopic.php', 'no params using empty array'),
+ );
+ }
+
+ /**
+ * @dataProvider append_sid_data
+ */
+ public function test_append_sid($url, $params, $is_amp, $session_id, $expected, $description)
+ {
+ $this->assertEquals($expected, append_sid($url, $params, $is_amp, $session_id));
+ }
+}
+
diff --git a/tests/template/template_test.php b/tests/template/template_test.php
index 33c82d53ad..5005710220 100644
--- a/tests/template/template_test.php
+++ b/tests/template/template_test.php
@@ -63,9 +63,10 @@ class phpbb_template_template_test extends phpbb_test_case
// Test the engine can be used
$this->setup_engine();
- if (!is_writable(dirname($this->template->cachepath)))
+ $template_cache_dir = dirname($this->template->cachepath);
+ if (!is_writable($template_cache_dir))
{
- $this->markTestSkipped("Template cache directory is not writable.");
+ $this->markTestSkipped("Template cache directory ({$template_cache_dir}) is not writable.");
}
foreach (glob($this->template->cachepath . '*') as $file)
diff --git a/tests/text_processing/censor_text_test.php b/tests/text_processing/censor_text_test.php
new file mode 100644
index 0000000000..2843f0b20b
--- /dev/null
+++ b/tests/text_processing/censor_text_test.php
@@ -0,0 +1,85 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2011 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php';
+require_once dirname(__FILE__) . '/../mock_user.php';
+require_once dirname(__FILE__) . '/../mock/cache.php';
+
+class phpbb_text_processing_censor_text_test extends phpbb_test_case
+{
+ public function censor_text_data()
+ {
+ global $cache, $user;
+ $cache = new phpbb_mock_cache;
+ $user = new phpbb_mock_user;
+
+ $user->optionset('viewcensors', false);
+
+ return array(
+ array('', ''),
+
+ array('badword1', 'replacement1'),
+ array(' badword1', ' replacement1'),
+ array('badword1 ', 'replacement1 '),
+ array(' badword1 ', ' replacement1 '),
+ array('abadword1', 'replacement1'),
+ array('badword1w', 'replacement1'),
+ array('abadword1w', 'replacement1'),
+ array('anotherbadword1test', 'replacement1'),
+ array('this badword1', 'this replacement1'),
+ array('this badword1 word', 'this replacement1 word'),
+
+ array('badword2', 'replacement2'),
+ array('bbadword2', 'replacement2'),
+ array('bbbadword2', 'replacement2'),
+ array('badword2d', 'badword2d'),
+ array('bbadword2d', 'bbadword2d'),
+ array('test badword2', 'test replacement2'),
+ array('test badword2 word', 'test replacement2 word'),
+
+ array('badword3', 'replacement3'),
+ array('bbadword3', 'bbadword3'),
+ array('badword3d', 'replacement3'),
+ array('badword3ddd', 'replacement3'),
+ array('bbadword3d', 'bbadword3d'),
+ array(' badword3 ', ' replacement3 '),
+ array(' badword3', ' replacement3'),
+
+ array('badword4', 'replacement4'),
+ array('this badword4 word', 'this replacement4 word'),
+ array('abadword4', 'abadword4'),
+ array('badword4d', 'badword4d'),
+ array('abadword4d', 'abadword4d'),
+
+ array('badword1 badword2 badword3 badword4', 'replacement1 replacement2 replacement3 replacement4'),
+ array('badword1 badword2 badword3 badword4d', 'replacement1 replacement2 replacement3 badword4d'),
+ array('abadword1 badword2 badword3 badword4', 'replacement1 replacement2 replacement3 replacement4'),
+
+ array("new\nline\ntest", "new\nline\ntest"),
+ array("tab\ttest\t", "tab\ttest\t"),
+ array('öäü', 'öäü'),
+ array('badw' . chr(1) . 'ord1', 'badw' . chr(1) . 'ord1'),
+ array('badw' . chr(2) . 'ord1', 'badw' . chr(2) . 'ord1'),
+ array('badw' . chr(3) . 'ord1', 'badw' . chr(3) . 'ord1'),
+ array('badw' . chr(4) . 'ord1', 'badw' . chr(4) . 'ord1'),
+ array('badw' . chr(5) . 'ord1', 'badw' . chr(5) . 'ord1'),
+ array('badw' . chr(6) . 'ord1', 'badw' . chr(6) . 'ord1'),
+ );
+ }
+
+ /**
+ * @dataProvider censor_text_data
+ */
+ public function test_censor_text($input, $expected)
+ {
+ $label = 'Testing word censor: ' . $input;
+ $this->assertEquals($expected, censor_text($input), $label);
+ }
+}
diff --git a/tests/utf/data/.gitkeep b/tests/tmp/.gitkeep
index e69de29bb2..e69de29bb2 100644
--- a/tests/utf/data/.gitkeep
+++ b/tests/tmp/.gitkeep
diff --git a/tests/utf/normalizer_test.php b/tests/utf/normalizer_test.php
index f78dba8004..a0ba470416 100644
--- a/tests/utf/normalizer_test.php
+++ b/tests/utf/normalizer_test.php
@@ -14,10 +14,13 @@ require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_normalizer.php';
*/
class phpbb_utf_normalizer_test extends phpbb_test_case
{
+ static private $data_dir;
+
static public function setUpBeforeClass()
{
- self::download('http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt', dirname(__FILE__).'/data');
- self::download('http://www.unicode.org/Public/UNIDATA/UnicodeData.txt', dirname(__FILE__).'/data');
+ self::$data_dir = dirname(__file__) . '/../tmp';
+ self::download('http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt', self::$data_dir);
+ self::download('http://www.unicode.org/Public/UNIDATA/UnicodeData.txt', self::$data_dir);
}
public function test_normalizer()
@@ -62,7 +65,7 @@ class phpbb_utf_normalizer_test extends phpbb_test_case
$tested_chars = array();
- $fp = fopen(dirname(__FILE__).'/data/NormalizationTest.txt', 'rb');
+ $fp = fopen(self::$data_dir . '/NormalizationTest.txt', 'rb');
while (!feof($fp))
{
$line = fgets($fp);
@@ -117,7 +120,7 @@ class phpbb_utf_normalizer_test extends phpbb_test_case
*/
public function test_invariants(array $tested_chars)
{
- $fp = fopen(dirname(__FILE__).'/data/UnicodeData.txt', 'rb');
+ $fp = fopen(self::$data_dir . '/UnicodeData.txt', 'rb');
while (!feof($fp))
{