You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

139 lines
5.1 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
/*
* Parent class of all Selenium test cases.
*/
class TikiSeleniumTestCase extends PHPUnit_Extensions_Selenium2TestCase
{
protected $backupGlobals = false;
public $current_test_db;
public $user_credentials = [
'admin' => 'tiki'
];
public function __construct($name = '')
{
parent::__construct($name);
$this->configure();
}
private function configure()
{
$test_tiki_root_url = null;
$config_fpath = './tests_config.php';
if (! file_exists($config_fpath)) {
return false;
}
$lines = file($config_fpath);
$source = implode('', $lines);
echo "-- TikiSeleniumTestCase.configure: After reading config file: \$source='$source'\n";
eval($source);
echo "-- TikiSeleniumTestCase.configure: After evaluating config file: \$test_site_url='$test_site_url'\n";
if ($test_tiki_root_url == null) {
exit("Variable \$test_tiki_root_url MUST be defined in test configuration file: '$config_fpath'");
}
$this->setBrowserUrl($test_tiki_root_url);
if (! preg_match('/^http\:\/\/local/', $test_tiki_root_url)) {
exit("Error found in test configuration file '$config_fpath'\n" .
"The URL specified by \$test_tiki_root_url should start with http://local, in order to prevent accidentally running tests on a non-local test site.\n" .
"Value was: '$test_tiki_root_url'\n");
}
}
public function openTikiPage($tikiPage)
{
$this->open("http://localhost/tiki-trunk/$tikiPage");
}
public function restoreDBforThisTest()
{
$dbRestorer = new TikiAcceptanceTestDBRestorerSQLDumps();
$error_msg = $dbRestorer->restoreDB($this->current_test_db);
if ($error_msg != null) {
$this->markTestSkipped($error_msg);
}
}
public function logInIfNecessaryAs($my_user)
{
if (! $this->loginAs($my_user)) {
die("Couldn't log in as $my_user!");
}
}
public function logOutIfNecessary()
{
if ($this->isElementPresent("link=Logout")) {
$this->clickAndWait("link=Logout");
}
}
public function assertSelectElementContainsItems($selectElementID, $expItems, $message)
{
$this->assertElementPresent($selectElementID, "$message\nMarkup element '$selectElementID' did not exist");
$selectElementLabels = $this->getSelectOptions($selectElementID);
foreach ($expItems as $anItem => $anItemValue) {
$this->assertContains($anItem, $selectElementLabels, "$message\n$anItem is not in the select element list");
$thisItemElementID = "$selectElementID/option[@value='$anItemValue']";
$this->assertElementPresent($thisItemElementID);
}
}
public function assertSelectElementContainsAllTheItems($selectElementID, $expItems, $message)
{
$this->assertElementPresent($selectElementID, "$message\nMarkup element '$selectElementID' did not exist");
$gotItemsText = $this->getSelectOptions($selectElementID);
$expItemsText = array_keys($expItems);
$this->assertEquals($gotItemsText, $expItemsText, "$message\nItems in the Select element '$selectElementID' were wrong.");
foreach ($expItems as $anItem => $anItemValue) {
$thisItemElementID = "$selectElementID/option[@value='$anItemValue']";
$this->assertElementPresent($thisItemElementID);
}
}
public function assertSelectElementDoesNotContainItems($selectElementID, $expItems, $message)
{
$this->assertElementPresent($selectElementID, "$message\nMarkup element '$selectElementID' did not exist");
$gotItemsText = $this->getSelectOptions($selectElementID);
$expItemsText = array_keys($expItems);
// $this->assertEquals($gotItemsText, $expItemsText, "$message\nItems in the Select element '$selectElementID' were wrong.");
foreach ($expItems as $anItem => $anItemValue) {
$thisItemElementID = "$selectElementID/option[@value='$anItemValue']";
$this->assertFalse($this->isElementPresent($thisItemElementID));
}
}
private function loginAs($user)
{
if ($this->isElementPresent("sl-login-user")) {
$password = $this->user_credentials[$user];
$this->type("sl-login-user", $user);
$this->type("sl-login-pass", $password);
$this->clickAndWait("login");
if ($this->isTextPresent("Invalid username or password")) {
return false;
}
}
return true;
}
public function implodeWithKey($glue = null, $pieces, $hifen = '=>')
{
$return = null;
foreach ($pieces as $tk => $tv) {
$return .= $glue . $tk . $hifen . $tv;
}
return substr($return, 1);
}
}