1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 08:12:21 +01:00
Files
archived-php-src/ext/intl/tests/resourcebundle_create_error.phpt
Gina Peter Banyard 6600d0e00f ext/intl: Refactor error handling (#19196)
This is a comprehensive refactoring of the error mechanism of the Intl extension.

By moving the prefixing of the current method/function being executed to actual error message creation by accessing the execution context, we get the following benefits:
- Accurate error messages indicating *what* call caused the error
  - As we *always* "copy" the message, the `copyMsg` arg becomes unused, meaning we can reduce the size of the `intl_error` struct by 4 bytes.
  - Saving it as a zend_string means we know the length of the message
- Remove the need to pass around a "function name" `char*` across multiple calls
- Use Intl's exception mechanism to generate exceptions for constructor call
  - This removes the need for replacing the error handler
  - Which didn't do anything anyway in silent mode, which required throwing non-descriptive exceptions
2025-07-30 16:00:37 +01:00

42 lines
1.1 KiB
PHP

--TEST--
ResourceBundle creation errors
--EXTENSIONS--
intl
--FILE--
<?php
try {
$rb = new ResourceBundle('en_US', 'non-existing');
var_dump($rb);
var_dump(intl_get_error_message());
} catch (Throwable $e) {
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
}
$rb = resourcebundle_create('en_US', 'non-existing');
var_dump($rb);
var_dump(intl_get_error_message());
require_once "resourcebundle.inc";
try {
$rb = new ResourceBundle('en_US', BUNDLE, false);
var_dump($rb);
var_dump(intl_get_error_message());
} catch (Throwable $e) {
echo $e::class, ': ', $e->getMessage(), PHP_EOL;
}
$rb = resourcebundle_create('en_US', BUNDLE, false);
var_dump($rb);
var_dump(intl_get_error_message());
?>
--EXPECT--
IntlException: ResourceBundle::__construct(): Cannot load libICU resource bundle
NULL
string(85) "resourcebundle_create(): Cannot load libICU resource bundle: U_MISSING_RESOURCE_ERROR"
IntlException: ResourceBundle::__construct(): Cannot load libICU resource bundle
NULL
string(85) "resourcebundle_create(): Cannot load libICU resource bundle: U_MISSING_RESOURCE_ERROR"