mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
8dd644d25d
Namespace all templates Move difflib and BBCodeParser2 to thirdparty Remove deprecated API marked for removal in 4.0
303 lines
7.3 KiB
PHP
Executable File
303 lines
7.3 KiB
PHP
Executable File
<?php
|
|
|
|
use SilverStripe\ORM\SS_Map;
|
|
use SilverStripe\ORM\ArrayList;
|
|
use SilverStripe\Dev\SapphireTest;
|
|
|
|
|
|
/**
|
|
* @package framework
|
|
* @subpackage tests
|
|
*/
|
|
class SS_MapTest extends SapphireTest {
|
|
|
|
// Borrow the model from DataObjectTest
|
|
protected static $fixture_file = 'DataObjectTest.yml';
|
|
|
|
public function setUpOnce() {
|
|
$this->extraDataObjects = DataObjectTest::$extra_data_objects;
|
|
parent::setUpOnce();
|
|
}
|
|
|
|
|
|
public function testValues() {
|
|
$list = DataObjectTest_TeamComment::get()->sort('Name');
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
|
|
$this->assertEquals(array(
|
|
'This is a team comment by Bob',
|
|
'This is a team comment by Joe',
|
|
'Phil is a unique guy, and comments on team2'
|
|
), $map->values());
|
|
|
|
|
|
$map->push('Push', 'Item');
|
|
|
|
$this->assertEquals(array(
|
|
'This is a team comment by Bob',
|
|
'This is a team comment by Joe',
|
|
'Phil is a unique guy, and comments on team2',
|
|
'Item'
|
|
), $map->values());
|
|
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->push('Push', 'Pushed value');
|
|
|
|
$this->assertEquals(array(
|
|
'Pushed value'
|
|
), $map->values());
|
|
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->unshift('Unshift', 'Unshift item');
|
|
|
|
$this->assertEquals(array(
|
|
'Unshift item'
|
|
), $map->values());
|
|
}
|
|
|
|
|
|
public function testArrayAccess() {
|
|
$list = DataObjectTest_TeamComment::get();
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
$this->assertEquals('This is a team comment by Joe', $map['Joe']);
|
|
$this->assertNull($map['DoesntExist']);
|
|
}
|
|
|
|
public function testIteration() {
|
|
$list = DataObjectTest_TeamComment::get()->sort('ID');
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
$text = "";
|
|
foreach($map as $k => $v) {
|
|
$text .= "$k: $v\n";
|
|
}
|
|
$this->assertEquals("Joe: This is a team comment by Joe\n"
|
|
. "Bob: This is a team comment by Bob\n"
|
|
. "Phil: Phil is a unique guy, and comments on team2\n", $text);
|
|
}
|
|
|
|
public function testDefaultConfigIsIDAndTitle() {
|
|
$list = DataObjectTest_Team::get();
|
|
$map = new SS_Map($list);
|
|
$this->assertEquals('Team 1', $map[$this->idFromFixture('DataObjectTest_Team', 'team1')]);
|
|
}
|
|
|
|
public function testSetKeyFieldAndValueField() {
|
|
$list = DataObjectTest_TeamComment::get();
|
|
$map = new SS_Map($list);
|
|
$map->setKeyField('Name');
|
|
$map->setValueField('Comment');
|
|
$this->assertEquals('This is a team comment by Joe', $map['Joe']);
|
|
}
|
|
|
|
public function testToArray() {
|
|
$list = DataObjectTest_TeamComment::get();
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
$this->assertEquals(array("Joe" => "This is a team comment by Joe",
|
|
"Bob" => "This is a team comment by Bob",
|
|
"Phil" => "Phil is a unique guy, and comments on team2"), $map->toArray());
|
|
}
|
|
|
|
public function testKeys() {
|
|
$list = DataObjectTest_TeamComment::get()->sort('Name');
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
$this->assertEquals(array(
|
|
'Bob',
|
|
'Joe',
|
|
'Phil'
|
|
), $map->keys());
|
|
|
|
$map->unshift('Unshift', 'Item');
|
|
|
|
$this->assertEquals(array(
|
|
'Unshift',
|
|
'Bob',
|
|
'Joe',
|
|
'Phil'
|
|
), $map->keys());
|
|
|
|
$map->push('Push', 'Item');
|
|
|
|
$this->assertEquals(array(
|
|
'Unshift',
|
|
'Bob',
|
|
'Joe',
|
|
'Phil',
|
|
'Push'
|
|
), $map->keys());
|
|
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->push('Push', 'Item');
|
|
|
|
$this->assertEquals(array(
|
|
'Push'
|
|
), $map->keys());
|
|
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->unshift('Unshift', 'Item');
|
|
|
|
$this->assertEquals(array(
|
|
'Unshift'
|
|
), $map->keys());
|
|
}
|
|
|
|
public function testMethodAsValueField() {
|
|
$list = DataObjectTest_Team::get()->sort('Title');
|
|
$map = new SS_Map($list, 'ID', 'MyTitle');
|
|
$this->assertEquals(array(
|
|
'Team Subteam 1',
|
|
'Team Subteam 2',
|
|
'Team Subteam 3',
|
|
'Team Team 1',
|
|
'Team Team 2',
|
|
'Team Team 3'
|
|
), $map->values());
|
|
}
|
|
|
|
public function testUnshift() {
|
|
$list = DataObjectTest_TeamComment::get();
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
|
|
$map->unshift(-1, '(All)');
|
|
|
|
$this->assertEquals(array(
|
|
-1 => "(All)",
|
|
"Joe" => "This is a team comment by Joe",
|
|
"Bob" => "This is a team comment by Bob",
|
|
"Phil" => "Phil is a unique guy, and comments on team2"), $map->toArray());
|
|
|
|
$map->unshift(0, '(Select)');
|
|
|
|
$this->assertEquals('(All)', $map[-1]);
|
|
$this->assertEquals('(Select)', $map[0]);
|
|
|
|
$this->assertEquals(array(
|
|
0 => "(Select)",
|
|
-1 => "(All)",
|
|
"Joe" => "This is a team comment by Joe",
|
|
"Bob" => "This is a team comment by Bob",
|
|
"Phil" => "Phil is a unique guy, and comments on team2"), $map->toArray());
|
|
|
|
$map->unshift("Bob","Replaced");
|
|
$this->assertEquals(array(
|
|
"Bob" => "Replaced",
|
|
0 => "(Select)",
|
|
-1 => "(All)",
|
|
"Joe" => "This is a team comment by Joe",
|
|
"Phil" => "Phil is a unique guy, and comments on team2"), $map->toArray());
|
|
|
|
$map->unshift("Phil","Replaced as well");
|
|
$this->assertEquals(array(
|
|
"Phil" => "Replaced as well",
|
|
"Bob" => "Replaced",
|
|
0 => "(Select)",
|
|
-1 => "(All)",
|
|
"Joe" => "This is a team comment by Joe"), $map->toArray());
|
|
|
|
$map->unshift("Joe","Replaced the last one");
|
|
$this->assertEquals(array(
|
|
"Joe" => "Replaced the last one",
|
|
"Phil" => "Replaced as well",
|
|
"Bob" => "Replaced",
|
|
0 => "(Select)",
|
|
-1 => "(All)"), $map->toArray());
|
|
}
|
|
|
|
public function testPush() {
|
|
$list = DataObjectTest_TeamComment::get();
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
|
|
$map->push(1, '(All)');
|
|
|
|
$this->assertEquals(array(
|
|
"Joe" => "This is a team comment by Joe",
|
|
"Bob" => "This is a team comment by Bob",
|
|
"Phil" => "Phil is a unique guy, and comments on team2",
|
|
1 => "(All)"
|
|
), $map->toArray());
|
|
}
|
|
|
|
public function testCount() {
|
|
$list = DataObjectTest_TeamComment::get();
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
|
|
$this->assertEquals(3, $map->count());
|
|
|
|
// pushing a new item should update the count
|
|
$map->push(1, 'Item pushed');
|
|
$this->assertEquals(4, $map->count());
|
|
|
|
$map->unshift(2, 'Item shifted');
|
|
$this->assertEquals(5, $map->count());
|
|
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->unshift('1', 'shifted');
|
|
|
|
$this->assertEquals(1, $map->count());
|
|
|
|
unset($map[1]);
|
|
$this->assertEquals(0, $map->count());
|
|
}
|
|
|
|
public function testIterationWithUnshift() {
|
|
$list = DataObjectTest_TeamComment::get()->sort('ID');
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
$map->unshift(1, 'Unshifted');
|
|
|
|
$text = "";
|
|
|
|
foreach($map as $k => $v) {
|
|
$text .= "$k: $v\n";
|
|
}
|
|
|
|
$this->assertEquals("1: Unshifted\n"
|
|
. "Joe: This is a team comment by Joe\n"
|
|
. "Bob: This is a team comment by Bob\n"
|
|
. "Phil: Phil is a unique guy, and comments on team2\n", $text
|
|
);
|
|
}
|
|
|
|
public function testIterationWithPush() {
|
|
$list = DataObjectTest_TeamComment::get()->sort('ID');
|
|
$map = new SS_Map($list, 'Name', 'Comment');
|
|
$map->push(1, 'Pushed');
|
|
|
|
$text = "";
|
|
|
|
foreach($map as $k => $v) {
|
|
$text .= "$k: $v\n";
|
|
}
|
|
|
|
$this->assertEquals("Joe: This is a team comment by Joe\n"
|
|
. "Bob: This is a team comment by Bob\n"
|
|
. "Phil: Phil is a unique guy, and comments on team2\n"
|
|
. "1: Pushed\n", $text
|
|
);
|
|
}
|
|
|
|
public function testIterationWithEmptyListUnshifted() {
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->unshift('1', 'unshifted');
|
|
|
|
$text = "";
|
|
|
|
foreach($map as $k => $v) {
|
|
$text .= "$k: $v\n";
|
|
}
|
|
|
|
$this->assertEquals("1: unshifted\n", $text);
|
|
}
|
|
|
|
public function testIterationWithEmptyListPushed() {
|
|
$map = new SS_Map(new ArrayList());
|
|
$map->push('1', 'pushed');
|
|
|
|
$text = "";
|
|
|
|
foreach($map as $k => $v) {
|
|
$text .= "$k: $v\n";
|
|
}
|
|
|
|
$this->assertEquals("1: pushed\n", $text);
|
|
}
|
|
}
|