mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge branch '3.5' into 3.6
This commit is contained in:
commit
4731d3c671
@ -29,6 +29,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": ["tests/behat/features/bootstrap"]
|
"psr-0": {
|
||||||
|
"SilverStripe\\": "src/",
|
||||||
|
"Zend_": "thirdparty/Zend/"
|
||||||
|
},
|
||||||
|
"classmap": [
|
||||||
|
"tests/behat/features/bootstrap",
|
||||||
|
"admin/code", "api", "cache", "cli", "control", "core", "dev", "email", "filesystem",
|
||||||
|
"forms", "i18n", "model", "oembed", "parsers", "search", "security", "tasks", "view",
|
||||||
|
"thirdparty/php-peg", "thirdparty/simpletest", "thirdparty/zend_translate_railsyaml"
|
||||||
|
],
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"view/SSTemplateParser.php.inc", "dev/phpunit/PhpUnitWrapper.php", "model/fieldtypes/compat"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,7 @@ class Injector {
|
|||||||
* @return Injector Reference to new active Injector instance
|
* @return Injector Reference to new active Injector instance
|
||||||
*/
|
*/
|
||||||
public static function nest() {
|
public static function nest() {
|
||||||
$current = self::$instance;
|
$current = self::inst();
|
||||||
|
|
||||||
$new = clone $current;
|
$new = clone $current;
|
||||||
$new->nestedFrom = $current;
|
$new->nestedFrom = $current;
|
||||||
|
@ -223,7 +223,7 @@ class Config {
|
|||||||
* @return Config Reference to new active Config instance
|
* @return Config Reference to new active Config instance
|
||||||
*/
|
*/
|
||||||
public static function nest() {
|
public static function nest() {
|
||||||
$current = self::$instance;
|
$current = self::inst();
|
||||||
|
|
||||||
$new = clone $current;
|
$new = clone $current;
|
||||||
$new->nestedFrom = $current;
|
$new->nestedFrom = $current;
|
||||||
|
@ -171,6 +171,13 @@ class SapphireTest extends PHPUnit_Framework_TestCase {
|
|||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
|
|
||||||
|
if (!defined('FRAMEWORK_PATH')) {
|
||||||
|
trigger_error(
|
||||||
|
'Missing constants, did you remember to include the test bootstrap in your phpunit.xml file?',
|
||||||
|
E_USER_WARNING
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//nest config and injector for each test so they are effectively sandboxed per test
|
//nest config and injector for each test so they are effectively sandboxed per test
|
||||||
Config::nest();
|
Config::nest();
|
||||||
Injector::nest();
|
Injector::nest();
|
||||||
|
@ -10,6 +10,7 @@ Our web-based [PHP installer](installation/) can check if you meet the requireme
|
|||||||
|
|
||||||
* PHP 5.3.3+, <7.2
|
* PHP 5.3.3+, <7.2
|
||||||
* We recommend using a PHP accelerator or opcode cache, such as [xcache](http://xcache.lighttpd.net/) or [WinCache](http://www.iis.net/download/wincacheforphp).
|
* We recommend using a PHP accelerator or opcode cache, such as [xcache](http://xcache.lighttpd.net/) or [WinCache](http://www.iis.net/download/wincacheforphp).
|
||||||
|
* Note: Some PHP 5.5+ packages already have [Zend OpCache](http://php.net/manual/en/book.opcache.php) installed by default. If this is the case on your system, do not try and run additional opcaches alongside Zend OpCache without first disabling it, as it will likely have unexpected consequences.
|
||||||
* Allocate at least 48MB of memory to each PHP process. (SilverStripe can be resource hungry for some intensive operations.)
|
* Allocate at least 48MB of memory to each PHP process. (SilverStripe can be resource hungry for some intensive operations.)
|
||||||
* Required modules: dom, gd2, fileinfo, hash, iconv, mbstring, mysqli (or other database driver), session, simplexml, tokenizer, xml.
|
* Required modules: dom, gd2, fileinfo, hash, iconv, mbstring, mysqli (or other database driver), session, simplexml, tokenizer, xml.
|
||||||
* Recommended configuration
|
* Recommended configuration
|
||||||
|
@ -634,7 +634,7 @@ class File extends DataObject {
|
|||||||
*
|
*
|
||||||
* Does not change the filesystem itself, please use {@link write()} for this.
|
* Does not change the filesystem itself, please use {@link write()} for this.
|
||||||
*
|
*
|
||||||
* @param String $name
|
* @param string $name
|
||||||
*/
|
*/
|
||||||
public function setName($name) {
|
public function setName($name) {
|
||||||
$oldName = $this->Name;
|
$oldName = $this->Name;
|
||||||
@ -663,7 +663,10 @@ class File extends DataObject {
|
|||||||
))->first()
|
))->first()
|
||||||
) {
|
) {
|
||||||
$suffix++;
|
$suffix++;
|
||||||
$name = "$base-$suffix.$ext";
|
$name = "$base-$suffix";
|
||||||
|
if (!empty($ext)) {
|
||||||
|
$name .= ".$ext";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3225,7 +3225,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
|
|||||||
$SNG = singleton($callerClass);
|
$SNG = singleton($callerClass);
|
||||||
|
|
||||||
$cacheComponents = array($filter, $orderby, $SNG->extend('cacheKeyComponent'));
|
$cacheComponents = array($filter, $orderby, $SNG->extend('cacheKeyComponent'));
|
||||||
$cacheKey = md5(var_export($cacheComponents, true));
|
$cacheKey = md5(serialize($cacheComponents));
|
||||||
|
|
||||||
// Flush destroyed items out of the cache
|
// Flush destroyed items out of the cache
|
||||||
if($cache && isset(DataObject::$_cache_get_one[$callerClass][$cacheKey])
|
if($cache && isset(DataObject::$_cache_get_one[$callerClass][$cacheKey])
|
||||||
|
@ -187,6 +187,30 @@ class FileTest extends SapphireTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses fixtures Folder.folder1 and File.setfromname
|
||||||
|
* @dataProvider setNameFileProvider
|
||||||
|
*/
|
||||||
|
public function testSetNameAddsUniqueSuffixWhenFilenameAlreadyExists($name, $expected)
|
||||||
|
{
|
||||||
|
$duplicate = new Folder;
|
||||||
|
$duplicate->setName($name);
|
||||||
|
$duplicate->write();
|
||||||
|
|
||||||
|
$this->assertSame($expected, $duplicate->Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
*/
|
||||||
|
public function setNameFileProvider()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array('FileTest-folder1', 'FileTest-folder1-2'),
|
||||||
|
array('FileTest.png', 'FileTest-2.png'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function testLinkAndRelativeLink() {
|
public function testLinkAndRelativeLink() {
|
||||||
$file = $this->objFromFixture('File', 'asdf');
|
$file = $this->objFromFixture('File', 'asdf');
|
||||||
$this->assertEquals(ASSETS_DIR . '/FileTest.txt', $file->RelativeLink());
|
$this->assertEquals(ASSETS_DIR . '/FileTest.txt', $file->RelativeLink());
|
||||||
|
@ -63,7 +63,7 @@ class DataQueryTest extends SapphireTest {
|
|||||||
$this->assertContains('"DataQueryTest_C"."ID" = "DataQueryTest_B"."TestCTwoID"', $dq->sql());
|
$this->assertContains('"DataQueryTest_C"."ID" = "DataQueryTest_B"."TestCTwoID"', $dq->sql());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testApplyReplationDeepInheretence() {
|
public function testApplyRelationDeepInheritance() {
|
||||||
//test has_one relation
|
//test has_one relation
|
||||||
$newDQ = new DataQuery('DataQueryTest_E');
|
$newDQ = new DataQuery('DataQueryTest_E');
|
||||||
//apply a relation to a relation from an ancestor class
|
//apply a relation to a relation from an ancestor class
|
||||||
|
Loading…
Reference in New Issue
Block a user