2222use Humbug \PhpScoper \Reflector ;
2323use Humbug \PhpScoper \RegexChecker ;
2424use Humbug \PhpScoper \Symbol \EnrichedReflector ;
25+ use Humbug \PhpScoper \Symbol \SymbolRegistry ;
2526use Humbug \PhpScoper \Symbol \SymbolsRegistry ;
2627use Humbug \PhpScoper \Whitelist ;
2728use InvalidArgumentException ;
@@ -67,40 +68,37 @@ class PhpScoperSpecTest extends TestCase
6768 'maxPhpVersion ' ,
6869 'title ' ,
6970 ConfigurationKeys::PREFIX_KEYWORD ,
70- ConfigurationKeys::WHITELIST_KEYWORD ,
71- ConfigurationKeys::EXPOSE_GLOBAL_CONSTANTS_KEYWORD ,
72- ConfigurationKeys::EXPOSE_GLOBAL_CLASSES_KEYWORD ,
73- ConfigurationKeys::EXPOSE_GLOBAL_FUNCTIONS_KEYWORD ,
74- ConfigurationKeys::EXPOSE_NAMESPACES_KEYWORD ,
75- ConfigurationKeys::EXPOSE_CONSTANTS_SYMBOLS_KEYWORD ,
76- ConfigurationKeys::EXPOSE_CLASSES_SYMBOLS_KEYWORD ,
77- ConfigurationKeys::EXPOSE_FUNCTIONS_SYMBOLS_KEYWORD ,
78- ConfigurationKeys::EXCLUDE_NAMESPACES_KEYWORD ,
79- ConfigurationKeys::CONSTANTS_INTERNAL_SYMBOLS_KEYWORD ,
80- ConfigurationKeys::CLASSES_INTERNAL_SYMBOLS_KEYWORD ,
81- ConfigurationKeys::FUNCTIONS_INTERNAL_SYMBOLS_KEYWORD ,
71+ // SPECS_CONFIG_KEYS included
8272 'expected-recorded-classes ' ,
8373 'expected-recorded-functions ' ,
8474 ];
8575
76+ // Keys allowed on a spec level
8677 private const SPECS_SPEC_KEYS = [
8778 ConfigurationKeys::PREFIX_KEYWORD ,
79+ // SPECS_CONFIG_KEYS included
80+ 'expected-recorded-classes ' ,
81+ 'expected-recorded-functions ' ,
82+ 'payload ' ,
83+ ];
84+
85+ // Keys kept and used to build the symbols configuration
86+ private const SPECS_CONFIG_KEYS = [
8887 ConfigurationKeys::WHITELIST_KEYWORD ,
88+
8989 ConfigurationKeys::EXPOSE_GLOBAL_CONSTANTS_KEYWORD ,
9090 ConfigurationKeys::EXPOSE_GLOBAL_CLASSES_KEYWORD ,
9191 ConfigurationKeys::EXPOSE_GLOBAL_FUNCTIONS_KEYWORD ,
92+
9293 ConfigurationKeys::EXPOSE_NAMESPACES_KEYWORD ,
93- ConfigurationKeys::EXPOSE_CONSTANTS_SYMBOLS_KEYWORD ,
9494 ConfigurationKeys::EXPOSE_CLASSES_SYMBOLS_KEYWORD ,
9595 ConfigurationKeys::EXPOSE_FUNCTIONS_SYMBOLS_KEYWORD ,
96+ ConfigurationKeys::EXPOSE_CONSTANTS_SYMBOLS_KEYWORD ,
97+
9698 ConfigurationKeys::EXCLUDE_NAMESPACES_KEYWORD ,
97- ConfigurationKeys::EXCLUDE_NAMESPACES_KEYWORD ,
98- ConfigurationKeys::CONSTANTS_INTERNAL_SYMBOLS_KEYWORD ,
9999 ConfigurationKeys::CLASSES_INTERNAL_SYMBOLS_KEYWORD ,
100100 ConfigurationKeys::FUNCTIONS_INTERNAL_SYMBOLS_KEYWORD ,
101- 'expected-recorded-classes ' ,
102- 'expected-recorded-functions ' ,
103- 'payload ' ,
101+ ConfigurationKeys::CONSTANTS_INTERNAL_SYMBOLS_KEYWORD ,
104102 ];
105103
106104 /**
@@ -213,6 +211,9 @@ public function test_can_scope_valid_files(
213211 $ spec ,
214212 $ contents ,
215213 $ symbolsConfiguration ,
214+ $ internalClasses ,
215+ $ internalFunctions ,
216+ $ internalConstants ,
216217 $ symbolsRegistry ,
217218 $ expected ,
218219 $ actual ,
@@ -311,6 +312,23 @@ private static function createScoper(
311312 */
312313 private static function parseSpecFile (string $ file , array $ meta , $ fixtureTitle , $ fixtureSet ): iterable
313314 {
315+ static $ specMetaKeys ;
316+ static $ specKeys ;
317+
318+ if (!isset ($ specMetaKeys )) {
319+ $ specMetaKeys = [
320+ ...self ::SPECS_META_KEYS ,
321+ ...self ::SPECS_CONFIG_KEYS ,
322+ ];
323+ }
324+
325+ if (!isset ($ specKeys )) {
326+ $ specKeys = [
327+ ...self ::SPECS_SPEC_KEYS ,
328+ ...self ::SPECS_CONFIG_KEYS ,
329+ ];
330+ }
331+
314332 $ spec = sprintf (
315333 '[%s] %s ' ,
316334 $ meta ['title ' ],
@@ -325,7 +343,7 @@ private static function parseSpecFile(string $file, array $meta, $fixtureTitle,
325343 [],
326344 $ diff = array_diff (
327345 array_keys ($ meta ),
328- self :: SPECS_META_KEYS
346+ $ specMetaKeys ,
329347 ),
330348 sprintf (
331349 'Expected the keys found in the meta section to be known keys, unknown keys: "%s" ' ,
@@ -338,7 +356,7 @@ private static function parseSpecFile(string $file, array $meta, $fixtureTitle,
338356 [],
339357 $ diff = array_diff (
340358 array_keys ($ fixtureSet ),
341- self :: SPECS_SPEC_KEYS
359+ $ specKeys ,
342360 ),
343361 sprintf (
344362 'Expected the keys found in the spec section to be known keys, unknown keys: "%s" ' ,
@@ -377,14 +395,6 @@ private static function createSymbolsConfiguration(
377395 array $ meta
378396 ): SymbolsConfiguration
379397 {
380- $ configKeys = [
381- ConfigurationKeys::EXPOSE_GLOBAL_CONSTANTS_KEYWORD ,
382- ConfigurationKeys::EXPOSE_GLOBAL_CLASSES_KEYWORD ,
383- ConfigurationKeys::EXPOSE_GLOBAL_FUNCTIONS_KEYWORD ,
384- ConfigurationKeys::EXCLUDE_NAMESPACES_KEYWORD ,
385- ConfigurationKeys::WHITELIST_KEYWORD ,
386- ];
387-
388398 if (is_string ($ fixtureSet )) {
389399 $ fixtureSet = [];
390400 }
@@ -393,7 +403,7 @@ private static function createSymbolsConfiguration(
393403
394404 $ config = [];
395405
396- foreach ($ configKeys as $ key ) {
406+ foreach (self :: SPECS_CONFIG_KEYS as $ key ) {
397407 if (!array_key_exists ($ key , $ mergedConfig )) {
398408 throw new InvalidArgumentException (
399409 sprintf (
@@ -411,6 +421,9 @@ private static function createSymbolsConfiguration(
411421 }
412422
413423 /**
424+ * @param string[] $internalClasses
425+ * @param string[] $internalFunctions
426+ * @param string[] $internalConstants
414427 * @param string[][] $expectedRegisteredClasses
415428 * @param string[][] $expectedRegisteredFunctions
416429 */
@@ -419,20 +432,27 @@ private static function createSpecMessage(
419432 string $ spec ,
420433 string $ contents ,
421434 SymbolsConfiguration $ symbolsConfiguration ,
435+ array $ internalClasses ,
436+ array $ internalFunctions ,
437+ array $ internalConstants ,
422438 SymbolsRegistry $ symbolsRegistry ,
423439 ?string $ expected ,
424440 ?string $ actual ,
425441 array $ expectedRegisteredClasses ,
426442 array $ expectedRegisteredFunctions
427443 ): string {
428- // TODO: restore this
429- //$formattedWhitelist = self::formatSimpleList($whitelist->toArray());
430- $ formattedWhitelist = self ::formatSimpleList ([]);
431-
432444 $ formattedExposeGlobalClasses = self ::convertBoolToString ($ symbolsConfiguration ->shouldExposeGlobalClasses ());
433445 $ formattedExposeGlobalConstants = self ::convertBoolToString ($ symbolsConfiguration ->shouldExposeGlobalConstants ());
434446 $ formattedExposeGlobalFunctions = self ::convertBoolToString ($ symbolsConfiguration ->shouldExposeGlobalFunctions ());
435447
448+ $ formattedClassesToExpose = self ::formatSymbolRegistry ($ symbolsConfiguration ->getExposedClasses ());
449+ $ formattedFunctionsToExpose = self ::formatSymbolRegistry ($ symbolsConfiguration ->getExposedFunctions ());
450+ $ formattedConstantsToExpose = self ::formatSymbolRegistry ($ symbolsConfiguration ->getExposedConstants ());
451+
452+ $ formattedInternalClasses = self ::formatSimpleList ($ internalClasses );
453+ $ formattedInternalFunctions = self ::formatSimpleList ($ internalFunctions );
454+ $ formattedInternalConstants = self ::formatSimpleList ($ internalConstants );
455+
436456 $ formattedExpectedRegisteredClasses = self ::formatTupleList ($ expectedRegisteredClasses );
437457 $ formattedExpectedRegisteredFunctions = self ::formatTupleList ($ expectedRegisteredFunctions );
438458
@@ -456,10 +476,17 @@ private static function createSpecMessage(
456476
457477 $ titleSeparator
458478 INPUT
459- whitelist: $ formattedWhitelist
460- whitelist global classes: $ formattedExposeGlobalClasses
461- whitelist global functions: $ formattedExposeGlobalFunctions
462- whitelist global constants: $ formattedExposeGlobalConstants
479+ expose global classes: $ formattedExposeGlobalClasses
480+ expose global functions: $ formattedExposeGlobalFunctions
481+ expose global constants: $ formattedExposeGlobalConstants
482+
483+ expose classes: $ formattedClassesToExpose
484+ expose functions: $ formattedFunctionsToExpose
485+ expose constants: $ formattedConstantsToExpose
486+
487+ internal constants: $ formattedInternalClasses
488+ internal functions: $ formattedInternalFunctions
489+ internal constants: $ formattedInternalConstants
463490 $ titleSeparator
464491 $ contents
465492
@@ -493,7 +520,7 @@ private static function formatSimpleList(array $strings): string
493520 }
494521
495522 if (1 === count ($ strings )) {
496- return '[ ' .current ($ strings ).'] ' ;
523+ return '[ ' .current ($ strings ).' ] ' ;
497524 }
498525
499526 return sprintf (
@@ -545,6 +572,14 @@ private static function convertBoolToString(bool $bool): string
545572 return true === $ bool ? 'true ' : 'false ' ;
546573 }
547574
575+ private static function formatSymbolRegistry (SymbolRegistry $ symbolRegistry ): string
576+ {
577+ return self ::formatSimpleList ([
578+ ...$ symbolRegistry ->getNames (),
579+ ...$ symbolRegistry ->getRegexes (),
580+ ]);
581+ }
582+
548583 /**
549584 * @param string[][] $expected
550585 * @param string[][] $actual
0 commit comments