@@ -654,4 +654,143 @@ public function testSetCustomOption(): void
654654        $ restoredfromArray ($ array
655655        $ this assertEquals ($ customOptions$ restoredgetCustomOptions ());
656656    }
657+ 
658+     /** 
659+      * Tests includeOutputModality method. 
660+      * 
661+      * @return void 
662+      */ 
663+     public  function  testIncludeOutputModality (): void 
664+     {
665+         $ confignew  ModelConfig ();
666+ 
667+         // Test adding modality to null output modalities 
668+         $ this assertNull ($ configgetOutputModalities ());
669+         $ configincludeOutputModality (ModalityEnum::text ());
670+         $ modalities$ configgetOutputModalities ();
671+         $ this assertCount (1 , $ modalities
672+         $ this assertTrue ($ modalities0 ]->isText ());
673+ 
674+         // Test adding a different modality 
675+         $ configincludeOutputModality (ModalityEnum::image ());
676+         $ modalities$ configgetOutputModalities ();
677+         $ this assertCount (2 , $ modalities
678+         $ this assertTrue ($ modalities0 ]->isText ());
679+         $ this assertTrue ($ modalities1 ]->isImage ());
680+ 
681+         // Test adding a duplicate modality (should not add) 
682+         $ configincludeOutputModality (ModalityEnum::text ());
683+         $ modalities$ configgetOutputModalities ();
684+         $ this assertCount (2 , $ modalities
685+         $ this assertTrue ($ modalities0 ]->isText ());
686+         $ this assertTrue ($ modalities1 ]->isImage ());
687+ 
688+         // Test adding another unique modality 
689+         $ configincludeOutputModality (ModalityEnum::audio ());
690+         $ modalities$ configgetOutputModalities ();
691+         $ this assertCount (3 , $ modalities
692+         $ this assertTrue ($ modalities0 ]->isText ());
693+         $ this assertTrue ($ modalities1 ]->isImage ());
694+         $ this assertTrue ($ modalities2 ]->isAudio ());
695+ 
696+         // Test that duplicate modalities are not added (different instance, same value) 
697+         $ configincludeOutputModality (ModalityEnum::image ());
698+         $ modalities$ configgetOutputModalities ();
699+         $ this assertCount (3 , $ modalities
700+     }
701+ 
702+     /** 
703+      * Tests includeOutputModality with existing modalities set via setOutputModalities. 
704+      * 
705+      * @return void 
706+      */ 
707+     public  function  testIncludeOutputModalityWithExistingModalitiesSet (): void 
708+     {
709+         $ confignew  ModelConfig ();
710+ 
711+         // Set initial modalities 
712+         $ configsetOutputModalities ([ModalityEnum::text (), ModalityEnum::video ()]);
713+         $ modalities$ configgetOutputModalities ();
714+         $ this assertCount (2 , $ modalities
715+ 
716+         // Include a new modality 
717+         $ configincludeOutputModality (ModalityEnum::image ());
718+         $ modalities$ configgetOutputModalities ();
719+         $ this assertCount (3 , $ modalities
720+         $ this assertTrue ($ modalities0 ]->isText ());
721+         $ this assertTrue ($ modalities1 ]->isVideo ());
722+         $ this assertTrue ($ modalities2 ]->isImage ());
723+ 
724+         // Include an existing modality (should not add) 
725+         $ configincludeOutputModality (ModalityEnum::video ());
726+         $ modalities$ configgetOutputModalities ();
727+         $ this assertCount (3 , $ modalities
728+     }
729+ 
730+     /** 
731+      * Tests includeOutputModality preserves modality order. 
732+      * 
733+      * @return void 
734+      */ 
735+     public  function  testIncludeOutputModalityPreservesOrder (): void 
736+     {
737+         $ confignew  ModelConfig ();
738+ 
739+         // Add modalities in specific order 
740+         $ configincludeOutputModality (ModalityEnum::audio ());
741+         $ configincludeOutputModality (ModalityEnum::document ());
742+         $ configincludeOutputModality (ModalityEnum::text ());
743+         $ configincludeOutputModality (ModalityEnum::image ());
744+ 
745+         $ modalities$ configgetOutputModalities ();
746+         $ this assertCount (4 , $ modalities
747+         $ this assertTrue ($ modalities0 ]->isAudio ());
748+         $ this assertTrue ($ modalities1 ]->isDocument ());
749+         $ this assertTrue ($ modalities2 ]->isText ());
750+         $ this assertTrue ($ modalities3 ]->isImage ());
751+ 
752+         // Try to add existing modalities in different order (should not change) 
753+         $ configincludeOutputModality (ModalityEnum::text ());
754+         $ configincludeOutputModality (ModalityEnum::audio ());
755+ 
756+         $ modalities$ configgetOutputModalities ();
757+         $ this assertCount (4 , $ modalities
758+         $ this assertTrue ($ modalities0 ]->isAudio ());
759+         $ this assertTrue ($ modalities1 ]->isDocument ());
760+         $ this assertTrue ($ modalities2 ]->isText ());
761+         $ this assertTrue ($ modalities3 ]->isImage ());
762+     }
763+ 
764+     /** 
765+      * Tests includeOutputModality handles all modality types. 
766+      * 
767+      * @return void 
768+      */ 
769+     public  function  testIncludeOutputModalityHandlesAllModalityTypes (): void 
770+     {
771+         $ confignew  ModelConfig ();
772+ 
773+         // Test all available modality types 
774+         $ allModalities
775+             ModalityEnum::text (),
776+             ModalityEnum::image (),
777+             ModalityEnum::audio (),
778+             ModalityEnum::video (),
779+             ModalityEnum::document ()
780+         ];
781+ 
782+         foreach  ($ allModalitiesas  $ modality
783+             $ configincludeOutputModality ($ modality
784+         }
785+ 
786+         $ modalities$ configgetOutputModalities ();
787+         $ this assertCount (5 , $ modalities
788+ 
789+         // Verify all modalities are present 
790+         $ this assertTrue ($ modalities0 ]->isText ());
791+         $ this assertTrue ($ modalities1 ]->isImage ());
792+         $ this assertTrue ($ modalities2 ]->isAudio ());
793+         $ this assertTrue ($ modalities3 ]->isVideo ());
794+         $ this assertTrue ($ modalities4 ]->isDocument ());
795+     }
657796}
0 commit comments