2323use ValueError ;
2424
2525use function date_create ;
26+ use function http_build_query ;
2627use function tmpfile ;
2728
2829use const PHP_QUERY_RFC1738 ;
@@ -807,6 +808,11 @@ public function test_it_throws_if_a_non_backed_enum_is_given_in_enum_native_mode
807808 QueryString::compose (['pure ' => PureEnum::One], composeMode: QueryComposeMode::EnumCompatible);
808809 }
809810
811+ public function test_it_silently_ignore_if_a_non_backed_enum_is_given_in_enum_lenient_mode (): void
812+ {
813+ self ::assertSame ('foo=bar ' , QueryString::compose (['pure ' => PureEnum::One, 'foo ' => 'bar ' ], composeMode: QueryComposeMode::EnumLenient));
814+ }
815+
810816 public function test_it_throws_if_a_non_backed_enum_is_given_in_strict_mode (): void
811817 {
812818 $ this ->expectException (TypeError::class);
@@ -827,6 +833,7 @@ public function test_it_handles_backed_enums(): void
827833
828834 self ::assertSame ((PHP_VERSION_ID < 80400 ? $ compatible : $ enumNative ).'&baz=1 ' , QueryString::compose ($ params , composeMode: QueryComposeMode::Native));
829835 self ::assertSame ($ compatible .'&baz=1 ' , QueryString::compose ($ params , composeMode: QueryComposeMode::Compatible));
836+ self ::assertSame ($ enumNative .'&baz=1 ' , QueryString::compose ($ params , composeMode: QueryComposeMode::EnumLenient));
830837 self ::assertSame ($ enumNative .'&baz=1 ' , QueryString::compose ($ params , composeMode: QueryComposeMode::EnumCompatible));
831838 self ::assertSame ($ enumNative .'&baz=1 ' , QueryString::compose ($ params , composeMode: QueryComposeMode::Safe));
832839
@@ -836,6 +843,7 @@ public function test_it_can_handles_empty_array(): void
836843 {
837844 self ::assertSame ('' , QueryString::compose ([], composeMode: QueryComposeMode::Native));
838845 self ::assertSame ('' , QueryString::compose ([], composeMode: QueryComposeMode::Compatible));
846+ self ::assertSame ('' , QueryString::compose ([], composeMode: QueryComposeMode::EnumLenient));
839847 self ::assertSame ('' , QueryString::compose ([], composeMode: QueryComposeMode::EnumCompatible));
840848 self ::assertNull (QueryString::compose ([], composeMode: QueryComposeMode::Safe));
841849 }
@@ -847,6 +855,18 @@ public function test_it_can_convert_list_without_indices_in_safe_mode(): void
847855 self ::assertSame ('a%5B%5D=foo&a%5B%5D=0&a%5B%5D=1.23 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::Safe));
848856 self ::assertSame ('a%5B0%5D=foo&a%5B1%5D=0&a%5B2%5D=1.23 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::Native));
849857 }
858+
859+ public function test_it_can_handle_null_value_differently_with_composed_mode (): void
860+ {
861+ $ data = ['module ' => null , 'action ' => '' , 'page ' => true ];
862+
863+ self ::assertSame ('module&action=&page=1 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::Safe));
864+ self ::assertSame ('action=&page=1 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::EnumLenient));
865+ self ::assertSame ('action=&page=1 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::EnumCompatible));
866+ self ::assertSame ('action=&page=1 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::Compatible));
867+ self ::assertSame ('action=&page=1 ' , QueryString::compose ($ data , composeMode: QueryComposeMode::Native));
868+ self ::assertSame ('action=&page=1 ' , http_build_query ($ data ));
869+ }
850870}
851871
852872enum PureEnum
0 commit comments