CRM_Utils_Array - Add pathGet() and pathSet()
[civicrm-core.git] / tests / phpunit / CRM / Utils / ArrayTest.php
CommitLineData
6a488035
TO
1<?php
2require_once 'CiviTest/CiviUnitTestCase.php';
aba1cd8b
EM
3
4/**
5 * Class CRM_Utils_ArrayTest
6 */
6a488035 7class CRM_Utils_ArrayTest extends CiviUnitTestCase {
6a488035 8
00be9182 9 public function testIndexArray() {
6a488035
TO
10 $inputs = array();
11 $inputs[] = array(
12 'lang' => 'en',
13 'msgid' => 'greeting',
17deafad 14 'familiar' => FALSE,
21dfd5f5 15 'value' => 'Hello',
6a488035
TO
16 );
17 $inputs[] = array(
18 'lang' => 'en',
19 'msgid' => 'parting',
21dfd5f5 20 'value' => 'Goodbye',
6a488035
TO
21 );
22 $inputs[] = array(
23 'lang' => 'fr',
24 'msgid' => 'greeting',
21dfd5f5 25 'value' => 'Bon jour',
6a488035
TO
26 );
27 $inputs[] = array(
28 'lang' => 'fr',
29 'msgid' => 'parting',
21dfd5f5 30 'value' => 'Au revoir',
6a488035
TO
31 );
32 $inputs[] = array(
33 'lang' => 'en',
34 'msgid' => 'greeting',
17deafad 35 'familiar' => TRUE,
21dfd5f5 36 'value' => 'Hey',
6a488035 37 );
928c5201
TO
38 $inputs[] = array(
39 'msgid' => 'greeting',
40 'familiar' => TRUE,
21dfd5f5 41 'value' => 'Universal greeting',
928c5201 42 );
6a488035
TO
43
44 $byLangMsgid = CRM_Utils_Array::index(array('lang', 'msgid'), $inputs);
45 $this->assertEquals($inputs[4], $byLangMsgid['en']['greeting']);
46 $this->assertEquals($inputs[1], $byLangMsgid['en']['parting']);
47 $this->assertEquals($inputs[2], $byLangMsgid['fr']['greeting']);
48 $this->assertEquals($inputs[3], $byLangMsgid['fr']['parting']);
928c5201 49 $this->assertEquals($inputs[5], $byLangMsgid[NULL]['greeting']);
6a488035
TO
50 }
51
00be9182 52 public function testCollect() {
6a488035
TO
53 $arr = array(
54 array('catWord' => 'cat', 'dogWord' => 'dog'),
55 array('catWord' => 'chat', 'dogWord' => 'chien'),
56 array('catWord' => 'gato'),
57 );
58 $expected = array('cat', 'chat', 'gato');
59 $this->assertEquals($expected, CRM_Utils_Array::collect('catWord', $arr));
60
61 $arr = array();
6c6e6187
TO
62 $arr['en'] = (object) array('catWord' => 'cat', 'dogWord' => 'dog');
63 $arr['fr'] = (object) array('catWord' => 'chat', 'dogWord' => 'chien');
64 $arr['es'] = (object) array('catWord' => 'gato');
6a488035
TO
65 $expected = array('en' => 'cat', 'fr' => 'chat', 'es' => 'gato');
66 $this->assertEquals($expected, CRM_Utils_Array::collect('catWord', $arr));
67 }
68
00be9182 69 public function testProduct0() {
17deafad
TO
70 $actual = CRM_Utils_Array::product(
71 array(),
72 array('base data' => 1)
73 );
74 $this->assertEquals(array(
75 array('base data' => 1),
76 ), $actual);
77 }
78
00be9182 79 public function testProduct1() {
17deafad
TO
80 $actual = CRM_Utils_Array::product(
81 array('dim1' => array('a', 'b')),
82 array('base data' => 1)
83 );
84 $this->assertEquals(array(
85 array('base data' => 1, 'dim1' => 'a'),
86 array('base data' => 1, 'dim1' => 'b'),
87 ), $actual);
88 }
89
00be9182 90 public function testProduct3() {
17deafad
TO
91 $actual = CRM_Utils_Array::product(
92 array('dim1' => array('a', 'b'), 'dim2' => array('alpha', 'beta'), 'dim3' => array('one', 'two')),
93 array('base data' => 1)
94 );
95 $this->assertEquals(array(
96 array('base data' => 1, 'dim1' => 'a', 'dim2' => 'alpha', 'dim3' => 'one'),
97 array('base data' => 1, 'dim1' => 'a', 'dim2' => 'alpha', 'dim3' => 'two'),
98 array('base data' => 1, 'dim1' => 'a', 'dim2' => 'beta', 'dim3' => 'one'),
99 array('base data' => 1, 'dim1' => 'a', 'dim2' => 'beta', 'dim3' => 'two'),
100 array('base data' => 1, 'dim1' => 'b', 'dim2' => 'alpha', 'dim3' => 'one'),
101 array('base data' => 1, 'dim1' => 'b', 'dim2' => 'alpha', 'dim3' => 'two'),
102 array('base data' => 1, 'dim1' => 'b', 'dim2' => 'beta', 'dim3' => 'one'),
103 array('base data' => 1, 'dim1' => 'b', 'dim2' => 'beta', 'dim3' => 'two'),
104 ), $actual);
105 }
82376c19 106
00be9182 107 public function testIsSubset() {
82376c19
TO
108 $this->assertTrue(CRM_Utils_Array::isSubset(array(), array()));
109 $this->assertTrue(CRM_Utils_Array::isSubset(array('a'), array('a')));
6c6e6187
TO
110 $this->assertTrue(CRM_Utils_Array::isSubset(array('a'), array('b', 'a', 'c')));
111 $this->assertTrue(CRM_Utils_Array::isSubset(array('b', 'd'), array('a', 'b', 'c', 'd')));
82376c19
TO
112 $this->assertFalse(CRM_Utils_Array::isSubset(array('a'), array()));
113 $this->assertFalse(CRM_Utils_Array::isSubset(array('a'), array('b')));
6c6e6187 114 $this->assertFalse(CRM_Utils_Array::isSubset(array('a'), array('b', 'c', 'd')));
82376c19 115 }
f63d0d11 116
00be9182 117 public function testRemove() {
f63d0d11
CW
118 $data = array(
119 'one' => 1,
120 'two' => 2,
121 'three' => 3,
122 'four' => 4,
123 'five' => 5,
124 'six' => 6,
125 );
126 CRM_Utils_Array::remove($data, 'one', 'two', array('three', 'four'), 'five');
127 $this->assertEquals($data, array('six' => 6));
128 }
96025800 129
393f41dd
TO
130 public function testGetSetPathParts() {
131 $arr = array(
132 'one' => '1',
133 'two' => array(
134 'half' => 2,
135 ),
136 );
137 $this->assertEquals('1', CRM_Utils_Array::pathGet($arr, array('one')));
138 $this->assertEquals('2', CRM_Utils_Array::pathGet($arr, array('two', 'half')));
139 $this->assertEquals(NULL, CRM_Utils_Array::pathGet($arr, array('zoo', 'half')));
140 CRM_Utils_Array::pathSet($arr, array('zoo', 'half'), '3');
141 $this->assertEquals(3, CRM_Utils_Array::pathGet($arr, array('zoo', 'half')));
142 $this->assertEquals(3, $arr['zoo']['half']);
143 }
144
6a488035 145}