ArraysTest::testSet()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
nc 1
nop 0
dl 0
loc 19
rs 9.9
c 0
b 0
f 0
1
<?php declare(strict_types = 1);
2
3
namespace Apicart\Utils\Tests\Arrays;
4
5
use Apicart\Utils\Arrays\Arrays;
6
use PHPUnit\Framework\TestCase;
7
8
final class ArraysTest extends TestCase
9
{
10
11
	public function testGet(): void
12
	{
13
		$data = [
14
			'id' => 12,
15
			'tags' => ['first', 'second', 'third'],
16
			'parameters' => [
17
				[
18
					'key' => 'billingAddress',
19
					'value' => [
20
						'firstName' => 'John',
21
						'lastName' => 'Doe',
22
					],
23
				],
24
				[
25
					'key' => 'paymentMethod',
26
					'value' => 'PPL',
27
				],
28
			],
29
			'tree' => [
30
				'left' => [
31
					'node' => 'Left node',
32
				],
33
				'right' => [
34
					'node' => 'Right node',
35
				],
36
			],
37
		];
38
39
		self::assertSame(12, Arrays::get($data, 'id'));
40
		self::assertSame('second', Arrays::get($data, 'tags.1'));
41
		self::assertSame('John', Arrays::get($data, 'parameters.key:billingAddress.value.firstName'));
42
		self::assertSame('PPL', Arrays::get($data, 'parameters.key:paymentMethod.value'));
43
		self::assertSame('Right node', Arrays::get($data, 'tree.right.node'));
44
45
		self::assertSame(null, Arrays::get($data, 'tree.center.node'));
46
		self::assertSame('Default value', Arrays::get($data, 'tree.center.node', 'Default value'));
47
	}
48
49
50
	public function testGetReference(): void
51
	{
52
		$data = [
53
			'id' => 12,
54
			'tree' => [
55
				'left' => [
56
					'node' => 'Left node',
57
				],
58
			],
59
		];
60
61
		$nodeReference = &$data['tree']['left']['node'];
62
		self::assertSame($nodeReference, Arrays::getReference($data, 'tree.left.node'));
63
		self::assertSame($nodeReference, Arrays::getReference($data, ['tree', 'left', 'node']));
64
65
		$idReference = & Arrays::getReference($data, 'id');
66
		$idReference = 10;
67
		self::assertSame($idReference, $data['id']);
68
	}
69
70
71
	public function testSet(): void
72
	{
73
		$data = [
74
			'id' => 12,
75
			'tree' => [
76
				'left' => [
77
					'node' => 'Left node',
78
				],
79
			],
80
		];
81
82
		$result = Arrays::set($data, 'id', 1);
83
		self::assertSame(1, $result['id']);
84
85
		$result = Arrays::set($data, 'tree.left.position', 3);
86
		self::assertSame(3, $result['tree']['left']['position']);
87
88
		$result = Arrays::set($data, 'foo', 'bar');
89
		self::assertSame('bar', $result['foo']);
90
	}
91
92
93
	public function testMerge(): void
94
	{
95
		$one = [
96
			'a' => 1,
97
			'b' => [1, 2, 3],
98
			'c' => false,
99
		];
100
		$two = [
101
			'c' => true,
102
			'd' => ['a'],
103
		];
104
105
		$result = Arrays::merge($two, $one);
106
107
		self::assertSame([
108
			'a' => 1,
109
			'b' => [1, 2, 3],
110
			'c' => true,
111
			'd' => ['a'],
112
		], $result);
113
	}
114
115
}
116