Merge "Add tags for undo edits"
[lhc/web/wiklou.git] / tests / phpunit / includes / Storage / MutableRevisionSlotsTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Storage;
4
5 use MediaWiki\Storage\MutableRevisionSlots;
6 use MediaWiki\Storage\RevisionAccessException;
7 use MediaWiki\Storage\SlotRecord;
8 use MediaWikiTestCase;
9 use WikitextContent;
10
11 /**
12 * @covers \MediaWiki\Storage\MutableRevisionSlots
13 */
14 class MutableRevisionSlotsTest extends MediaWikiTestCase {
15
16 public function testSetMultipleSlots() {
17 $slots = new MutableRevisionSlots();
18
19 $this->assertSame( [], $slots->getSlots() );
20
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() );
25
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() );
30 }
31
32 public function testSetExistingSlotOverwritesSlot() {
33 $slots = new MutableRevisionSlots();
34
35 $this->assertSame( [], $slots->getSlots() );
36
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() );
41
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() );
46 }
47
48 public function testSetContentOfExistingSlotOverwritesContent() {
49 $slots = new MutableRevisionSlots();
50
51 $this->assertSame( [], $slots->getSlots() );
52
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() );
57
58 $newContent = new WikitextContent( 'B' );
59 $slots->setContent( 'main', $newContent );
60 $this->assertSame( $newContent, $slots->getContent( 'main' ) );
61 }
62
63 public function testRemoveExistingSlot() {
64 $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
65 $slots = new MutableRevisionSlots( [ $slotA ] );
66
67 $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
68
69 $slots->removeSlot( 'main' );
70 $this->assertSame( [], $slots->getSlots() );
71 $this->setExpectedException( RevisionAccessException::class );
72 $slots->getSlot( 'main' );
73 }
74
75 }