Skip to content

Commit 4018aba

Browse files
committed
improved tests
1 parent 4062d6d commit 4018aba

10 files changed

+1209
-361
lines changed

tests/Utils/Arrays.associate().phpt

Lines changed: 201 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -22,187 +22,218 @@ $arr = [
2222
];
2323

2424

25-
Assert::same(
26-
[
27-
'John' => ['name' => 'John', 'age' => 11],
28-
'Mary' => ['name' => 'Mary', 'age' => null],
29-
'Paul' => ['name' => 'Paul', 'age' => 44],
30-
],
31-
Arrays::associate($arr, 'name'),
32-
);
33-
34-
Assert::same(
35-
[],
36-
Arrays::associate([], 'name'),
37-
);
38-
39-
Assert::same(
40-
[
41-
'John' => ['name' => 'John', 'age' => 11],
42-
'Mary' => ['name' => 'Mary', 'age' => null],
43-
'Paul' => ['name' => 'Paul', 'age' => 44],
44-
],
45-
Arrays::associate($arr, 'name='),
46-
);
47-
48-
Assert::same(
49-
['John' => 22, 'Mary' => null, 'Paul' => 44],
50-
Arrays::associate($arr, 'name=age'),
51-
);
52-
53-
Assert::same(// path as array
54-
['John' => 22, 'Mary' => null, 'Paul' => 44],
55-
Arrays::associate($arr, ['name', '=', 'age']),
56-
);
57-
58-
Assert::equal(
59-
[
60-
'John' => (object) [
61-
'name' => 'John',
62-
'age' => 11,
63-
],
64-
'Mary' => (object) [
65-
'name' => 'Mary',
66-
'age' => null,
67-
],
68-
'Paul' => (object) [
69-
'name' => 'Paul',
70-
'age' => 44,
25+
test('basic key association', function () use ($arr) {
26+
Assert::same(
27+
[
28+
'John' => ['name' => 'John', 'age' => 11],
29+
'Mary' => ['name' => 'Mary', 'age' => null],
30+
'Paul' => ['name' => 'Paul', 'age' => 44],
7131
],
72-
],
73-
Arrays::associate($arr, 'name->'),
74-
);
32+
Arrays::associate($arr, 'name'),
33+
);
34+
});
35+
7536

76-
Assert::equal(
77-
[
78-
11 => (object) [
37+
test('empty array', function () {
38+
Assert::same([], Arrays::associate([], 'name'));
39+
});
40+
41+
42+
test('key association with whole row as value', function () use ($arr) {
43+
Assert::same(
44+
[
7945
'John' => ['name' => 'John', 'age' => 11],
80-
],
81-
22 => (object) [
82-
'John' => ['name' => 'John', 'age' => 22],
83-
],
84-
'' => (object) [
8546
'Mary' => ['name' => 'Mary', 'age' => null],
86-
],
87-
44 => (object) [
8847
'Paul' => ['name' => 'Paul', 'age' => 44],
8948
],
90-
],
91-
Arrays::associate($arr, 'age->name'),
92-
);
93-
94-
Assert::equal(
95-
(object) [
96-
'John' => ['name' => 'John', 'age' => 11],
97-
'Mary' => ['name' => 'Mary', 'age' => null],
98-
'Paul' => ['name' => 'Paul', 'age' => 44],
99-
],
100-
Arrays::associate($arr, '->name'),
101-
);
102-
103-
Assert::equal(
104-
(object) [],
105-
Arrays::associate([], '->name'),
106-
);
107-
108-
Assert::same(
109-
[
110-
'John' => [
111-
11 => ['name' => 'John', 'age' => 11],
112-
22 => ['name' => 'John', 'age' => 22],
113-
],
114-
'Mary' => [
115-
'' => ['name' => 'Mary', 'age' => null],
116-
],
117-
'Paul' => [
118-
44 => ['name' => 'Paul', 'age' => 44],
119-
],
120-
],
121-
Arrays::associate($arr, 'name|age'),
122-
);
123-
124-
Assert::same(
125-
[
126-
'John' => ['name' => 'John', 'age' => 11],
127-
'Mary' => ['name' => 'Mary', 'age' => null],
128-
'Paul' => ['name' => 'Paul', 'age' => 44],
129-
],
130-
Arrays::associate($arr, 'name|'),
131-
);
132-
133-
Assert::same(
134-
[
135-
'John' => [
136-
['name' => 'John', 'age' => 11],
137-
['name' => 'John', 'age' => 22],
138-
],
139-
'Mary' => [
140-
['name' => 'Mary', 'age' => null],
141-
],
142-
'Paul' => [
143-
['name' => 'Paul', 'age' => 44],
49+
Arrays::associate($arr, 'name='),
50+
);
51+
});
52+
53+
54+
test('key-value pair association', function () use ($arr) {
55+
Assert::same(
56+
['John' => 22, 'Mary' => null, 'Paul' => 44],
57+
Arrays::associate($arr, 'name=age'),
58+
);
59+
});
60+
61+
62+
test('path as array', function () use ($arr) {
63+
Assert::same(
64+
['John' => 22, 'Mary' => null, 'Paul' => 44],
65+
Arrays::associate($arr, ['name', '=', 'age']),
66+
);
67+
});
68+
69+
70+
test('object result with key-based access', function () use ($arr) {
71+
Assert::equal(
72+
[
73+
'John' => (object) ['name' => 'John', 'age' => 11],
74+
'Mary' => (object) ['name' => 'Mary', 'age' => null],
75+
'Paul' => (object) ['name' => 'Paul', 'age' => 44],
14476
],
145-
],
146-
Arrays::associate($arr, 'name[]'),
147-
);
148-
149-
Assert::same(
150-
[
151-
['John' => ['name' => 'John', 'age' => 11]],
152-
['John' => ['name' => 'John', 'age' => 22]],
153-
['Mary' => ['name' => 'Mary', 'age' => null]],
154-
['Paul' => ['name' => 'Paul', 'age' => 44]],
155-
],
156-
Arrays::associate($arr, '[]name'),
157-
);
158-
159-
Assert::same(
160-
['John', 'John', 'Mary', 'Paul'],
161-
Arrays::associate($arr, '[]=name'),
162-
);
163-
164-
Assert::same(
165-
[
166-
'John' => [
167-
[11 => ['name' => 'John', 'age' => 11]],
168-
[22 => ['name' => 'John', 'age' => 22]],
77+
Arrays::associate($arr, 'name->'),
78+
);
79+
});
80+
81+
82+
test('nested object with property-based keys', function () use ($arr) {
83+
Assert::equal(
84+
[
85+
11 => (object) ['John' => ['name' => 'John', 'age' => 11]],
86+
22 => (object) ['John' => ['name' => 'John', 'age' => 22]],
87+
'' => (object) ['Mary' => ['name' => 'Mary', 'age' => null]],
88+
44 => (object) ['Paul' => ['name' => 'Paul', 'age' => 44]],
16989
],
170-
'Mary' => [
171-
['' => ['name' => 'Mary', 'age' => null]],
90+
Arrays::associate($arr, 'age->name'),
91+
);
92+
});
93+
94+
95+
test('object as root result', function () use ($arr) {
96+
Assert::equal(
97+
(object) [
98+
'John' => ['name' => 'John', 'age' => 11],
99+
'Mary' => ['name' => 'Mary', 'age' => null],
100+
'Paul' => ['name' => 'Paul', 'age' => 44],
172101
],
173-
'Paul' => [
174-
[44 => ['name' => 'Paul', 'age' => 44]],
102+
Arrays::associate($arr, '->name'),
103+
);
104+
105+
Assert::equal(
106+
(object) [],
107+
Arrays::associate([], '->name'),
108+
);
109+
});
110+
111+
112+
test('grouping with pipe operator', function () use ($arr) {
113+
Assert::same(
114+
[
115+
'John' => [
116+
11 => ['name' => 'John', 'age' => 11],
117+
22 => ['name' => 'John', 'age' => 22],
118+
],
119+
'Mary' => [
120+
'' => ['name' => 'Mary', 'age' => null],
121+
],
122+
'Paul' => [
123+
44 => ['name' => 'Paul', 'age' => 44],
124+
],
125+
],
126+
Arrays::associate($arr, 'name|age'),
127+
);
128+
});
129+
130+
131+
test('grouping with pipe - last value wins on collision', function () use ($arr) {
132+
Assert::same(
133+
[
134+
'John' => ['name' => 'John', 'age' => 11],
135+
'Mary' => ['name' => 'Mary', 'age' => null],
136+
'Paul' => ['name' => 'Paul', 'age' => 44],
175137
],
176-
],
177-
Arrays::associate($arr, 'name[]age'),
178-
);
179-
180-
Assert::same(
181-
$arr,
182-
Arrays::associate($arr, '[]'),
183-
);
184-
185-
// converts object to array
186-
Assert::same(
187-
$arr,
188-
Arrays::associate($arr = [
138+
Arrays::associate($arr, 'name|'),
139+
);
140+
});
141+
142+
143+
test('array grouping with brackets', function () use ($arr) {
144+
Assert::same(
145+
[
146+
'John' => [
147+
['name' => 'John', 'age' => 11],
148+
['name' => 'John', 'age' => 22],
149+
],
150+
'Mary' => [
151+
['name' => 'Mary', 'age' => null],
152+
],
153+
'Paul' => [
154+
['name' => 'Paul', 'age' => 44],
155+
],
156+
],
157+
Arrays::associate($arr, 'name[]'),
158+
);
159+
});
160+
161+
162+
test('prefix array with keyed items', function () use ($arr) {
163+
Assert::same(
164+
[
165+
['John' => ['name' => 'John', 'age' => 11]],
166+
['John' => ['name' => 'John', 'age' => 22]],
167+
['Mary' => ['name' => 'Mary', 'age' => null]],
168+
['Paul' => ['name' => 'Paul', 'age' => 44]],
169+
],
170+
Arrays::associate($arr, '[]name'),
171+
);
172+
});
173+
174+
175+
test('flat array with extracted values', function () use ($arr) {
176+
Assert::same(
177+
['John', 'John', 'Mary', 'Paul'],
178+
Arrays::associate($arr, '[]=name'),
179+
);
180+
});
181+
182+
183+
test('complex combination with nested arrays', function () use ($arr) {
184+
Assert::same(
185+
[
186+
'John' => [
187+
[11 => ['name' => 'John', 'age' => 11]],
188+
[22 => ['name' => 'John', 'age' => 22]],
189+
],
190+
'Mary' => [
191+
['' => ['name' => 'Mary', 'age' => null]],
192+
],
193+
'Paul' => [
194+
[44 => ['name' => 'Paul', 'age' => 44]],
195+
],
196+
],
197+
Arrays::associate($arr, 'name[]age'),
198+
);
199+
});
200+
201+
202+
test('identity transformation with empty brackets', function () use ($arr) {
203+
Assert::same($arr, Arrays::associate($arr, '[]'));
204+
});
205+
206+
207+
test('converts objects to arrays in input', function () {
208+
$arr = [
189209
(object) ['name' => 'John', 'age' => 11],
190210
(object) ['name' => 'John', 'age' => 22],
191211
(object) ['name' => 'Mary', 'age' => null],
192212
(object) ['name' => 'Paul', 'age' => 44],
193-
], '[]'),
194-
);
195-
196-
// allowes objects in keys
197-
Assert::equal(
198-
['2014-02-05 00:00:00' => new DateTime('2014-02-05')],
199-
Arrays::associate($arr = [
200-
['date' => new DateTime('2014-02-05')],
201-
], 'date=date'),
202-
);
203-
Assert::equal(
204-
(object) ['2014-02-05 00:00:00' => new DateTime('2014-02-05')],
205-
Arrays::associate($arr = [
206-
['date' => new DateTime('2014-02-05')],
207-
], '->date=date'),
208-
);
213+
];
214+
215+
Assert::same(
216+
[
217+
['name' => 'John', 'age' => 11],
218+
['name' => 'John', 'age' => 22],
219+
['name' => 'Mary', 'age' => null],
220+
['name' => 'Paul', 'age' => 44],
221+
],
222+
Arrays::associate($arr, '[]'),
223+
);
224+
});
225+
226+
227+
test('allows objects as keys and values', function () {
228+
$arr = [['date' => new DateTime('2014-02-05')]];
229+
230+
Assert::equal(
231+
['2014-02-05 00:00:00' => new DateTime('2014-02-05')],
232+
Arrays::associate($arr, 'date=date'),
233+
);
234+
235+
Assert::equal(
236+
(object) ['2014-02-05 00:00:00' => new DateTime('2014-02-05')],
237+
Arrays::associate($arr, '->date=date'),
238+
);
239+
});

0 commit comments

Comments
 (0)