mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-26 20:45:47 +02:00
The main benefit of this is so that authors who make use of .editorconfig don't end up with whitespace changes in their PRs. Spaces vs. tabs has been left alone, although that could do with a tidy-up in SS4 after the switch to PSR-1/2. The command used was this: for match in '*.ss' '*.css' '*.scss' '*.html' '*.yml' '*.php' '*.js' '*.csv' '*.inc' '*.php5'; do find . -path ./thirdparty -not -prune -o -path ./admin/thirdparty -not -prune -o -type f -name "$match" -exec sed -E -i '' 's/[[:space:]]+$//' {} \+ find . -path ./thirdparty -not -prune -o -path ./admin/thirdparty -not -prune -o -type f -name "$match" | xargs perl -pi -e 's/ +$//' done
141 lines
5.1 KiB
PHP
141 lines
5.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Dummy parameter token
|
|
*/
|
|
class ParameterConfirmationTokenTest_Token extends ParameterConfirmationToken implements TestOnly {
|
|
|
|
public function currentAbsoluteURL() {
|
|
return parent::currentAbsoluteURL();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* A token that always validates a given token
|
|
*/
|
|
class ParameterConfirmationTokenTest_ValidToken extends ParameterConfirmationTokenTest_Token {
|
|
|
|
protected function checkToken($token) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
class ParameterConfirmationTokenTest extends SapphireTest {
|
|
|
|
private function addPart($answer, $slash, $part) {
|
|
$bare = str_replace('/', '', $part);
|
|
|
|
if ($bare) $answer = array_merge($answer, array($bare));
|
|
if ($part) $slash = (substr($part, -1) == '/') ? '/' : '';
|
|
|
|
return array($answer, $slash);
|
|
}
|
|
|
|
protected $oldHost = null;
|
|
|
|
public function setUp() {
|
|
parent::setUp();
|
|
$this->oldHost = $_SERVER['HTTP_HOST'];
|
|
$_GET['parameterconfirmationtokentest_notoken'] = 'value';
|
|
$_GET['parameterconfirmationtokentest_empty'] = '';
|
|
$_GET['parameterconfirmationtokentest_withtoken'] = '1';
|
|
$_GET['parameterconfirmationtokentest_withtokentoken'] = 'dummy';
|
|
$_GET['parameterconfirmationtokentest_nulltoken'] = '1';
|
|
$_GET['parameterconfirmationtokentest_nulltokentoken'] = null;
|
|
$_GET['parameterconfirmationtokentest_emptytoken'] = '1';
|
|
$_GET['parameterconfirmationtokentest_emptytokentoken'] = '';
|
|
}
|
|
|
|
public function tearDown() {
|
|
foreach($_GET as $param) {
|
|
if(stripos($param, 'parameterconfirmationtokentest_') === 0) unset($_GET[$param]);
|
|
}
|
|
$_SERVER['HTTP_HOST'] = $this->oldHost;
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function testParameterDetectsParameters() {
|
|
$withoutToken = new ParameterConfirmationTokenTest_Token('parameterconfirmationtokentest_notoken');
|
|
$emptyParameter = new ParameterConfirmationTokenTest_Token('parameterconfirmationtokentest_empty');
|
|
$withToken = new ParameterConfirmationTokenTest_ValidToken('parameterconfirmationtokentest_withtoken');
|
|
$withoutParameter = new ParameterConfirmationTokenTest_Token('parameterconfirmationtokentest_noparam');
|
|
$nullToken = new ParameterConfirmationTokenTest_Token('parameterconfirmationtokentest_nulltoken');
|
|
$emptyToken = new ParameterConfirmationTokenTest_Token('parameterconfirmationtokentest_emptytoken');
|
|
|
|
// Check parameter
|
|
$this->assertTrue($withoutToken->parameterProvided());
|
|
$this->assertTrue($emptyParameter->parameterProvided()); // even if empty, it's still provided
|
|
$this->assertTrue($withToken->parameterProvided());
|
|
$this->assertFalse($withoutParameter->parameterProvided());
|
|
$this->assertTrue($nullToken->parameterProvided());
|
|
$this->assertTrue($emptyToken->parameterProvided());
|
|
|
|
// Check token
|
|
$this->assertFalse($withoutToken->tokenProvided());
|
|
$this->assertFalse($emptyParameter->tokenProvided());
|
|
$this->assertTrue($withToken->tokenProvided()); // Actually forced to true for this test
|
|
$this->assertFalse($withoutParameter->tokenProvided());
|
|
$this->assertFalse($nullToken->tokenProvided());
|
|
$this->assertFalse($emptyToken->tokenProvided());
|
|
|
|
// Check if reload is required
|
|
$this->assertTrue($withoutToken->reloadRequired());
|
|
$this->assertTrue($emptyParameter->reloadRequired());
|
|
$this->assertFalse($withToken->reloadRequired());
|
|
$this->assertFalse($withoutParameter->reloadRequired());
|
|
$this->assertTrue($nullToken->reloadRequired());
|
|
$this->assertTrue($emptyToken->reloadRequired());
|
|
|
|
// Check suppression
|
|
$this->assertTrue(isset($_GET['parameterconfirmationtokentest_notoken']));
|
|
$withoutToken->suppress();
|
|
$this->assertFalse(isset($_GET['parameterconfirmationtokentest_notoken']));
|
|
}
|
|
|
|
public function testPrepareTokens() {
|
|
// Test priority ordering
|
|
$token = ParameterConfirmationToken::prepare_tokens(array(
|
|
'parameterconfirmationtokentest_notoken',
|
|
'parameterconfirmationtokentest_empty',
|
|
'parameterconfirmationtokentest_noparam'
|
|
));
|
|
// Test no invalid tokens
|
|
$this->assertEquals('parameterconfirmationtokentest_empty', $token->getName());
|
|
$token = ParameterConfirmationToken::prepare_tokens(array(
|
|
'parameterconfirmationtokentest_noparam'
|
|
));
|
|
$this->assertEmpty($token);
|
|
}
|
|
|
|
/**
|
|
* currentAbsoluteURL needs to handle base or url being missing, or any combination of slashes.
|
|
*
|
|
* There should always be exactly one slash between each part in the result, and any trailing slash
|
|
* should be preserved.
|
|
*/
|
|
public function testCurrentAbsoluteURLHandlesSlashes() {
|
|
global $url;
|
|
|
|
$token = new ParameterConfirmationTokenTest_Token('parameterconfirmationtokentest_parameter');
|
|
|
|
foreach(array('foo','foo/') as $host) {
|
|
list($hostAnswer, $hostSlash) = $this->addPart(array(), '', $host);
|
|
|
|
foreach(array('', '/', 'bar', 'bar/', '/bar', '/bar/') as $base) {
|
|
list($baseAnswer, $baseSlash) = $this->addPart($hostAnswer, $hostSlash, $base);
|
|
|
|
foreach(array('', '/', 'baz', 'baz/', '/baz', '/baz/') as $url) {
|
|
list($urlAnswer, $urlSlash) = $this->addPart($baseAnswer, $baseSlash, $url);
|
|
|
|
$_SERVER['HTTP_HOST'] = $host;
|
|
ParameterConfirmationToken::$alternateBaseURL = $base;
|
|
|
|
$this->assertEquals('http://'.implode('/', $urlAnswer) . $urlSlash, $token->currentAbsoluteURL());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|