@@ -568,84 +568,120 @@ function destroyTemporaryMongoInstance($id = NULL)
568
568
$ json = file_get_contents (MONGO_ORCHESTRATION_URI . "/servers/ $ id " , false , $ ctx );
569
569
}
570
570
571
- function severityToString ($ type ) {
572
- switch ($ type ) {
573
- case E_DEPRECATED :
574
- return "E_DEPRECATED " ;
575
- case E_RECOVERABLE_ERROR :
576
- return "E_RECOVERABLE_ERROR " ;
577
- case E_WARNING :
578
- return "E_WARNING " ;
579
- case E_NOTICE :
580
- return "E_NOTICE " ;
581
- default :
582
- return "Some other #_ $ type " ;
583
- }
584
- }
585
- function raises ($ function , $ type , $ infunction = null ) {
586
- $ errhandler = function ($ severity , $ message , $ file , $ line ) {
571
+ /**
572
+ * Converts an error level (constant or bitmask) to a string description.
573
+ */
574
+ function severityToString (int $ severity ): string {
575
+ static $ constants = [
576
+ 'E_ERROR ' => E_ERROR ,
577
+ 'E_WARNING ' => E_WARNING ,
578
+ 'E_PARSE ' => E_PARSE ,
579
+ 'E_NOTICE ' => E_NOTICE ,
580
+ 'E_CORE_ERROR ' => E_CORE_ERROR ,
581
+ 'E_CORE_WARNING ' => E_CORE_WARNING ,
582
+ 'E_COMPILE_ERROR ' => E_COMPILE_ERROR ,
583
+ 'E_COMPILE_WARNING ' => E_COMPILE_WARNING ,
584
+ 'E_USER_ERROR ' => E_USER_ERROR ,
585
+ 'E_USER_WARNING ' => E_USER_WARNING ,
586
+ 'E_USER_NOTICE ' => E_USER_NOTICE ,
587
+ 'E_STRICT ' => E_STRICT ,
588
+ 'E_RECOVERABLE_ERROR ' => E_RECOVERABLE_ERROR ,
589
+ 'E_DEPRECATED ' => E_DEPRECATED ,
590
+ 'E_USER_DEPRECATED ' => E_USER_DEPRECATED ,
591
+ // E_ALL is handled separately
592
+ ];
593
+
594
+ if ($ severity === E_ALL ) {
595
+ return 'E_ALL ' ;
596
+ }
597
+
598
+ foreach ($ constants as $ constant => $ value ) {
599
+ if ($ severity & $ value ) {
600
+ $ matches [] = $ constant ;
601
+ }
602
+ }
603
+
604
+ return empty ($ matches ) ? 'UNKNOWN ' : implode ('| ' , $ matches );
605
+ }
606
+
607
+ /**
608
+ * Expects the callable to raise an error matching the expected severity, which
609
+ * may be a constant or bitmask. May optionally expect the error to be raised
610
+ * from a particular function. Returns the message from the raised error or
611
+ * exception, or an empty string if neither was thrown.
612
+ */
613
+ function raises (callable $ callable , int $ expectedSeverity , string $ expectedFromFunction = null ): string
614
+ {
615
+ set_error_handler (function (int $ severity , string $ message , string $ file , int $ line ) {
587
616
throw new ErrorException ($ message , 0 , $ severity , $ file , $ line );
588
- };
617
+ }) ;
589
618
590
- set_error_handler ($ errhandler , $ type );
591
619
try {
592
- $ function ();
593
- } catch (Exception $ e ) {
594
- $ exceptionname = get_class ($ e );
595
-
596
- if ($ e instanceof ErrorException && $ e ->getSeverity () & $ type ) {
597
- if ($ infunction ) {
598
- $ trace = $ e ->getTrace ();
599
- $ function = $ trace [0 ]["function " ];
600
- if (strcasecmp ($ function , $ infunction ) == 0 ) {
601
- printf ("OK: Got %s thrown from %s \n" , $ exceptionname , $ infunction );
602
- } else {
603
- printf ("ALMOST: Got %s - but was thrown in %s, not %s \n" , $ exceptionname , $ function , $ infunction );
604
- }
605
- restore_error_handler ();
606
- return $ e ->getMessage ();
607
- }
620
+ call_user_func ($ callable );
621
+ } catch (ErrorException $ e ) {
622
+ if (!($ e ->getSeverity () & $ expectedSeverity )) {
623
+ printf ("ALMOST: Got %s - expected %s \n" , severityToString ($ e ->getSeverity ()), severityToString ($ expectedSeverity ));
624
+ return $ e ->getMessage ();
625
+ }
626
+
627
+ if ($ expectedFromFunction === null ) {
608
628
printf ("OK: Got %s \n" , severityToString ($ e ->getSeverity ()));
609
- } else {
610
- printf ("ALMOST: Got %s - expected %s \n" , get_class ($ e ), $ exceptionname );
629
+ return $ e ->getMessage ();
611
630
}
612
- restore_error_handler ();
631
+
632
+ $ fromFunction = $ e ->getTrace ()[0 ]['function ' ];
633
+
634
+ if (strcasecmp ($ fromFunction , $ expectedFromFunction ) !== 0 ) {
635
+ printf ("ALMOST: Got %s - but was raised from %s, not %s \n" , errorLevelToString ($ e ->getSeverity ()), $ fromFunction , $ expectedFromFunction );
636
+ return $ e ->getMessage ();
637
+ }
638
+
639
+ printf ("OK: Got %s raised from %s \n" , severityToString ($ e ->getSeverity ()), $ fromFunction );
640
+ return $ e ->getMessage ();
641
+ } catch (Throwable $ e ) {
642
+ printf ("ALMOST: Got %s - expected %s \n" , get_class ($ e ), ErrorException::class);
613
643
return $ e ->getMessage ();
644
+ } finally {
645
+ restore_error_handler ();
614
646
}
615
647
616
- printf ("FAILED: Expected %s thrown ! \n" , ErrorException::class);
617
- restore_error_handler () ;
648
+ printf ("FAILED: Expected %s, but no error raised ! \n" , ErrorException::class);
649
+ return '' ;
618
650
}
619
- function throws ($ function , $ exceptionname , $ infunction = null ) {
651
+
652
+ /**
653
+ * Expects the callable to throw an expected exception. May optionally expect
654
+ * the exception to be thrown from a particular function. Returns the message
655
+ * from the thrown exception, or an empty string if one was not thrown.
656
+ */
657
+ function throws (callable $ callable , string $ expectedException , string $ expectedFromFunction = null ): string
658
+ {
620
659
try {
621
- $ function ( );
660
+ call_user_func ( $ callable );
622
661
} catch (Throwable $ e ) {
623
- } catch (Exception $ e ) {
624
- }
662
+ if (!($ e instanceof $ expectedException )) {
663
+ printf ("ALMOST: Got %s - expected %s \n" , get_class ($ e ), $ expectedException );
664
+ return $ e ->getMessage ();
665
+ }
625
666
626
- if (!isset ($ e )) {
627
- echo "FAILED: Expected $ exceptionname thrown, but no exception thrown! \n" ;
628
- return ;
629
- }
667
+ if ($ expectedFromFunction === null ) {
668
+ printf ("OK: Got %s \n" , $ expectedException );
669
+ return $ e ->getMessage ();
670
+ }
671
+
672
+ $ fromFunction = $ e ->getTrace ()[0 ]['function ' ];
630
673
631
- $ message = str_replace (array ("\n" , "\r" ), ' ' , $ e ->getMessage ());
632
- if ($ e instanceof $ exceptionname ) {
633
- if ($ infunction ) {
634
- $ trace = $ e ->getTrace ();
635
- $ function = $ trace [0 ]["function " ];
636
- if (strcasecmp ($ function , $ infunction ) == 0 ) {
637
- printf ("OK: Got %s thrown from %s \n" , $ exceptionname , $ infunction );
638
- } else {
639
- printf ("ALMOST: Got %s - but was thrown in %s, not %s (%s) \n" , $ exceptionname , $ function , $ infunction , $ message );
640
- }
674
+ if (strcasecmp ($ fromFunction , $ expectedFromFunction ) !== 0 ) {
675
+ printf ("ALMOST: Got %s - but was thrown from %s, not %s \n" , $ expectedException , $ fromFunction , $ expectedFromFunction );
641
676
return $ e ->getMessage ();
642
677
}
643
- printf ( " OK: Got %s \n" , $ exceptionname );
644
- } else {
645
- printf ( " ALMOST: Got %s (%s) - expected %s \n" , get_class ( $ e ), $ message , $ exceptionname );
678
+
679
+ printf ( " OK: Got %s thrown from %s \n" , $ expectedException , $ fromFunction );
680
+ return $ e -> getMessage ( );
646
681
}
647
682
648
- return $ e ->getMessage ();
683
+ printf ("FAILED: Expected %s, but no exception thrown! \n" , $ expectedException );
684
+ return '' ;
649
685
}
650
686
651
687
function printServer (Server $ server )
0 commit comments