From 754fe419c4a504560b3e94e1be66c83f17fee99f Mon Sep 17 00:00:00 2001 From: ignace nyamagana butera Date: Mon, 8 Jul 2024 20:13:47 +0200 Subject: [PATCH] Improve type casting --- components/Components/SchemeTest.php | 14 +++++++++----- uri/Uri.php | 11 ++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/components/Components/SchemeTest.php b/components/Components/SchemeTest.php index ad0bebcb..a143c191 100644 --- a/components/Components/SchemeTest.php +++ b/components/Components/SchemeTest.php @@ -111,14 +111,18 @@ public static function getURIProvider(): iterable public function it_can_detect_information_about_special_schemes( ?string $scheme, bool $isHttp, + bool $isWebsocket, bool $isSsl, bool $isSpecial, Port $defaultPort, ): void { - self::assertSame($isHttp, Scheme::new($scheme)->isHttp()); - self::assertSame($isSsl, Scheme::new($scheme)->isSsl()); - self::assertSame($isSpecial, Scheme::new($scheme)->isSpecial()); - self::assertSame($defaultPort, Scheme::new($scheme)->defaultPort()); + $schemeObject = Scheme::new($scheme); + + self::assertSame($isHttp, $schemeObject->isHttp()); + self::assertSame($isWebsocket, $schemeObject->isWebsocket()); + self::assertSame($isSsl, $schemeObject->isSsl()); + self::assertSame($isSpecial, $schemeObject->isSpecial()); + self::assertSame($defaultPort, $schemeObject->defaultPort()); } public static function getSchemeInfoProvider(): \Generator @@ -135,7 +139,7 @@ public static function getSchemeInfoProvider(): \Generator yield 'detect an WSS URL' => [ 'scheme' => 'wss', 'isHttp' => false, - 'isWebsocket' => false, + 'isWebsocket' => true, 'isSsl' => true, 'isSpecial' => true, Port::new(443), diff --git a/uri/Uri.php b/uri/Uri.php index 6b0e4901..b406ff9f 100644 --- a/uri/Uri.php +++ b/uri/Uri.php @@ -1121,16 +1121,17 @@ public function withUserInfo( Stringable|string|null $user, #[SensitiveParameter] Stringable|string|null $password = null ): UriInterface { - $user = Encoder::encodeUser($this->filterString($user)); - $password = Encoder::encodePassword($this->filterString($password)); - $userInfo = ('' !== $user) ? $this->formatUserInfo($user, $password) : null; + $userInfo = ('' !== $user) ? $this->formatUserInfo( + Encoder::encodeUser($this->filterString($user)), + Encoder::encodePassword($this->filterString($password)) + ) : null; return match ($userInfo) { $this->userInfo => $this, default => new self( $this->scheme, - $user, - $password, + $user instanceof Stringable ? $user->__toString() : $user, + $password instanceof Stringable ? $password->__toString() : $password, $this->host, $this->port, $this->path,