ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
ilBuddySystemRelationCollectionTestCase.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
24 {
25  #[DataProvider('provideElements')]
26  public function testElementsCanBeInitiallyAdded(array $elements): void
27  {
28  $collection = new ilBuddySystemRelationCollection($elements);
29 
30  $this->assertFalse($collection->isEmpty());
31  $this->assertSame($elements, $collection->toArray());
32  $this->assertSame(array_values($elements), $collection->getValues());
33  $this->assertSame(array_keys($elements), $collection->getKeys());
34 
35  foreach ($elements as $key => $elm) {
36  $this->assertArrayHasKey($collection->getKey($elm), $elements);
37  $this->assertTrue(isset($collection[$key]));
38  $this->assertEquals($collection[$key], $elm);
39  }
40  }
41 
42  #[DataProvider('provideElements')]
43  public function testElementsCanBeAddedAndRemoved(array $elements): void
44  {
45  $collection = new ilBuddySystemRelationCollection();
46  $this->assertTrue($collection->isEmpty());
47 
48  foreach ($elements as $elm) {
49  $collection->add($elm);
50  $this->assertTrue($collection->contains($elm));
51  }
52 
53  foreach ($elements as $elm) {
54  $collection->removeElement($elm);
55  $this->assertFalse($collection->contains($elm));
56  }
57 
58  $this->assertTrue($collection->isEmpty());
59 
60  foreach ($elements as $elm) {
61  $collection->add($elm);
62  $this->assertTrue($collection->contains($elm));
63  }
64 
65  foreach ($elements as $elm) {
66  $key = $collection->getKey($elm);
67  $collection->remove($key);
68  $this->assertFalse($collection->contains($elm));
69  }
70 
71  $this->assertTrue($collection->isEmpty());
72 
73  foreach ($elements as $key => $elm) {
74  $collection[$key] = $elm;
75  $this->assertTrue($collection->contains($elm));
76  }
77 
78  foreach ($elements as $key => $elm) {
79  unset($collection[$key]);
80  $this->assertFalse($collection->contains($elm));
81  }
82 
83  $this->assertTrue($collection->isEmpty());
84 
85  $collection[] = 5;
86 
87  $data = $collection->toArray();
88  $this->assertSame(5, reset($data));
89  }
90 
91  #[DataProvider('provideElements')]
92  public function testIterator(array $elements): void
93  {
94  $collection = new ilBuddySystemRelationCollection($elements);
95  $iterations = 0;
96  foreach ($collection as $key => $item) {
97  $this->assertSame($elements[$key], $item, "Item $key not match");
98  $iterations++;
99  }
100  $this->assertCount($iterations, $elements, 'Number of iterations not match');
101  }
102 
104  {
105  $this->expectException(InvalidArgumentException::class);
106  $collection = new ilBuddySystemRelationCollection();
107  $collection->removeElement(5);
108  }
109 
111  {
112  $this->expectException(InvalidArgumentException::class);
113  $collection = new ilBuddySystemRelationCollection();
114  $collection->remove('phpunit');
115  }
116 
117  public function testElementsCanBeSliced(): void
118  {
119  $collection = new ilBuddySystemRelationCollection();
120  $collection->add(1);
121  $collection->add(2);
122  $collection->add(3);
123  $collection->add(4);
124 
125  $this->assertCount(2, $collection->filter(fn(int $elm): bool => $elm % 2 === 0)->toArray());
126  }
127 
128  public function testElementsCanBeFiltered(): void
129  {
130  $collection = new ilBuddySystemRelationCollection();
131  $collection->add(1);
132  $collection->add(2);
133  $collection->add(3);
134  $collection->add(4);
135 
136  $this->assertSame([3], $collection->slice(2, 1)->getValues());
137  }
138 
142  public static function provideElements(): array
143  {
144  $relation1 = new ilBuddySystemRelation(new ilBuddySystemUnlinkedRelationState(), 1, 2, false, time());
145  $relation2 = new ilBuddySystemRelation(new ilBuddySystemUnlinkedRelationState(), 3, 4, false, time());
146  $relation3 = new ilBuddySystemRelation(new ilBuddySystemUnlinkedRelationState(), 5, 6, false, time());
147  $relation4 = new ilBuddySystemRelation(new ilBuddySystemUnlinkedRelationState(), 7, 8, false, time());
148  $relation5 = new ilBuddySystemRelation(new ilBuddySystemUnlinkedRelationState(), 9, 10, false, time());
149 
150  return [
151  'indexed' => [[0, 1, 2, 3, 4, 5]],
152  'associative' => [['A' => 'a', 'B' => 'b', 'C' => 'c']],
153  'mixed' => [[0, 'A' => 'a', 1, 'B' => 'b', 2, 3]],
154  'relations' => [[$relation1, $relation2, $relation3, $relation4, $relation5]]
155  ];
156  }
157 }
Class ilBuddySystemUnlinkedRelationState.