3 namespace MediaWiki\Tests\Storage
;
5 use MediaWiki\Storage\MutableRevisionSlots
;
6 use MediaWiki\Storage\RevisionAccessException
;
7 use MediaWiki\Storage\SlotRecord
;
12 * @covers \MediaWiki\Storage\MutableRevisionSlots
14 class MutableRevisionSlotsTest
extends MediaWikiTestCase
{
16 public function testSetMultipleSlots() {
17 $slots = new MutableRevisionSlots();
19 $this->assertSame( [], $slots->getSlots() );
21 $slotA = SlotRecord
::newUnsaved( 'some', new WikitextContent( 'A' ) );
22 $slots->setSlot( $slotA );
23 $this->assertSame( $slotA, $slots->getSlot( 'some' ) );
24 $this->assertSame( [ 'some' => $slotA ], $slots->getSlots() );
26 $slotB = SlotRecord
::newUnsaved( 'other', new WikitextContent( 'B' ) );
27 $slots->setSlot( $slotB );
28 $this->assertSame( $slotB, $slots->getSlot( 'other' ) );
29 $this->assertSame( [ 'some' => $slotA, 'other' => $slotB ], $slots->getSlots() );
32 public function testSetExistingSlotOverwritesSlot() {
33 $slots = new MutableRevisionSlots();
35 $this->assertSame( [], $slots->getSlots() );
37 $slotA = SlotRecord
::newUnsaved( 'main', new WikitextContent( 'A' ) );
38 $slots->setSlot( $slotA );
39 $this->assertSame( $slotA, $slots->getSlot( 'main' ) );
40 $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
42 $slotB = SlotRecord
::newUnsaved( 'main', new WikitextContent( 'B' ) );
43 $slots->setSlot( $slotB );
44 $this->assertSame( $slotB, $slots->getSlot( 'main' ) );
45 $this->assertSame( [ 'main' => $slotB ], $slots->getSlots() );
48 public function testSetContentOfExistingSlotOverwritesContent() {
49 $slots = new MutableRevisionSlots();
51 $this->assertSame( [], $slots->getSlots() );
53 $slotA = SlotRecord
::newUnsaved( 'main', new WikitextContent( 'A' ) );
54 $slots->setSlot( $slotA );
55 $this->assertSame( $slotA, $slots->getSlot( 'main' ) );
56 $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
58 $newContent = new WikitextContent( 'B' );
59 $slots->setContent( 'main', $newContent );
60 $this->assertSame( $newContent, $slots->getContent( 'main' ) );
63 public function testRemoveExistingSlot() {
64 $slotA = SlotRecord
::newUnsaved( 'main', new WikitextContent( 'A' ) );
65 $slots = new MutableRevisionSlots( [ $slotA ] );
67 $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
69 $slots->removeSlot( 'main' );
70 $this->assertSame( [], $slots->getSlots() );
71 $this->setExpectedException( RevisionAccessException
::class );
72 $slots->getSlot( 'main' );