Skip to content

Commit 3040e5f

Browse files
committed
the parameter argument from fromAssociative must always be set
1 parent 6cfabca commit 3040e5f

11 files changed

+51
-59
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ use Bakame\Http\StructuredFields\Item;
362362

363363
//@type SfItemInput ByteSequence|Token|DateTimeInterface|Stringable|string|int|float|bool
364364

365-
Item::fromAssociative(SfItemInput $value, Parameters|iterable<string, SfItemInput> $parameters = []): self;
365+
Item::fromAssociative(SfItemInput $value, Parameters|iterable<string, SfItemInput> $parameters): self;
366366
Item::fromPair(array{0:SfItemInput, 1:Parameters|iterable<array{0:string, 1:SfItemInput}>} $pair): self;
367367

368368
InnerList::fromAssociative(iterable<SfItemInput> $value, Parameters|iterable<string, SfItemInput> $parameters): self;

src/Dictionary.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ private static function filterMember(mixed $member): object
5454
$member instanceof ParameterAccess &&
5555
($member instanceof MemberList || $member instanceof ValueAccess) => $member,
5656
is_iterable($member) => InnerList::new(...$member),
57-
default => Item::fromAssociative($member),
57+
default => Item::new($member),
5858
};
5959
}
6060

src/DictionaryTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public function it_fails_to_add_an_item_with_wrong_key(): void
119119
{
120120
$this->expectException(SyntaxError::class);
121121

122-
Dictionary::fromAssociative(['bébé'=> Item::fromAssociative(false)]);
122+
Dictionary::fromAssociative(['bébé'=> Item::false()]);
123123
}
124124

125125
#[Test]
@@ -292,6 +292,6 @@ public function it_forbids_adding_members_using_the_array_access_interface(): vo
292292
{
293293
$this->expectException(LogicException::class);
294294

295-
Dictionary::fromPairs([['foobar', 'foobar'], ['zero', 0]])['foobar'] = Item::fromAssociative(false);
295+
Dictionary::fromPairs([['foobar', 'foobar'], ['zero', 0]])['foobar'] = Item::false();
296296
}
297297
}

src/InnerList.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ private static function filterMember(mixed $member): object
4545
{
4646
return match (true) {
4747
$member instanceof ValueAccess && $member instanceof ParameterAccess => $member,
48-
!$member instanceof StructuredField => Item::fromAssociative($member),
48+
!$member instanceof StructuredField => Item::new($member),
4949
default => throw new InvalidArgument('Expecting a "'.ValueAccess::class.'" instance; received a "'.$member::class.'" instead.'),
5050
};
5151
}
@@ -99,7 +99,7 @@ public static function fromPair(array $pair): self
9999
* @param iterable<SfItemInput> $value
100100
* @param iterable<string, SfItemInput> $parameters
101101
*/
102-
public static function fromAssociative(iterable $value, iterable $parameters = []): self
102+
public static function fromAssociative(iterable $value, iterable $parameters): self
103103
{
104104
if (!$parameters instanceof Parameters) {
105105
$parameters = Parameters::fromAssociative($parameters);

src/InnerListTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public function it_fails_to_insert_unknown_index_via_the_array_access_interface(
159159
{
160160
$this->expectException(StructuredFieldError::class);
161161

162-
InnerList::new()->insert(0, Item::fromAssociative(42.0));
162+
InnerList::new()->insert(0, Item::new(42.0));
163163
}
164164

165165
#[Test]
@@ -230,7 +230,7 @@ public function it_can_create_and_return_an_array_of_pairs(): void
230230
$instance = InnerList::fromPair([[42, 'forty-two'], [['foo', 'bar']]]);
231231
$res = $instance->toPair();
232232

233-
self::assertEquals([Item::fromAssociative(42), Item::fromAssociative('forty-two')], $res[0]);
233+
self::assertEquals([Item::new(42), Item::new('forty-two')], $res[0]);
234234
self::assertEquals(Parameters::fromAssociative(['foo' => 'bar']), $res[1]);
235235
self::assertEquals($instance, InnerList::fromPair($res));
236236
}
@@ -281,7 +281,7 @@ public function it_forbids_adding_members_using_the_array_access_interface(): vo
281281
{
282282
$this->expectException(LogicException::class);
283283

284-
InnerList::new('foobar', 'foobar', 'zero', 0)[0] = Item::fromAssociative(false);
284+
InnerList::new('foobar', 'foobar', 'zero', 0)[0] = Item::false();
285285
}
286286

287287

@@ -293,7 +293,7 @@ public function it_can_returns_the_container_member_keys(): void
293293
self::assertSame([], $instance->keys());
294294

295295
$newInstance = $instance
296-
->push(Item::fromAssociative(false), Item::fromAssociative(true));
296+
->push(Item::false(), Item::true());
297297

298298
self::assertSame([0, 1], $newInstance->keys());
299299

src/Item.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public static function fromHttpValue(Stringable|string $httpValue): self
5555
*
5656
* @param iterable<string, SfItemInput> $parameters
5757
*/
58-
public static function fromAssociative(mixed $value, iterable $parameters = []): self
58+
public static function fromAssociative(mixed $value, iterable $parameters): self
5959
{
6060
if (!$parameters instanceof Parameters) {
6161
$parameters = Parameters::fromAssociative($parameters);

src/ItemTest.php

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function it_fails_to_instantiate_an_item(mixed $value): void
3636
{
3737
$this->expectException(SyntaxError::class);
3838

39-
Item::fromAssociative($value);
39+
Item::new($value);
4040
}
4141

4242
/**
@@ -100,7 +100,7 @@ public function it_updates_item(ValueAccess|ByteSequence|Token|DateTimeInterface
100100
*/
101101
public static function provideFrom1stArgument(): iterable
102102
{
103-
$item = Item::fromAssociative(42);
103+
$item = Item::new(42);
104104

105105
return [
106106
'decimal' => ['value' => 42.0, 'expected' => '42.0'],
@@ -131,8 +131,8 @@ public function it_instantiates_a_token(): void
131131
public function it_instantiates_a_date(): void
132132
{
133133
$item = Item::fromHttpValue('@1583349795');
134-
self::assertEquals($item, Item::fromAssociative(new DateTimeImmutable('2020-03-04 19:23:15')));
135-
self::assertEquals($item, Item::fromAssociative(new DateTime('2020-03-04 19:23:15')));
134+
self::assertEquals($item, Item::new(new DateTimeImmutable('2020-03-04 19:23:15')));
135+
self::assertEquals($item, Item::new(new DateTime('2020-03-04 19:23:15')));
136136
self::assertEquals($item, Item::fromDate(new DateTime('2020-03-04 19:23:15')));
137137
self::assertEquals($item, Item::fromTimestamp(1583349795));
138138
self::assertEquals($item, Item::fromDateFormat(DateTimeInterface::RFC822, 'Wed, 04 Mar 20 19:23:15 +0000'));
@@ -207,15 +207,15 @@ public function it_fails_to_instantiate_a_date_with_an_invalid_datetime(): void
207207
#[Test]
208208
public function it_instantiates_a_decimal(): void
209209
{
210-
self::assertSame(42.0, Item::fromAssociative(42.0)->value());
210+
self::assertSame(42.0, Item::new(42.0)->value());
211211
self::assertSame(42.0, Item::fromDecimal(42)->value());
212212
self::assertSame(42.0, Item::fromDecimal(42.0)->value());
213213
}
214214

215215
#[Test]
216216
public function it_instantiates_a_integer(): void
217217
{
218-
self::assertSame(42, Item::fromAssociative(42)->value());
218+
self::assertSame(42, Item::new(42)->value());
219219
self::assertSame(42, Item::fromInteger(42.9)->value());
220220
self::assertSame(42, Item::fromInteger(42.0)->value());
221221
self::assertSame(42, Item::fromInteger(42)->value());
@@ -224,9 +224,9 @@ public function it_instantiates_a_integer(): void
224224
#[Test]
225225
public function it_instantiates_a_boolean(): void
226226
{
227-
self::assertTrue(Item::fromAssociative(true)->value());
227+
self::assertTrue(Item::new(true)->value());
228228
self::assertTrue(Item::true()->value());
229-
self::assertFalse(Item::fromAssociative(false)->value());
229+
self::assertFalse(Item::new(false)->value());
230230
self::assertFalse(Item::false()->value());
231231
}
232232

@@ -235,7 +235,7 @@ public function it_instantiates_a_binary(): void
235235
{
236236
$byteSequence = ByteSequence::fromDecoded('foobar');
237237

238-
self::assertEquals($byteSequence, Item::fromAssociative(ByteSequence::fromDecoded('foobar'))->value());
238+
self::assertEquals($byteSequence, Item::new(ByteSequence::fromDecoded('foobar'))->value());
239239
self::assertEquals($byteSequence, Item::fromDecodedByteSequence('foobar')->value());
240240
self::assertEquals($byteSequence, Item::fromEncodedByteSequence('Zm9vYmFy')->value());
241241
}
@@ -260,31 +260,31 @@ public static function itemTypeProvider(): iterable
260260
{
261261
return [
262262
'boolean' => [
263-
'item' => Item::fromAssociative(false),
263+
'item' => Item::new(false),
264264
'expectedType' => Type::Boolean,
265265
],
266266
'integer' => [
267-
'item' => Item::fromAssociative(42),
267+
'item' => Item::new(42),
268268
'expectedType' => Type::Integer,
269269
],
270270
'decimal' => [
271-
'item' => Item::fromAssociative(42.0),
271+
'item' => Item::new(42.0),
272272
'expectedType' => Type::Decimal,
273273
],
274274
'string' => [
275-
'item' => Item::fromAssociative('42'),
275+
'item' => Item::new('42'),
276276
'expectedType' => Type::String,
277277
],
278278
'token' => [
279-
'item' => Item::fromAssociative(Token::fromString('forty-two')),
279+
'item' => Item::new(Token::fromString('forty-two')),
280280
'expectedType' => Type::Token,
281281
],
282282
'byte' => [
283-
'item' => Item::fromAssociative(ByteSequence::fromDecoded('😊')),
283+
'item' => Item::new(ByteSequence::fromDecoded('😊')),
284284
'expectedType' => Type::ByteSequence,
285285
],
286286
'stringable object' => [
287-
'item' => Item::fromAssociative(new class() implements Stringable {
287+
'item' => Item::new(new class() implements Stringable {
288288
public function __toString(): string
289289
{
290290
return '42';
@@ -293,11 +293,11 @@ public function __toString(): string
293293
'expectedType' => Type::String,
294294
],
295295
'date-immutable' => [
296-
'item' => Item::fromAssociative(new DateTimeImmutable('2020-07-12 13:37:00')),
296+
'item' => Item::new(new DateTimeImmutable('2020-07-12 13:37:00')),
297297
'expectedType' => Type::Date,
298298
],
299299
'date-interface' => [
300-
'item' => Item::fromAssociative(new DateTime('2020-07-12 13:37:00')),
300+
'item' => Item::new(new DateTime('2020-07-12 13:37:00')),
301301
'expectedType' => Type::Date,
302302
],
303303
];
@@ -350,7 +350,7 @@ public function it_fails_to_access_unknown_parameter_values(): void
350350
#[Test]
351351
public function it_can_create_an_item_from_a_array_of_pairs(): void
352352
{
353-
$instance1 = Item::fromAssociative(Token::fromString('babayaga'));
353+
$instance1 = Item::new(Token::fromString('babayaga'));
354354
$instance2 = Item::fromPair([Token::fromString('babayaga')]);
355355
$instance3 = Item::fromPair([Token::fromString('babayaga'), []]);
356356

src/OuterListTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function it_can_add_or_remove_members(): void
4646
self::assertCount(1, $deletedInstance);
4747
self::assertFalse($deletedInstance->has(1));
4848

49-
$newInstance = $deletedInstance->push(Item::fromAssociative('BarBaz'));
49+
$newInstance = $deletedInstance->push(Item::fromString('BarBaz'));
5050
$member = $newInstance->get(1);
5151

5252
self::assertCount(2, $newInstance);
@@ -81,15 +81,15 @@ public function it_fails_to_replace_invalid_index(): void
8181
{
8282
$this->expectException(InvalidOffset::class);
8383

84-
OuterList::new()->replace(0, Item::fromAssociative(ByteSequence::fromDecoded('Hello World')));
84+
OuterList::new()->replace(0, Item::new(ByteSequence::fromDecoded('Hello World')));
8585
}
8686

8787
#[Test]
8888
public function it_fails_to_insert_at_an_invalid_index(): void
8989
{
9090
$this->expectException(InvalidOffset::class);
9191

92-
OuterList::new()->insert(3, Item::fromAssociative(ByteSequence::fromDecoded('Hello World')));
92+
OuterList::new()->insert(3, Item::new(ByteSequence::fromDecoded('Hello World')));
9393
}
9494

9595
#[Test]
@@ -163,7 +163,7 @@ public function it_can_access_the_item_value(): void
163163
self::assertInstanceOf(InnerList::class, $structuredField->get(-1));
164164
self::assertFalse($structuredField->has('foobar'));
165165

166-
self::assertEquals(Item::fromAssociative('barbaz'), $structuredField->push('barbaz')->get(-1));
166+
self::assertEquals(Item::fromString('barbaz'), $structuredField->push('barbaz')->get(-1));
167167
}
168168

169169
#[Test]
@@ -190,7 +190,7 @@ public function it_forbids_adding_members_using_the_array_access_interface(): vo
190190
{
191191
$this->expectException(LogicException::class);
192192

193-
OuterList::new('foobar', 'foobar', 'zero', 0)[0] = Item::fromAssociative(false);
193+
OuterList::new('foobar', 'foobar', 'zero', 0)[0] = Item::false();
194194
}
195195

196196

src/Parameters.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ private static function filterMember(mixed $member): object
5151
{
5252
return match (true) {
5353
$member instanceof ValueAccess && $member instanceof ParameterAccess && $member->parameters()->hasNoMembers() => $member,
54-
!$member instanceof StructuredField => Item::fromAssociative($member),
54+
!$member instanceof StructuredField => Item::new($member),
5555
default => throw new InvalidArgument('Parameters instances can only contain bare items.'),
5656
};
5757
}

src/ParametersTest.php

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,6 @@ public function test_it_can_be_instantiated_with_key_value_pairs(): void
4949
);
5050
}
5151

52-
#[Test]
53-
public function it_fails_to_instantiate_a_pair_with_the_associative_constructor(): void
54-
{
55-
$this->expectException(SyntaxError::class);
56-
57-
Parameters::fromAssociative([['a', 'b']]); // @phpstan-ignore-line
58-
}
59-
6052
#[Test]
6153
public function it_fails_to_instantiate_with_an_item_containing_already_parameters(): void
6254
{
@@ -65,7 +57,7 @@ public function it_fails_to_instantiate_with_an_item_containing_already_paramete
6557
Parameters::fromAssociative([
6658
'foo' => Item::fromAssociative(
6759
true,
68-
Parameters::fromAssociative(['bar' => Item::fromAssociative(false)])
60+
Parameters::fromAssociative(['bar' => Item::false()])
6961
),
7062
]);
7163
}
@@ -91,8 +83,8 @@ public function it_can_add_or_remove_members(): void
9183
self::assertFalse($deletedInstance->has('boolean'));
9284
self::assertFalse($deletedInstance->hasPair(1));
9385

94-
$addedInstance = $deletedInstance->append('foobar', Item::fromAssociative('BarBaz'));
95-
self::assertSame($addedInstance, $addedInstance->append('foobar', Item::fromAssociative('BarBaz')));
86+
$addedInstance = $deletedInstance->append('foobar', Item::fromString('BarBaz'));
87+
self::assertSame($addedInstance, $addedInstance->append('foobar', Item::new('BarBaz')));
9688
self::assertTrue($addedInstance->hasPair(1));
9789
self::assertFalse($addedInstance->hasPair(3, 23));
9890
self::assertFalse($addedInstance->hasPair());
@@ -126,7 +118,7 @@ public function it_fails_to_add_an_item_with_wrong_key(): void
126118
{
127119
$this->expectException(SyntaxError::class);
128120

129-
Parameters::fromAssociative(['bébé'=> Item::fromAssociative(false)]);
121+
Parameters::fromAssociative(['bébé'=> Item::false()]);
130122
}
131123

132124
#[Test]
@@ -195,14 +187,14 @@ public function it_can_merge_one_or_more_instances(): void
195187
#[Test]
196188
public function it_can_merge_two_or_more_dictionaries_different_result(): void
197189
{
198-
$instance1 = Parameters::fromAssociative(['a' => Item::fromAssociative(false)]);
199-
$instance2 = Parameters::fromAssociative(['b' => Item::fromAssociative(true)]);
200-
$instance3 = Parameters::fromAssociative(['a' => Item::fromAssociative(42)]);
190+
$instance1 = Parameters::fromAssociative(['a' => Item::false()]);
191+
$instance2 = Parameters::fromAssociative(['b' => Item::true()]);
192+
$instance3 = Parameters::fromAssociative(['a' => Item::fromInteger(42)]);
201193

202194
$instance4 = $instance3->mergeAssociative($instance2, $instance1);
203195

204-
self::assertEquals(Item::fromAssociative(false), $instance4->get('a'));
205-
self::assertEquals(Item::fromAssociative(true), $instance4->get('b'));
196+
self::assertEquals(Item::false(), $instance4->get('a'));
197+
self::assertEquals(Item::true(), $instance4->get('b'));
206198
}
207199

208200
#[Test]
@@ -230,14 +222,14 @@ public function it_can_merge_one_or_more_instances_using_pairs(): void
230222
#[Test]
231223
public function it_can_merge_without_pairs_and_not_throw(): void
232224
{
233-
self::assertCount(1, Parameters::fromAssociative(['a' => Item::fromAssociative(false)])->mergePairs());
225+
self::assertCount(1, Parameters::fromAssociative(['a' => Item::false()])->mergePairs());
234226
}
235227

236228
#[Test]
237229
public function it_can_merge_dictionary_instances_via_pairs_or_associative(): void
238230
{
239-
$instance1 = Parameters::fromAssociative(['a' => Item::fromAssociative(false)]);
240-
$instance2 = Parameters::fromAssociative(['b' => Item::fromAssociative(true)]);
231+
$instance1 = Parameters::fromAssociative(['a' => Item::false()]);
232+
$instance2 = Parameters::fromAssociative(['b' => Item::true()]);
241233

242234
$instance3 = clone $instance1;
243235
$instance4 = clone $instance2;
@@ -332,6 +324,6 @@ public function it_forbids_adding_members_using_the_array_access_interface(): vo
332324
{
333325
$this->expectException(LogicException::class);
334326

335-
Parameters::fromPairs([['foobar', 'foobar'], ['zero', 0]])['foobar'] = Item::fromAssociative(false);
327+
Parameters::fromPairs([['foobar', 'foobar'], ['zero', 0]])['foobar'] = Item::false();
336328
}
337329
}

0 commit comments

Comments
 (0)