Aggregate Config (FastForward\Config\Tests\AggregateConfig)
- Invoke will aggregate all configs into one
Array Access Config Trait
- Offset exists will call has method
- Offset get will call get method
- Offset set will call set method
- Offset unset will call remove method
Array Config (FastForward\Config\Tests\ArrayConfig)
- Rejects empty lookup paths with data set "get"
- Rejects empty lookup paths with data set "has"
- Rejects empty lookup paths with data set "remove"
- Supports existing path delimiters and empty segments with data set "dot"
- Supports existing path delimiters and empty segments with data set "slash"
- Supports existing path delimiters and empty segments with data set "mixed delimiters"
- Supports existing path delimiters and empty segments with data set "empty segments"
- Supports existing path delimiters and empty segments with data set "slash empty segments"
- Supports existing path delimiters and empty segments with data set "numeric segments"
- Supports existing path delimiters and empty segments with data set "numeric string key"
- Existence and defaults preserve falsy values with data set "boolean false"
- Existence and defaults preserve falsy values with data set "integer zero"
- Existence and defaults preserve falsy values with data set "string zero"
- Existence and defaults preserve falsy values with data set "empty string"
- Existence and defaults preserve falsy values with data set "null value"
- Missing and null values wrap associative defaults
- Wraps only empty and string keyed arrays
- Reading and removing missing paths do not mutate data
- Nested writes replace scalar ancestors and merge maps
- Subtrees and exports are independent array snapshots
- Iteration retains leaf types and skips empty arrays
- Get will return primitive or nested config
- Has returns expected results
- Set with array merges correctly
- Set with key value pairs
- Set with falsy values with data set "boolean false"
- Set with falsy values with data set "integer zero"
- Set with falsy values with data set "string zero"
- Set with falsy values with data set "empty string"
- Set with falsy values with data set "null value"
- Set throws exception for invalid key
- Set accepts another config interface
- Get iterator yields all keys
- Dot notation merges associative nested keys
- Remove key removes top level keys
- Remove key removes nested keys
- Remove key removes deep nested keys
- Explicit list assignment retains index replacement with data set "key"
- Explicit list assignment retains index replacement with data set "array"
- Explicit list assignment retains index replacement with data set "object"
Cached Config (FastForward\Config\Tests\CachedConfig)
- Default keys are portable and isolate same class sources
- Cache writes preserve the expected lifetime with data set "initial with a generated key"
- Cache writes preserve the expected lifetime with data set "initial with an explicit key and backend expiration"
- Cache writes preserve the expected lifetime with data set "initial with an explicit key and unlimited backend"
- Cache writes preserve the expected lifetime with data set "set with a generated key"
- Cache writes preserve the expected lifetime with data set "set with an explicit key and backend expiration"
- Cache writes preserve the expected lifetime with data set "set with an explicit key and unlimited backend"
- Cache writes preserve the expected lifetime with data set "remove with a generated key"
- Cache writes preserve the expected lifetime with data set "remove with an explicit key and backend expiration"
- Cache writes preserve the expected lifetime with data set "remove with an explicit key and unlimited backend"
- Default helper works with strict cache and isolates sources
- Default key does not resolve or serialize lazy source
- Explicit key shares entries without resolving source on hit
- Empty array is a hit
- Unusable entry resolves source without has or readback with data set "miss or eviction"
- Unusable entry resolves source without has or readback with data set "false"
- Unusable entry resolves source without has or readback with data set "integer"
- Unusable entry resolves source without has or readback with data set "string"
- Unusable entry resolves source without has or readback with data set "object"
- Non retaining cache returns source
- Failed initial publication returns source and retains local config
- Eviction resolves source again
- Backend invalid key exception is propagated
- Persistent mutations update cache with data set "set"
- Persistent mutations update cache with data set "remove"
- Non persistent mutations only update local config with data set "set"
- Non persistent mutations only update local config with data set "remove"
- Failed persistent mutations throw and keep local changes with data set "set"
- Failed persistent mutations throw and keep local changes with data set "remove"
Config Aggregation (FastForward\Config\Tests\ConfigAggregation)
- Aggregates lists across source kinds with data set "arrays / two sources"
- Aggregates lists across source kinds with data set "arrays / three sources"
- Aggregates lists across source kinds with data set "objects / two sources"
- Aggregates lists across source kinds with data set "objects / three sources"
- Aggregates lists across source kinds with data set "files / two sources"
- Aggregates lists across source kinds with data set "files / three sources"
- Aggregates lists across source kinds with data set "file objects / two sources"
- Aggregates lists across source kinds with data set "file objects / three sources"
- Aggregates lists across source kinds with data set "directories / two sources"
- Aggregates lists across source kinds with data set "directories / three sources"
- Aggregates lists across source kinds with data set "directory objects / two sources"
- Aggregates lists across source kinds with data set "directory objects / three sources"
- Aggregates lists across source kinds with data set "providers / two sources"
- Aggregates lists across source kinds with data set "providers / three sources"
- Aggregates lists across source kinds with data set "mixed / two sources"
- Aggregates lists across source kinds with data set "mixed / three sources"
- Matches config provider without eager loading
- Invokable class names stay lazy and keep duplicates
- Normalizes dotted and nested keys from config interfaces
- Preserves existing boundary semantics with data set "empty then list"
- Preserves existing boundary semantics with data set "list then empty"
- Preserves existing boundary semantics with data set "two empty arrays"
- Preserves existing boundary semantics with data set "map then empty"
- Preserves existing boundary semantics with data set "empty then map"
- Preserves existing boundary semantics with data set "sparse numeric arrays"
- Preserves existing boundary semantics with data set "list then sparse"
- Preserves existing boundary semantics with data set "sparse then list"
- Preserves existing boundary semantics with data set "mixed arrays"
- Preserves existing boundary semantics with data set "map then list"
- Preserves existing boundary semantics with data set "list then map"
- Preserves existing boundary semantics with data set "scalar then list"
- Preserves existing boundary semantics with data set "list then scalar"
- Preserves existing boundary semantics with data set "scalar then map"
- Preserves existing boundary semantics with data set "map then scalar"
- Preserves existing boundary semantics with data set "scalar then empty"
- Preserves existing boundary semantics with data set "null then list"
- Preserves existing boundary semantics with data set "list then null"
- Preserves existing boundary semantics with data set "null then scalar"
- Preserves existing boundary semantics with data set "scalar then null"
- Preserves existing boundary semantics with data set "two nulls"
Config Container (FastForward\Config\Tests\Container\ConfigContainer)
- Has returns true for known internal identifiers
- Has returns true if config contains key
- Has returns false for unknown key
- Get returns container for internal identifiers
- Get returns config value for key
- Get throws exception for unknown key
- Get with config container will return config container
- Invalid identifiers follow container not found contract with data set "empty"
- Invalid identifiers follow container not found contract with data set "near prefix"
- Invalid identifiers follow container not found contract with data set "missing delimiter"
- Invalid identifiers follow container not found contract with data set "slash prefix"
- Invalid identifiers follow container not found contract with data set "empty suffix"
- Invalid identifiers follow container not found contract with data set "only dots"
- Invalid identifiers follow container not found contract with data set "only path delimiters"
- Invalid identifiers follow container not found contract with data set "missing key"
- Unicode nested paths and null values are resolved
- Nonempty paths preserve empty segments
Config Helper (FastForward\Config\Tests\Helper\ConfigHelper)
- Merge recurses through maps and concatenates only sequential lists
- Path rejects an empty string
- Associative detection preserves string key only semantics with data set "empty"
- Associative detection preserves string key only semantics with data set "map"
- Associative detection preserves string key only semantics with data set "numeric-looking string"
- Associative detection preserves string key only semantics with data set "list"
- Associative detection preserves string key only semantics with data set "sparse"
- Associative detection preserves string key only semantics with data set "mixed"
- Associative detection preserves string key only semantics with data set "numeric string"
- Associative detection preserves string key only semantics with data set "object"
- Associative detection preserves string key only semantics with data set "null"
- Normalization preserves lists sparse and mixed arrays
- Normalization supports slash and concatenates overlapping lists
- Normalization retains input order precedence
- Is assoc will return true for associative array
- Is assoc will return false for sequential array
- Is assoc will return false for non array
- Normalize will convert dot notation to nested array
- Normalize will handle mixed nested arrays
- Normalize will return indexed array unchanged
- Normalize will merge arrays when keys overlap
- Flatten will convert nested array to dot notation
- Flatten will handle empty array
Container Not Found Exception (FastForward\Config\Tests\Exception\ContainerNotFoundException)
- For key returns expected message
Directory Config (FastForward\Config\Tests\DirectoryConfig)
- Constructor will throw exception for unreadable directory
- Constructor will succeed for valid directory
Directory Discovery (FastForward\Config\Tests\DirectoryDiscovery)
- Loads every depth only when recursive with data set "directory"
- Loads every depth only when recursive with data set "directory-helper"
- Loads every depth only when recursive with data set "recursive"
- Loads every depth only when recursive with data set "recursive-helper"
- Loads every depth only when recursive with data set "config-helper"
- Directory names are literal with data set "directory:config[1]"
- Directory names are literal with data set "directory:config{one,two}"
- Directory names are literal with data set "directory:config*literal"
- Directory names are literal with data set "directory:config?literal"
- Directory names are literal with data set "directory:config\literal"
- Directory names are literal with data set "directory:configuração[um]"
- Directory names are literal with data set "directory-helper:config[1]"
- Directory names are literal with data set "directory-helper:config{one,two}"
- Directory names are literal with data set "directory-helper:config*literal"
- Directory names are literal with data set "directory-helper:config?literal"
- Directory names are literal with data set "directory-helper:config\literal"
- Directory names are literal with data set "directory-helper:configuração[um]"
- Directory names are literal with data set "recursive:config[1]"
- Directory names are literal with data set "recursive:config{one,two}"
- Directory names are literal with data set "recursive:config*literal"
- Directory names are literal with data set "recursive:config?literal"
- Directory names are literal with data set "recursive:config\literal"
- Directory names are literal with data set "recursive:configuração[um]"
- Directory names are literal with data set "recursive-helper:config[1]"
- Directory names are literal with data set "recursive-helper:config{one,two}"
- Directory names are literal with data set "recursive-helper:config*literal"
- Directory names are literal with data set "recursive-helper:config?literal"
- Directory names are literal with data set "recursive-helper:config\literal"
- Directory names are literal with data set "recursive-helper:configuração[um]"
- Directory names are literal with data set "config-helper:config[1]"
- Directory names are literal with data set "config-helper:config{one,two}"
- Directory names are literal with data set "config-helper:config*literal"
- Directory names are literal with data set "config-helper:config?literal"
- Directory names are literal with data set "config-helper:config\literal"
- Directory names are literal with data set "config-helper:configuração[um]"
- Ordering is depth then path and preserves list merging with data set "recursive"
- Ordering is depth then path and preserves list merging with data set "recursive-helper"
- Ordering is depth then path and preserves list merging with data set "config-helper"
- Protected filename pattern still controls selection
- Filename pattern does not load sibling directories
- Relative directory does not load an include path namesake with data set "directory"
- Relative directory does not load an include path namesake with data set "directory-helper"
- Relative directory does not load an include path namesake with data set "recursive"
- Relative directory does not load an include path namesake with data set "recursive-helper"
- Relative directory does not load an include path namesake with data set "config-helper"
- Working directory changes do not redirect later includes with data set "directory"
- Working directory changes do not redirect later includes with data set "directory-helper"
- Working directory changes do not redirect later includes with data set "recursive"
- Working directory changes do not redirect later includes with data set "recursive-helper"
- Working directory changes do not redirect later includes with data set "config-helper"
- Symlinked directories are not traversed and files are included once with data set "directory"
- Symlinked directories are not traversed and files are included once with data set "directory-helper"
- Symlinked directories are not traversed and files are included once with data set "recursive"
- Symlinked directories are not traversed and files are included once with data set "recursive-helper"
- Symlinked directories are not traversed and files are included once with data set "config-helper"
- Discovery and file execution remain lazy with data set "directory"
- Discovery and file execution remain lazy with data set "directory-helper"
- Discovery and file execution remain lazy with data set "recursive"
- Discovery and file execution remain lazy with data set "recursive-helper"
- Discovery and file execution remain lazy with data set "config-helper"
- Unreadable child does not hide accessible configuration with data set "recursive"
- Unreadable child does not hide accessible configuration with data set "recursive-helper"
- Unreadable child does not hide accessible configuration with data set "config-helper"
- Root read failure after construction is not hidden with data set "recursive"
- Root read failure after construction is not hidden with data set "recursive-helper"
- Root read failure after construction is not hidden with data set "config-helper"
- Array files and warm file cache remain supported
File Cache (FastForward\Config\Tests\FileCache)
- Documented provider examples generate and reuse cache with data set "caching guide"
- Documented provider examples generate and reuse cache with data set "provider guide"
- Documented directory examples generate and reuse cache with data set "caching guide"
- Documented directory examples generate and reuse cache with data set "directory guide"
- A file path does not enable generation on its own with data set "missing"
- A file path does not enable generation on its own with data set "false"
- A file path does not enable generation on its own with data set "zero"
- A file path does not enable generation on its own with data set "null"
- Documented disabled example does not generate cache
- A later provider can explicitly disable generation
- An existing cache is read even when its flag is false
- Enabling generation does not create a missing parent directory
Functions (FastForward\Config\Tests\Functions)
- Config accepts array and returns aggregate config
- Config accepts invokable class name
- Config cache wraps config with cache
- Config dir returns expected instance
- Config provider returns expected implementation
- Config will load directory when string is directory
- Config file returns php file config instance
- Config will load php file when string is file
- Config with unreadable php file throws invalid argument exception
- Config does not load non php file as php file config
Invalid Argument Exception (FastForward\Config\Tests\Exception\InvalidArgumentException)
- For empty path will return expected message
- For non string key with value will return expected message
- For unreadable directory will return expected message
- For unreadable file will return expected message
- For unwritable file will return expected message
- For invalid config file will return expected message
Laminas Config Aggregator Config (FastForward\Config\Tests\LaminasConfigAggregatorConfig)
- Invoke aggregates providers
Lazy Load Config Trait (FastForward\Config\Tests\LazyLoadConfigTrait)
- Get delegates to config
- Remove removes from config
- Has returns expected results
- Set merges values correctly
- To array and iterator are consistent
Php File Config (FastForward\Config\Tests\PhpFileConfig)
- Empty locator retains missing read behavior with data set "array defaults"
- Empty locator retains missing read behavior with data set "configuration defaults"
- Empty locator retains missing read behavior with data set "without defaults"
- Empty locator non persistent changes remain local with data set "array defaults during set"
- Empty locator non persistent changes remain local with data set "array defaults during remove"
- Empty locator non persistent changes remain local with data set "configuration defaults during set"
- Empty locator non persistent changes remain local with data set "configuration defaults during remove"
- Invoke will return array config from file
- Invoke will throw exception when file does not exist and no default
- Invoke will use default config when file does not exist
- Invoke will not persist default config on read even when persistent is true
- Set will persist default config and mutations when persistent is true
- Set will create directory if it does not exist when persistent is true
- Invoke will throw exception when file does not return array
- Set will not update file when persistent is false
- Set will update file when persistent is true
- Remove will not update file when persistent is false
- Remove will update file when persistent is true
- Array access with persistence
- Iteration returns flattened keys
- Invoke will throw exception when path is directory
Php File Config Path (FastForward\Config\Tests\PhpFileConfigPath)
- Empty locator persistent changes fail before creating entries with data set "array defaults during set"
- Empty locator persistent changes fail before creating entries with data set "array defaults during remove"
- Empty locator persistent changes fail before creating entries with data set "configuration defaults during set"
- Empty locator persistent changes fail before creating entries with data set "configuration defaults during remove"
- Empty locator persistent changes fail before creating entries with data set "none defaults during set"
- Empty locator persistent changes fail before creating entries with data set "none defaults during remove"
- Relative files ignore competing include path entries with data set "bare filename read"
- Relative files ignore competing include path entries with data set "bare filename mutation"
- Relative files ignore competing include path entries with data set "explicit relative mutation"
- Relative files ignore competing include path entries with data set "nested relative mutation"
- Persistent mutations keep their target when loaded code changes cwd with data set "mutation first without competing file"
- Persistent mutations keep their target when loaded code changes cwd with data set "mutation first with competing file"
- Persistent mutations keep their target when loaded code changes cwd with data set "read first without competing file"
- Persistent mutations keep their target when loaded code changes cwd with data set "read first with competing file"
- Trailing separators retain native file semantics with data set "regular file get with /"
- Trailing separators retain native file semantics with data set "regular file get defaults with /"
- Trailing separators retain native file semantics with data set "regular file set with /"
- Trailing separators retain native file semantics with data set "regular file remove with /"
- Trailing separators retain native file semantics with data set "link input get with /"
- Trailing separators retain native file semantics with data set "link input get defaults with /"
- Trailing separators retain native file semantics with data set "link input set with /"
- Trailing separators retain native file semantics with data set "link input remove with /"
- Trailing separators retain native file semantics with data set "link target get with /"
- Trailing separators retain native file semantics with data set "link target get defaults with /"
- Trailing separators retain native file semantics with data set "link target set with /"
- Trailing separators retain native file semantics with data set "link target remove with /"
- Posix terminal backslash remains a valid filename character
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal during get"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal during defaults"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal during set"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal during remove"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor during get"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor during defaults"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor during set"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor during remove"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal stream during get"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal stream during defaults"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal stream during set"
- Nul paths retain missing read semantics and reject persistent changes with data set "terminal stream during remove"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor stream during get"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor stream during defaults"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor stream during set"
- Nul paths retain missing read semantics and reject persistent changes with data set "ancestor stream during remove"
- Missing relative file keeps its location after reading defaults
- Unavailable required path helpers reject operations without changing the file with data set "relative input during get"
- Unavailable required path helpers reject operations without changing the file with data set "symlink input during get"
- Unavailable required path helpers reject operations without changing the file with data set "stream input during get"
- Unavailable required path helpers reject operations without changing the file with data set "stream input without regex during get"
- Unavailable required path helpers reject operations without changing the file with data set "relative input during set"
- Unavailable required path helpers reject operations without changing the file with data set "symlink input during set"
- Unavailable required path helpers reject operations without changing the file with data set "stream input during set"
- Unavailable required path helpers reject operations without changing the file with data set "stream input without regex during set"
- Unavailable required path helpers reject operations without changing the file with data set "relative input during remove"
- Unavailable required path helpers reject operations without changing the file with data set "symlink input during remove"
- Unavailable required path helpers reject operations without changing the file with data set "stream input during remove"
- Unavailable required path helpers reject operations without changing the file with data set "stream input without regex during remove"
- Unavailable path functions reject reads through the library exception with data set "absolute input without realpath"
- Unavailable path functions reject reads through the library exception with data set "relative input without realpath"
- Unavailable path functions reject reads through the library exception with data set "absolute input without is_link"
- Unavailable path functions reject reads through the library exception with data set "relative input without is_link"
- Posix filesystem paths do not require regex with data set "absolute get"
- Posix filesystem paths do not require regex with data set "absolute set"
- Posix filesystem paths do not require regex with data set "absolute remove"
- Posix filesystem paths do not require regex with data set "relative get"
- Posix filesystem paths do not require regex with data set "relative set"
- Posix filesystem paths do not require regex with data set "relative remove"
- Path components require helpers only during traversal with data set "file without dirname"
- Path components require helpers only during traversal with data set "missing without dirname"
- Path components require helpers only during traversal with data set "stream without dirname"
- Path components require helpers only during traversal with data set "terminal without dirname"
- Path components require helpers only during traversal with data set "file without basename"
- Path components require helpers only during traversal with data set "missing without basename"
- Path components require helpers only during traversal with data set "stream without basename"
- Path components require helpers only during traversal with data set "terminal without basename"
- Windows drive relative existing file uses native resolution
- Unresolved windows drive relative path fails before creating files
Php File Config Persistence (FastForward\Config\Tests\PhpFileConfigPersistence)
- Persistent changes handle unavailable publication functions with data set "chmod disabled for new file during set"
- Persistent changes handle unavailable publication functions with data set "chmod disabled for new file during remove"
- Persistent changes handle unavailable publication functions with data set "chmod disabled for existing file during set"
- Persistent changes handle unavailable publication functions with data set "chmod disabled for existing file during remove"
- Persistent changes handle unavailable publication functions with data set "umask disabled for new file during set"
- Persistent changes handle unavailable publication functions with data set "umask disabled for new file during remove"
- Persistent changes handle unavailable publication functions with data set "umask disabled for existing file during set"
- Persistent changes handle unavailable publication functions with data set "umask disabled for existing file during remove"
- Dump will throw exception when directory is not writable
- Dump will throw exception when file is not writable
- Dump will throw exception when value cannot be exported
- Persistent mutations across multiple instances do not overwrite each other
- Persistent remove across multiple instances do not overwrite each other
- Persistent mutation preserves restrictive file permissions
- Persistent mutations preserve an existing permitted group
- Unpreservable group leaves the original file untouched
- Unavailable metadata functions reject replacement without changing the file with data set "realpath disabled during set"
- Unavailable metadata functions reject replacement without changing the file with data set "realpath disabled during remove"
- Unavailable metadata functions reject replacement without changing the file with data set "is_link disabled during set"
- Unavailable metadata functions reject replacement without changing the file with data set "is_link disabled during remove"
- Unavailable metadata functions reject replacement without changing the file with data set "cache refresh disabled during set"
- Unavailable metadata functions reject replacement without changing the file with data set "cache refresh disabled during remove"
- Unavailable metadata functions reject replacement without changing the file with data set "stat disabled during set"
- Unavailable metadata functions reject replacement without changing the file with data set "stat disabled during remove"
- Unavailable metadata functions reject replacement without changing the file with data set "filegroup disabled during set"
- Unavailable metadata functions reject replacement without changing the file with data set "filegroup disabled during remove"
- Unavailable metadata functions reject replacement without changing the file with data set "chgrp disabled during set"
- Unavailable metadata functions reject replacement without changing the file with data set "chgrp disabled during remove"
- Unused metadata functions do not block persistence with data set "new file without metadata functions"
- Unused metadata functions do not block persistence with data set "existing group already matches without chgrp"
- Unused metadata functions do not block persistence with data set "absolute regular file without path helpers"
- Unused metadata functions do not block persistence with data set "absolute regular file without stream enumeration"
- New persistent file uses umask and default creation group
Php File Config Resolver Function (FastForward\Config\Tests\PhpFileConfigResolverFunction)
- Resolver uses only available required functions with data set "str_contains file get"
- Resolver uses only available required functions with data set "str_contains file set"
- Resolver uses only available required functions with data set "str_contains file remove"
- Resolver uses only available required functions with data set "str_contains stream get"
- Resolver uses only available required functions with data set "str_contains stream set"
- Resolver uses only available required functions with data set "str_contains stream remove"
- Resolver uses only available required functions with data set "str_contains empty defaults"
- Resolver uses only available required functions with data set "str_contains NUL defaults"
- Resolver uses only available required functions with data set "str_starts_with file get"
- Resolver uses only available required functions with data set "str_starts_with file set"
- Resolver uses only available required functions with data set "str_starts_with file remove"
- Resolver uses only available required functions with data set "str_starts_with stream get"
- Resolver uses only available required functions with data set "str_starts_with stream set"
- Resolver uses only available required functions with data set "str_starts_with stream remove"
- Resolver uses only available required functions with data set "str_starts_with empty defaults"
- Resolver uses only available required functions with data set "str_starts_with NUL defaults"
- Resolver uses only available required functions with data set "str_ends_with file get"
- Resolver uses only available required functions with data set "str_ends_with file set"
- Resolver uses only available required functions with data set "str_ends_with file remove"
- Resolver uses only available required functions with data set "str_ends_with stream get"
- Resolver uses only available required functions with data set "str_ends_with stream set"
- Resolver uses only available required functions with data set "str_ends_with stream remove"
- Resolver uses only available required functions with data set "str_ends_with empty defaults"
- Resolver uses only available required functions with data set "str_ends_with NUL defaults"
- Resolver uses only available required functions with data set "strspn file get"
- Resolver uses only available required functions with data set "strspn file set"
- Resolver uses only available required functions with data set "strspn file remove"
- Resolver uses only available required functions with data set "strspn stream get"
- Resolver uses only available required functions with data set "strspn stream set"
- Resolver uses only available required functions with data set "strspn stream remove"
- Resolver uses only available required functions with data set "strspn empty defaults"
- Resolver uses only available required functions with data set "strspn NUL defaults"
- Resolver uses only available required functions with data set "substr file get"
- Resolver uses only available required functions with data set "substr file set"
- Resolver uses only available required functions with data set "substr file remove"
- Resolver uses only available required functions with data set "substr stream get"
- Resolver uses only available required functions with data set "substr stream set"
- Resolver uses only available required functions with data set "substr stream remove"
- Resolver uses only available required functions with data set "substr empty defaults"
- Resolver uses only available required functions with data set "substr NUL defaults"
- Resolver uses only available required functions with data set "rtrim file get"
- Resolver uses only available required functions with data set "rtrim file set"
- Resolver uses only available required functions with data set "rtrim file remove"
- Resolver uses only available required functions with data set "rtrim stream get"
- Resolver uses only available required functions with data set "rtrim stream set"
- Resolver uses only available required functions with data set "rtrim stream remove"
- Resolver uses only available required functions with data set "rtrim empty defaults"
- Resolver uses only available required functions with data set "rtrim NUL defaults"
- Resolver uses only available required functions with data set "strncasecmp file get"
- Resolver uses only available required functions with data set "strncasecmp file set"
- Resolver uses only available required functions with data set "strncasecmp file remove"
- Resolver uses only available required functions with data set "strncasecmp stream get"
- Resolver uses only available required functions with data set "strncasecmp stream set"
- Resolver uses only available required functions with data set "strncasecmp stream remove"
- Resolver uses only available required functions with data set "strncasecmp empty defaults"
- Resolver uses only available required functions with data set "strncasecmp NUL defaults"
- Resolver uses only available required functions with data set "in_array file get"
- Resolver uses only available required functions with data set "in_array file set"
- Resolver uses only available required functions with data set "in_array file remove"
- Resolver uses only available required functions with data set "in_array stream get"
- Resolver uses only available required functions with data set "in_array stream set"
- Resolver uses only available required functions with data set "in_array stream remove"
- Resolver uses only available required functions with data set "in_array empty defaults"
- Resolver uses only available required functions with data set "in_array NUL defaults"
- Local lookup does not need wrapper membership with data set "nested/file://settings.php get"
- Local lookup does not need wrapper membership with data set "nested/file://settings.php set"
- Local lookup does not need wrapper membership with data set "nested/file://settings.php remove"
- Local lookup does not need wrapper membership with data set "x://settings.php get"
- Local lookup does not need wrapper membership with data set "x://settings.php set"
- Local lookup does not need wrapper membership with data set "x://settings.php remove"
- Non file rejection does not need terminal separator lookup
Php File Config Stream (FastForward\Config\Tests\PhpFileConfigStream)
- Stream lookup handles unavailable case folding with data set "mixed-case built-in protocol needs folding"
- Stream lookup handles unavailable case folding with data set "exact built-in protocol avoids folding"
- Stream lookup handles unavailable case folding with data set "exact uppercase registration avoids folding"
- Relative paths containing uri syntax keep their initial location with data set "nested scheme-like component"
- Relative paths containing uri syntax keep their initial location with data set "unregistered numeric prefix"
- Relative paths containing uri syntax keep their initial location with data set "scheme cannot contain an underscore"
- Relative paths containing uri syntax keep their initial location with data set "unregistered scheme uses the native filesystem fallback"
- Relative paths containing uri syntax keep their initial location with data set "single-character registered name still uses filesystem"
- Relative paths containing uri syntax keep their initial location with data set "lowercase does not select an uppercase registration"
- Relative paths containing uri syntax keep their initial location with data set "mixed case does not select an uppercase registration"
- Registered file streams keep native protocol selection with data set "numeric leading protocol"
- Registered file streams keep native protocol selection with data set "exact uppercase registration"
- Registered file streams keep native protocol selection with data set "lowercase registration accepts mixed-case input"
- Explicit leading file stream remains readable with data set "lowercase scheme"
- Explicit leading file stream remains readable with data set "uppercase scheme"
Php File Config Symlink (FastForward\Config\Tests\PhpFileConfigSymlink)
- Persistent mutation preserves symlink target
- Relative symlink can be retargeted after its first read
- Posix symlink targets containing uri syntax remain relative paths with data set "existing literal target"
- Posix symlink targets containing uri syntax remain relative paths with data set "dangling literal target"
- Persistent mutations follow directory symlinks retargeted by another process with data set "direct parent"
- Persistent mutations follow directory symlinks retargeted by another process with data set "ancestor directory"
- Persistent mutation preserves every dangling symlink with data set "single relative link"
- Persistent mutation preserves every dangling symlink with data set "relative chain"
- Persistent mutation preserves every dangling symlink with data set "absolute chain"
- Persistent mutation creates targets through dangling directory symlinks with data set "single relative parent link"
- Persistent mutation creates targets through dangling directory symlinks with data set "relative ancestor chain"
- Persistent mutation creates targets through dangling directory symlinks with data set "absolute ancestor chain"
- Repeated directory alias does not become a symlink cycle
- Parent path segments keep native directory symlink semantics
- Cyclic directory symlink chain fails before creating any file
- Cyclic symlink chain fails before altering any link
- Dangling symlink chain remains intact when its target cannot be written
Provider Precedence (FastForward\Config\Tests\ProviderPrecedence)
- Later normalized sources keep precedence with data set "providers/0"
- Later normalized sources keep precedence with data set "providers/1"
- Later normalized sources keep precedence with data set "providers/2"
- Later normalized sources keep precedence with data set "providers/3"
- Later normalized sources keep precedence with data set "providers/4"
- Later normalized sources keep precedence with data set "providers/5"
- Later normalized sources keep precedence with data set "providers/6"
- Later normalized sources keep precedence with data set "providers/7"
- Later normalized sources keep precedence with data set "generator/0"
- Later normalized sources keep precedence with data set "generator/1"
- Later normalized sources keep precedence with data set "generator/2"
- Later normalized sources keep precedence with data set "generator/3"
- Later normalized sources keep precedence with data set "generator/4"
- Later normalized sources keep precedence with data set "generator/5"
- Later normalized sources keep precedence with data set "generator/6"
- Later normalized sources keep precedence with data set "generator/7"
- Later normalized sources keep precedence with data set "directory/0"
- Later normalized sources keep precedence with data set "directory/1"
- Later normalized sources keep precedence with data set "directory/2"
- Later normalized sources keep precedence with data set "directory/3"
- Later normalized sources keep precedence with data set "directory/4"
- Later normalized sources keep precedence with data set "directory/5"
- Later normalized sources keep precedence with data set "directory/6"
- Later normalized sources keep precedence with data set "directory/7"
- Slash paths are normalized before cross provider merging
- Laminas merge instructions and numeric collisions are retained
- Duplicate provider identity keeps upstream validation
- Class providers and invalid results keep laminas validation
- Existing file cache bypasses provider resolution
Recursive Directory Config (FastForward\Config\Tests\RecursiveDirectoryConfig)
- Constructor will throw exception for unreadable root directory
- Constructor will aggregate nested php files
Skill Examples (FastForward\Config\Tests\Integration\SkillExamples)
- Consumer example with data set "application"
- Consumer example with data set "composition"
- Consumer example with data set "sources"
- Consumer example with data set "caching"
- Consumer example with data set "containers"