Project

General

Profile

Bug #22435 » 14079.diff

Administrator Admin, 2010-04-13 23:13

View differences:

tests/t3lib/matchcondition/t3lib_matchcondition_frontend_testcase.php (working copy)
}
/**
* Tests whether the browserInfo hook is called.
*
* @return void
* @test
*/
public function deprecatedBrowserInfoHookIsCalled() {
$classRef = uniqid('tx_browserInfoHook');
$browserInfoHookMock = $this->getMock($classRef, array('browserInfo'));
$browserInfoHookMock->expects($this->atLeastOnce())->method('browserInfo');
$GLOBALS['T3_VAR']['getUserObj'][$classRef] = $browserInfoHookMock;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_matchcondition.php']['matchConditionClass'][$classRef] = $classRef;
$this->matchCondition->__construct();
$this->matchCondition->match('[browser = msie] && [version = 7] && [system = winNT]');
}
/**
* Tests whether the whichDevice hook is called.
*
* @return void
* @test
*/
public function deprecatedWhichDeviceHookIsCalled() {
$classRef = uniqid('tx_whichDeviceHook');
$whichDeviceHookMock = $this->getMock($classRef, array('whichDevice'));
$whichDeviceHookMock->expects($this->atLeastOnce())->method('whichDevice');
$GLOBALS['T3_VAR']['getUserObj'][$classRef] = $whichDeviceHookMock;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_matchcondition.php']['matchConditionClass'][$classRef] = $classRef;
$this->matchCondition->__construct();
$this->matchCondition->match('[device = robot]');
}
/**
* Tests whether the language comparison matches.
* @test
*/
tests/t3lib/t3lib_matchcondition_testcase.php (working copy)
<?php
/***************************************************************
* Copyright notice
*
* (c) 2009 Oliver Hader <oliver@typo3.org>
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Testcase for class t3lib_matchCondition.
*
* @author Oliver Hader <oliver@typo3.org>
* @package TYPO3
* @subpackage t3lib
*/
class t3lib_matchCondition_testcase extends tx_phpunit_testcase {
/**
* @var array
*/
private $backupGlobalVariables;
/**
* @var array
*/
private $rootline;
/**
* @var t3lib_matchCondition
*/
private $matchCondition;
public function setUp() {
$this->backupGlobalVariables = array(
'_ENV' => $_ENV,
'_GET' => $_GET,
'_POST' => $_POST,
'_SERVER' => $_SERVER,
'TYPO3_CONF_VARS' => $GLOBALS['TYPO3_CONF_VARS'],
'T3_VAR' => $GLOBALS['T3_VAR'],
);
$this->testGlobalNamespace = uniqid('TEST');
$GLOBALS[$this->testGlobalNamespace] = array();
$this->setUpTSFE();
$this->matchCondition = t3lib_div::makeInstance('t3lib_matchCondition');
}
public function tearDown() {
foreach ($this->backupGlobalVariables as $key => $data) {
$GLOBALS[$key] = $data;
}
unset($this->matchCondition);
unset($this->backupGlobalVariables);
unset($GLOBALS[$this->testGlobalNamespace]);
}
private function setUpTSFE() {
$this->rootline = array(
2 => array('uid' => 121, 'pid' => 111),
1 => array('uid' => 111, 'pid' => 101,),
0 => array('uid' => 101, 'pid' => 0,),
);
$GLOBALS['TSFE'] = $this->getMock('tslib_fe', array(), array(), '', FALSE);
$GLOBALS['TSFE']->tmpl = $this->getMock('t3lib_TStemplate');
}
/**
* Tests whether a faulty expression fails.
* @test
*/
public function simulateDisabledMatchAllConditionsFailsOnFaultyExpression() {
$this->matchCondition->matchAll = false;
$this->assertFalse($this->matchCondition->match('[nullCondition = This expression would return false in general]'));
}
/**
* Tests whether simulating positive matches for all conditions succeeds.
* @test
*/
public function simulateEnabledMatchAllConditionsSucceeds() {
$this->matchCondition->matchAll = true;
$this->assertTrue($this->matchCondition->match('[nullCondition = This expression would return false in general]'));
}
/**
* Tests whether simulating positive matches for specific conditions succeeds.
* @test
*/
public function simulateEnabledMatchSpecificConditionsSucceeds() {
$testCondition = '[' . uniqid('test') . ' = Any condition to simulate a positive match]';
$this->matchCondition->matchAlternative = array($testCondition);
$this->assertTrue($this->matchCondition->match($testCondition));
}
/**
* Tests whether a condition matches Internet Explorer 7 on Windows.
*
* @return void
* @test
*/
public function conditionMatchesInternetExplorer7Windows() {
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
$result = $this->matchCondition->match('[browser = msie] && [version = 7] && [system = winNT]');
$this->assertTrue($result);
}
/**
* Tests whether a condition does not match Internet Explorer 7 on Windows.
*
* @return void
* @test
*/
public function conditionDoesNotMatchInternetExplorer7Windows() {
$_SERVER['HTTP_USER_AGENT'] = 'Opera/9.25 (Windows NT 6.0; U; en)';
$result = $this->matchCondition->match('[browser = msie] && [version = 7] && [system = winNT]');
$this->assertFalse($result);
}
/**
* Tests whether the browserInfo hook is called.
*
* @return void
* @test
*/
public function deprecatedBrowserInfoHookIsCalled() {
$classRef = uniqid('tx_browserInfoHook');
$browserInfoHookMock = $this->getMock($classRef, array('browserInfo'));
$browserInfoHookMock->expects($this->atLeastOnce())->method('browserInfo');
$GLOBALS['T3_VAR']['getUserObj'][$classRef] = $browserInfoHookMock;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_matchcondition.php']['matchConditionClass'][$classRef] = $classRef;
$this->matchCondition->__construct();
$this->matchCondition->match('[browser = msie] && [version = 7] && [system = winNT]');
}
/**
* Tests whether a device type condition matches a crawler.
* @test
*/
public function deviceConditionMatchesRobot() {
$_SERVER['HTTP_USER_AGENT'] = 'Googlebot/2.1 (+http://www.google.com/bot.html)';
$result = $this->matchCondition->match('[device = robot]');
$this->assertTrue($result);
}
/**
* Tests whether a device type condition does not match a crawler.
* @test
*/
public function deviceConditionDoesNotMatchRobot() {
$_SERVER['HTTP_USER_AGENT'] = md5('Some strange user agent');
$result = $this->matchCondition->match('[device = robot]');
$this->assertFalse($result);
}
/**
* Tests whether the whichDevice hook is called.
*
* @return void
* @test
*/
public function deprecatedWhichDeviceHookIsCalled() {
$classRef = uniqid('tx_whichDeviceHook');
$whichDeviceHookMock = $this->getMock($classRef, array('whichDevice'));
$whichDeviceHookMock->expects($this->atLeastOnce())->method('whichDevice');
$GLOBALS['T3_VAR']['getUserObj'][$classRef] = $whichDeviceHookMock;
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_matchcondition.php']['matchConditionClass'][$classRef] = $classRef;
$this->matchCondition->__construct();
$this->matchCondition->match('[device = robot]');
}
/**
* Tests whether the language comparison matches.
* @test
*/
public function languageConditionMatchesSingleLanguageExpression() {
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3';
$this->assertTrue($this->matchCondition->match('[language = *de*]'));
$this->assertTrue($this->matchCondition->match('[language = *de-de*]'));
}
/**
* Tests whether the language comparison matches.
* @test
*/
public function languageConditionMatchesMultipleLanguagesExpression() {
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3';
$this->assertTrue($this->matchCondition->match('[language = *en*,*de*]'));
$this->assertTrue($this->matchCondition->match('[language = *en-us*,*de-de*]'));
}
/**
* Tests whether the language comparison matches.
* @test
*/
public function languageConditionMatchesCompleteLanguagesExpression() {
$this->markTestSkipped('This comparison seems to be incomplete in t3lib_matchCondition.');
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'de-de,de;q=0.8,en-us;q=0.5,en;q=0.3';
$this->assertTrue($this->matchCondition->match('[language = de-de,de;q=0.8]'));
}
/**
* Tests whether usergroup comparison matches.
* @test
*/
public function usergroupConditionMatchesSingleGroupId() {
$GLOBALS['TSFE']->gr_list = '13,14,15';
$this->assertTrue($this->matchCondition->match('[usergroup = 13]'));
}
/**
* Tests whether usergroup comparison matches.
* @test
*/
public function usergroupConditionMatchesMultipleUserGroupId() {
$GLOBALS['TSFE']->gr_list = '13,14,15';
$this->assertTrue($this->matchCondition->match('[usergroup = 999,15,14,13]'));
}
/**
* Tests whether usergroup comparison matches.
* @test
*/
public function usergroupConditionDoesNotMatchDefaulUserGroupIds() {
$GLOBALS['TSFE']->gr_list = '0,-1';
$this->assertFalse($this->matchCondition->match('[usergroup = 0,-1]'));
}
/**
* Tests whether user comparison matches.
* @test
*/
public function loginUserConditionMatchesAnyLoggedInUser() {
$GLOBALS['TSFE']->loginUser = TRUE;
$GLOBALS['TSFE']->fe_user->user['uid'] = 13;
$this->assertTrue($this->matchCondition->match('[loginUser = *]'));
}
/**
* Tests whether user comparison matches.
* @test
*/
public function loginUserConditionMatchesSingleLoggedInUser() {
$GLOBALS['TSFE']->loginUser = TRUE;
$GLOBALS['TSFE']->fe_user->user['uid'] = 13;
$this->assertTrue($this->matchCondition->match('[loginUser = 13]'));
}
/**
* Tests whether user comparison matches.
* @test
*/
public function loginUserConditionMatchesMultipleLoggedInUsers() {
$GLOBALS['TSFE']->loginUser = TRUE;
$GLOBALS['TSFE']->fe_user->user['uid'] = 13;
$this->assertTrue($this->matchCondition->match('[loginUser = 999,13]'));
}
/**
* Tests whether user comparison matches.
* @test
*/
public function loginUserConditionDoesNotMatchIfNotUserIsLoggedId() {
$GLOBALS['TSFE']->loginUser = FALSE;
$GLOBALS['TSFE']->fe_user->user['uid'] = 13;
$this->assertFalse($this->matchCondition->match('[loginUser = *]'));
$this->assertFalse($this->matchCondition->match('[loginUser = 13]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnEqualExpression() {
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 = 10]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 = 10.1]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 == 10]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 == 10.1]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnNotEqualExpression() {
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 != 20]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 != 10.2]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnLowerThanExpression() {
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 < 20]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 < 10.2]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnLowerThanOrEqualExpression() {
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 <= 10]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 <= 20]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 <= 10.1]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 <= 10.2]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnGreaterThanExpression() {
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:20 > 10]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.2 > 10.1]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnGreaterThanOrEqualExpression() {
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10 >= 10]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:20 >= 10]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.1 >= 10.1]'));
$this->assertTrue($this->matchCondition->match('[globalVar = LIT:10.2 >= 10.1]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionMatchesOnEmptyExpressionWithNoValueSet() {
$testKey = uniqid('test');
$this->assertTrue($this->matchCondition->match('[globalVar = GP:' . $testKey . '=]'));
$this->assertTrue($this->matchCondition->match('[globalVar = GP:' . $testKey . ' = ]'));
}
/**
* Tests whether numerical comparison matches.
* @test
*/
public function globalVarConditionDoesNotMatchOnEmptyExpressionWithValueSetToZero() {
$testKey = uniqid('test');
$_GET = array();
$_POST = array($testKey => 0);
$this->assertFalse($this->matchCondition->match('[globalVar = GP:' . $testKey . '=]'));
$this->assertFalse($this->matchCondition->match('[globalVar = GP:' . $testKey . ' = ]'));
}
/**
* Tests whether string comparison matches.
* @test
*/
public function globalStringConditionMatchesOnEqualExpression() {
$this->assertTrue($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = TYPO3.Test.Condition]'));
$this->assertFalse($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = TYPO3]'));
}
/**
* Tests whether string comparison matches.
* @test
*/
public function globalStringConditionMatchesWildcardExpression() {
$this->assertTrue($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = TYPO3?Test?Condition]'));
$this->assertTrue($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = TYPO3.T*t.Condition]'));
$this->assertTrue($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = TYPO3?T*t?Condition]'));
}
/**
* Tests whether string comparison matches.
* @test
*/
public function globalStringConditionMatchesRegularExpression() {
$this->assertTrue($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = /^[A-Za-z3.]+$/]'));
$this->assertTrue($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = /^TYPO3\..+Condition$/]'));
$this->assertFalse($this->matchCondition->match('[globalString = LIT:TYPO3.Test.Condition = /^FALSE/]'));
}
/**
* Tests whether string comparison matches.
* @test
*/
public function globalStringConditionMatchesEmptyRegularExpression() {
$testKey = uniqid('test');
$_SERVER[$testKey] = '';
$this->assertTrue($this->matchCondition->match('[globalString = _SERVER|' . $testKey . ' = /^$/]'));
}
/**
* Tests whether treeLevel comparison matches.
* @test
*/
public function treeLevelConditionMatchesSingleValue() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$this->assertTrue($this->matchCondition->match('[treeLevel = 2]'));
}
/**
* Tests whether treeLevel comparison matches.
* @test
*/
public function treeLevelConditionMatchesMultipleValues() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$this->assertTrue($this->matchCondition->match('[treeLevel = 999,998,2]'));
}
/**
* Tests whether treeLevel comparison matches.
* @test
*/
public function treeLevelConditionDoesNotMatchFaultyValue() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$this->assertFalse($this->matchCondition->match('[treeLevel = 999]'));
}
/**
* Tests whether a page Id is found in the previous rootline entries.
* @test
*/
public function PIDupinRootlineConditionMatchesSinglePageIdInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertTrue($this->matchCondition->match('[PIDupinRootline = 111]'));
}
/**
* Tests whether a page Id is found in the previous rootline entries.
* @test
*/
public function PIDupinRootlineConditionMatchesMultiplePageIdsInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertTrue($this->matchCondition->match('[PIDupinRootline = 999,111,101]'));
}
/**
* Tests whether a page Id is found in the previous rootline entries.
* @test
*/
public function PIDupinRootlineConditionDoesNotMatchPageIdNotInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertFalse($this->matchCondition->match('[PIDupinRootline = 999]'));
}
/**
* Tests whether a page Id is found in the previous rootline entries.
* @test
*/
public function PIDupinRootlineConditionDoesNotMatchLastPageIdInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertFalse($this->matchCondition->match('[PIDupinRootline = 121]'));
}
/**
* Tests whether a page Id is found in all rootline entries.
* @test
*/
public function PIDinRootlineConditionMatchesSinglePageIdInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertTrue($this->matchCondition->match('[PIDinRootline = 111]'));
}
/**
* Tests whether a page Id is found in all rootline entries.
* @test
*/
public function PIDinRootlineConditionMatchesMultiplePageIdsInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertTrue($this->matchCondition->match('[PIDinRootline = 999,111,101]'));
}
/**
* Tests whether a page Id is found in all rootline entries.
* @test
*/
public function PIDinRootlineConditionMatchesLastPageIdInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertTrue($this->matchCondition->match('[PIDinRootline = 121]'));
}
/**
* Tests whether a page Id is found in all rootline entries.
* @test
*/
public function PIDinRootlineConditionDoesNotMatchPageIdNotInRootline() {
$GLOBALS['TSFE']->tmpl->rootLine = $this->rootline;
$GLOBALS['TSFE']->id = 121;
$this->assertFalse($this->matchCondition->match('[PIDinRootline = 999]'));
}
/**
* Tests whether the compatibility version can be evaluated.
* (e.g. 4.9 is compatible to 4.0 but not to 5.0)
* @test
*/
public function compatVersionConditionMatchesOlderRelease() {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['compat_version'] = '4.9';
$this->assertTrue($this->matchCondition->match('[compatVersion = 4.0]'));
}
/**
* Tests whether the compatibility version can be evaluated.
* (e.g. 4.9 is compatible to 4.0 but not to 5.0)
* @test
*/
public function compatVersionConditionMatchesSameRelease() {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['compat_version'] = '4.9';
$this->assertTrue($this->matchCondition->match('[compatVersion = 4.9]'));
}
/**
* Tests whether the compatibility version can be evaluated.
* (e.g. 4.9 is compatible to 4.0 but not to 5.0)
* @test
*/
public function compatVersionConditionDoesNotMatchNewerRelease() {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['compat_version'] = '4.9';
$this->assertFalse($this->matchCondition->match('[compatVersion = 5.0]'));
}
/**
* Tests whether the gneric fetching of variables works with the namespace 'GP'.
* @test
*/
public function genericGetVariablesSucceedsWithNamespaceGP() {
$_GET = array('testGet' => 'getTest');
$_POST = array('testPost' => 'postTest');
$this->assertTrue($this->matchCondition->match('[globalString = GP:testGet = getTest]'));
$this->assertTrue($this->matchCondition->match('[globalString = GP:testPost = postTest]'));
}
/**
* Tests whether the gneric fetching of variables works with the namespace 'TSFE'.
* @test
*/
public function genericGetVariablesSucceedsWithNamespaceTSFE() {
$GLOBALS['TSFE']->id = 1234567;
$GLOBALS['TSFE']->testSimpleObject = new stdClass();
$GLOBALS['TSFE']->testSimpleObject->testSimpleVariable = 'testValue';
$this->assertTrue($this->matchCondition->match('[globalString = TSFE:id = 1234567]'));
$this->assertTrue($this->matchCondition->match('[globalString = TSFE:testSimpleObject|testSimpleVariable = testValue]'));
}
/**
* Tests whether the gneric fetching of variables works with the namespace 'ENV'.
* @test
*/
public function genericGetVariablesSucceedsWithNamespaceENV() {
$testKey = uniqid('test');
putenv($testKey .'=testValue');
$this->assertTrue($this->matchCondition->match('[globalString = ENV:' . $testKey . ' = testValue]'));
}
/**
* Tests whether the gneric fetching of variables works with the namespace 'IENV'.
* @test
*/
public function genericGetVariablesSucceedsWithNamespaceIENV() {
$_SERVER['HTTP_HOST'] = t3lib_div::getIndpEnv('TYPO3_HOST_ONLY') . ':1234567';
$this->assertTrue($this->matchCondition->match('[globalString = IENV:TYPO3_PORT = 1234567]'));
}
/**
* Tests whether the gneric fetching of variables works with any global namespace.
* @test
*/
public function genericGetVariablesSucceedsWithAnyGlobalNamespace() {
$GLOBALS[$this->testGlobalNamespace] = array(
'first' => 'testFirst',
'second' => array('third' => 'testThird'),
);
$this->assertTrue($this->matchCondition->match(
'[globalString = ' . $this->testGlobalNamespace . '|first = testFirst]'
));
$this->assertTrue($this->matchCondition->match(
'[globalString = ' . $this->testGlobalNamespace . '|second|third = testThird]'
));
}
}
?>
(2-2/3)