Reorganize test suite.
- Split testLoginLogout() into testBadLogin() and testLoginLogout(). - Mark testCreateSimpleArticle() as incomplete until the popup window opened by clicking on VIEW is handled correctly. - Disable mod_rewrite so that the test suite does not depend on it. - Remove superfluous check for Testing_Selenium class. - Migrate TestConfiguration.php.dist to config.xml.dist. - Configure whitelist for code coverage information. - Be conservative for now and only add include/ and plugins/ directories for now. - Set addUncoveredFilesFromWhitelist="false" because not all files are loadable (yet). - Add documentation for code coverage reporting.
This commit is contained in:
parent
2b68440ff2
commit
12d42f2918
@ -1,59 +1,56 @@
|
||||
<?php
|
||||
# Copyright (c) 2006, Sebastian Nohn (on behalf the Serendipity Developer Team)
|
||||
# Copyright (c) 2006-2007, Sebastian Nohn and Sebastian Bergmann
|
||||
# (on behalf the Serendipity Developer Team)
|
||||
# All rights reserved. See LICENSE file for licensing details
|
||||
|
||||
ini_set('display_errors', 1);
|
||||
define('IN_serendipity', TRUE);
|
||||
|
||||
require_once 'PHPUnit/Framework/TestCase.php';
|
||||
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
|
||||
|
||||
require_once 'TestConfiguration.php';
|
||||
|
||||
require_once '../../lang/serendipity_lang_'.S9Y_LANG.'.inc.php';
|
||||
require_once '../../plugins/serendipity_event_spamblock/lang_'.S9Y_LANG.'.inc.php';
|
||||
|
||||
class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
class FrontendTest extends PHPUnit_Extensions_SeleniumTestCase
|
||||
{
|
||||
public function setUp()
|
||||
{
|
||||
if (!SELENIUM_ENABLED) {
|
||||
if (!isset($GLOBALS['S9Y_SELENIUM_ENABLED']) || !$GLOBALS['S9Y_SELENIUM_ENABLED']) {
|
||||
$this->markTestSkipped(
|
||||
'The Selenium tests are disabled.'
|
||||
);
|
||||
}
|
||||
|
||||
if (!class_exists('Testing_Selenium')) {
|
||||
$this->markTestSkipped(
|
||||
'The PHP bindings for Selenium RC are not installed.'
|
||||
);
|
||||
}
|
||||
|
||||
$this->setHost(SELENIUM_HOST);
|
||||
$this->setPort(SELENIUM_PORT);
|
||||
$this->setBrowser(SELENIUM_BROWSER);
|
||||
$this->setBrowserUrl(S9Y_INSTALLDIR);
|
||||
$this->setHost($GLOBALS['S9Y_SELENIUM_HOST']);
|
||||
$this->setPort((int)$GLOBALS['S9Y_SELENIUM_PORT']);
|
||||
$this->setBrowser($GLOBALS['S9Y_SELENIUM_BROWSER']);
|
||||
$this->setBrowserUrl($GLOBALS['S9Y_INSTALLDIR']);
|
||||
$this->setTimeout(10000);
|
||||
|
||||
$this->coverageScriptUrl = $GLOBALS['S9Y_INSTALLDIR'] .
|
||||
'/phpunit_coverage.php';
|
||||
|
||||
require_once '../lang/serendipity_lang_' .
|
||||
$GLOBALS['S9Y_LANG'] . '.inc.php';
|
||||
require_once '../plugins/serendipity_event_spamblock/lang_' .
|
||||
$GLOBALS['S9Y_LANG'] . '.inc.php';
|
||||
}
|
||||
|
||||
public function testExpertInstallation()
|
||||
{
|
||||
$this->open(S9Y_INSTALLDIR);
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
$this->assertTextNotPresent(NOT_WRITABLE);
|
||||
$this->clickAndWait('link='.EXPERT_INSTALLATION);
|
||||
$this->select('dbType', 'SQLite');
|
||||
$this->type('user', 'Test User');
|
||||
$this->type('pass', 'Test Password');
|
||||
$this->check('radio_cfg_want_mail_no');
|
||||
$this->select('rewrite', 'Use Apache mod_rewrite');
|
||||
$this->type('blogTitle', 's9y Testsuite Testblog');
|
||||
$this->type('blogDescription', 'The lalaforce is coming to get you!');
|
||||
$this->clickAndWait("//input[@value='".COMPLETE_INSTALLATION."']");
|
||||
$this->assertTextPresent(SERENDIPITY_INSTALLED);
|
||||
}
|
||||
|
||||
public function testLoginLogout()
|
||||
public function testBadLogin()
|
||||
{
|
||||
$this->open(S9Y_INSTALLDIR);
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
|
||||
$this->assertTitleEquals('s9y Testsuite Testblog');
|
||||
$this->assertTextPresent(SUPERUSER);
|
||||
@ -66,6 +63,17 @@ class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
|
||||
$this->assertTextPresent(PLEASE_ENTER_CREDENTIALS);
|
||||
$this->assertTextPresent(WRONG_USERNAME_OR_PASSWORD);
|
||||
}
|
||||
|
||||
public function testLoginLogout()
|
||||
{
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
|
||||
$this->assertTitleEquals('s9y Testsuite Testblog');
|
||||
$this->assertTextPresent(SUPERUSER);
|
||||
$this->clickAndWait('link='.SUPERUSER_OPEN_LOGIN);
|
||||
|
||||
$this->assertTextPresent(PLEASE_ENTER_CREDENTIALS);
|
||||
$this->type('serendipity[user]', 'Test User');
|
||||
$this->type('serendipity[pass]', 'Test Password');
|
||||
$this->clickAndWait('submit');
|
||||
@ -93,7 +101,7 @@ class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
}
|
||||
|
||||
public function testCreateContentCategory() {
|
||||
$this->open(S9Y_INSTALLDIR);
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
|
||||
$this->assertTitleEquals('s9y Testsuite Testblog');
|
||||
$this->assertTextPresent(SUPERUSER);
|
||||
@ -134,21 +142,21 @@ class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
|
||||
$this->assertTextPresent('Test Category 001-1');
|
||||
|
||||
# The Sub-Sub-Category-Test is blocked by http://pear.php.net/bugs/bug.php?id=9189
|
||||
#
|
||||
# $this->clickAndWait('link='.CREATE_NEW_CAT);
|
||||
#
|
||||
# $this->assertTextPresent(CREATE_NEW_CAT);
|
||||
# $this->select('parent_cat', ' Test Category 001-1');
|
||||
# $this->type('serendipity[cat][name]', 'Test Category 001-1-1');
|
||||
# $this->type('serendipity[cat][description]', 'This is the description for Test Category 001-1-1');
|
||||
# $this->clickAndWait('SAVE');
|
||||
#
|
||||
# $this->assertTextPresent('Test Category 001-1-1');
|
||||
$this->markTestIncomplete('Blocked by blocked by http://pear.php.net/bugs/bug.php?id=9189.');
|
||||
|
||||
$this->clickAndWait('link='.CREATE_NEW_CAT);
|
||||
|
||||
$this->assertTextPresent(CREATE_NEW_CAT);
|
||||
$this->select('parent_cat', ' Test Category 001-1');
|
||||
$this->type('serendipity[cat][name]', 'Test Category 001-1-1');
|
||||
$this->type('serendipity[cat][description]', 'This is the description for Test Category 001-1-1');
|
||||
$this->clickAndWait('SAVE');
|
||||
|
||||
$this->assertTextPresent('Test Category 001-1-1');
|
||||
}
|
||||
|
||||
public function testCreateSimpleArticle() {
|
||||
$this->open(S9Y_INSTALLDIR);
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
|
||||
$this->assertTitleEquals('s9y Testsuite Testblog');
|
||||
$this->assertTextPresent(SUPERUSER);
|
||||
@ -169,10 +177,14 @@ class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
$this->clickAndWait("//input[@value='- ".SAVE." -']");
|
||||
|
||||
$this->assertTextPresent(IFRAME_SAVE);
|
||||
|
||||
$this->markTestIncomplete('Popup needs to be taken care of.');
|
||||
|
||||
$this->clickAndWait('link='.VIEW);
|
||||
|
||||
$this->assertTitleEquals('Test Entry 001 - s9y Testsuite Testblog');
|
||||
$this->assertTextPresent('Test Body');
|
||||
|
||||
$this->clickAndWait('link='.EDIT_ENTRY);
|
||||
|
||||
$this->assertTextPresent(ENTRY_BODY);
|
||||
@ -187,14 +199,15 @@ class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
}
|
||||
|
||||
public function testComment() {
|
||||
$this->open(S9Y_INSTALLDIR);
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
|
||||
$this->assertTitleEquals('s9y Testsuite Testblog');
|
||||
$this->assertTextPresent('Test Entry 001');
|
||||
$this->clickAndWait('link=Test Entry 001');
|
||||
|
||||
$this->assertTitleEquals('Test Entry 001 - s9y Testsuite Testblog');
|
||||
$this->assertTextPresent('New Test Body');
|
||||
// Change to "New Test Body" when testCreateSimpleArticle() is fixed.
|
||||
$this->assertTextPresent('Test Body');
|
||||
$this->assertTextPresent(ADD_COMMENT);
|
||||
$this->clickAndWait("//input[@value='".SUBMIT_COMMENT."']");
|
||||
|
||||
@ -221,7 +234,7 @@ class SerendipityTestSuite extends PHPUnit_Extensions_SeleniumTestCase
|
||||
}
|
||||
|
||||
public function testCreateUser() {
|
||||
$this->open(S9Y_INSTALLDIR);
|
||||
$this->open($GLOBALS['S9Y_INSTALLDIR']);
|
||||
|
||||
$this->assertTitleEquals('s9y Testsuite Testblog');
|
||||
$this->assertTextPresent(SUPERUSER);
|
40
tests/README
Normal file
40
tests/README
Normal file
@ -0,0 +1,40 @@
|
||||
PHPUnit and Selenium RC
|
||||
=======================
|
||||
|
||||
1. Install PHPUnit
|
||||
|
||||
$ pear channel-discover pear.phpunit.de
|
||||
|
||||
$ pear install phpunit/phpunit
|
||||
|
||||
2. Download Selenium RC and copy selenium-server.jar to
|
||||
/usr/local/bin/selenium-server.jar, for instance.
|
||||
|
||||
|
||||
Running the Tests
|
||||
=================
|
||||
|
||||
1. Start the Selenium RC server
|
||||
|
||||
$ java -jar /usr/local/bin/selenium-server.jar
|
||||
|
||||
2. $ cd /path/to/s9y/tests
|
||||
|
||||
$ phpunit --configuration config.xml FrontendTest
|
||||
|
||||
|
||||
Code Coverage
|
||||
=============
|
||||
|
||||
1. Copy *.php to the S9Y installation directory on your webserver.
|
||||
|
||||
2. In your php.ini, add the following settings
|
||||
|
||||
auto_prepend_file = /path/to/prepend.php
|
||||
auto_append_file = /path/to/append.php
|
||||
|
||||
3. Use
|
||||
|
||||
$ phpunit --configuration config.xml --coverage-html report FrontendTest
|
||||
|
||||
instead of the command above.
|
27
tests/config.xml.dist
Normal file
27
tests/config.xml.dist
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<phpunit>
|
||||
<filter>
|
||||
<whitelist addUncoveredFilesFromWhitelist="false">
|
||||
<directory>../include</directory>
|
||||
<directory>../plugins</directory>
|
||||
<exclude>
|
||||
<file>../include/db/mysql.inc.php</file>
|
||||
<file>../include/db/mysqli.inc.php</file>
|
||||
<file>../include/db/pdo-postgres.inc.php</file>
|
||||
<file>../include/db/postgres.inc.php</file>
|
||||
<file>../include/db/mysql.inc.php</file>
|
||||
<file>../include/db/sqlite.inc.php</file>
|
||||
<file>../include/db/sqlrelay.inc.php</file>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
<php>
|
||||
<var name="S9Y_INSTALLDIR" value="http://localhost/s9y"/>
|
||||
<var name="S9Y_LANG" value="en"/>
|
||||
<var name="S9Y_SELENIUM_ENABLED" value="true"/>
|
||||
<var name="S9Y_SELENIUM_HOST" value="127.0.0.1"/>
|
||||
<var name="S9Y_SELENIUM_PORT" value="4444"/>
|
||||
<var name="S9Y_SELENIUM_BROWSER" value="*firefox /usr/lib/firefox/firefox-bin"/>
|
||||
</php>
|
||||
</phpunit>
|
20
tests/coverage/append.php
Normal file
20
tests/coverage/append.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
if ( isset($_COOKIE['PHPUNIT_SELENIUM_TEST_ID']) &&
|
||||
!isset($_GET['PHPUNIT_SELENIUM_TEST_ID']) &&
|
||||
extension_loaded('xdebug')) {
|
||||
$GLOBALS['PHPUNIT_FILTERED_FILES'][] = __FILE__;
|
||||
|
||||
$data = xdebug_get_code_coverage();
|
||||
xdebug_stop_code_coverage();
|
||||
|
||||
foreach ($GLOBALS['PHPUNIT_FILTERED_FILES'] as $file) {
|
||||
unset($data[$file]);
|
||||
}
|
||||
|
||||
file_put_contents(
|
||||
$_SERVER['SCRIPT_FILENAME'] . '.phpunit_' .
|
||||
$_COOKIE['PHPUNIT_SELENIUM_TEST_ID'],
|
||||
var_export($data, TRUE)
|
||||
);
|
||||
}
|
||||
?>
|
36
tests/coverage/phpunit_coverage.php
Normal file
36
tests/coverage/phpunit_coverage.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
require_once 'PHPUnit/Util/FilterIterator.php';
|
||||
|
||||
if (isset($_GET['PHPUNIT_SELENIUM_TEST_ID'])) {
|
||||
$files = new PHPUnit_Util_FilterIterator(
|
||||
new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator(dirname(__FILE__))
|
||||
),
|
||||
'.phpunit_' . $_GET['PHPUNIT_SELENIUM_TEST_ID']
|
||||
);
|
||||
|
||||
$coverage = array();
|
||||
|
||||
foreach ($files as $file) {
|
||||
$filename = $file->getPathName();
|
||||
|
||||
$data = eval('return ' . file_get_contents($filename) . ';');
|
||||
unset($filename);
|
||||
|
||||
foreach ($data as $filename => $lines) {
|
||||
if (!isset($coverage[$filename])) {
|
||||
$coverage[$filename] = $lines;
|
||||
} else {
|
||||
foreach ($lines as $line => $flag) {
|
||||
if (!isset($coverage[$filename][$line]) ||
|
||||
$flag > $coverage[$filename][$line]) {
|
||||
$coverage[$filename][$line] = $flag;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var_export($coverage);
|
||||
}
|
||||
?>
|
9
tests/coverage/prepend.php
Normal file
9
tests/coverage/prepend.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if ( isset($_COOKIE['PHPUNIT_SELENIUM_TEST_ID']) &&
|
||||
!isset($_GET['PHPUNIT_SELENIUM_TEST_ID']) &&
|
||||
extension_loaded('xdebug')) {
|
||||
$GLOBALS['PHPUNIT_FILTERED_FILES'] = array(__FILE__);
|
||||
|
||||
xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
|
||||
}
|
||||
?>
|
@ -1,23 +0,0 @@
|
||||
Test setup instructions
|
||||
=======================
|
||||
|
||||
0.) Optionally Install VMWare Server
|
||||
|
||||
1.) Install Java from http://java.sun.com/
|
||||
|
||||
2.) Get Selenium RC from http://www.openqa.org/selenium-rc/download.action
|
||||
|
||||
3.) Install PHPUnit:
|
||||
# pear install -f http://pear.phpunit.de/get/PHPUnit-3.0.0beta2.tgz
|
||||
|
||||
4.) Install PHP Selenium Bindings:
|
||||
# pear install -f Testing_Selenium
|
||||
|
||||
5.) Copy TestConfiguration.php.dist to TestConfiguration.php and
|
||||
change TestConfiguration.php to reflect your Selenium RC
|
||||
configuration.
|
||||
|
||||
6.) Run Tests
|
||||
$ phpunit SeleniumTestSuite.php
|
||||
|
||||
-- end of file
|
@ -1,11 +0,0 @@
|
||||
<?php
|
||||
# Copyright (c) 2006, Sebastian Nohn (on behalf the Serendipity Developer Team)
|
||||
# All rights reserved. See LICENSE file for licensing details
|
||||
|
||||
define('SELENIUM_ENABLED', TRUE);
|
||||
define('SELENIUM_HOST', '172.16.177.130');
|
||||
define('SELENIUM_PORT', 4444);
|
||||
define('SELENIUM_BROWSER', '*firefox');
|
||||
define('S9Y_INSTALLDIR', 'http://example.com/serendipity/');
|
||||
define('S9Y_LANG', 'en');
|
||||
?>
|
Loading…
x
Reference in New Issue
Block a user