aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-php-shim
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-21 12:40:10 +0900
committernsfisis <nsfisis@gmail.com>2026-06-21 12:40:10 +0900
commit2b2ca914cc5f2f7fde3b6e75faabbe4913fd7264 (patch)
treeff8bbb00238526c376f521647adc9ea9f486b84c /crates/shirabe-php-shim
parent4b92ecafd7634ad99aa432d58fbc1958d1f01270 (diff)
downloadphp-shirabe-2b2ca914cc5f2f7fde3b6e75faabbe4913fd7264.tar.gz
php-shirabe-2b2ca914cc5f2f7fde3b6e75faabbe4913fd7264.tar.zst
php-shirabe-2b2ca914cc5f2f7fde3b6e75faabbe4913fd7264.zip
test(tests): port setUp/tearDown as set_up/tear_down with TearDown
Port PHP setUp/tearDown across the ported integration tests using same-named set_up()/tear_down() functions and a TearDown struct whose Drop runs tear_down(). Fixture-init setUp returns its fixtures; tmpdir-style setUp/tearDown carry state in TearDown fields. Parts that depend on unported infrastructure (PHPUnit mocks, Config::merge, the PHP error handler) stay todo!() and are only wired into ignored stubs to avoid breaking live tests. Also fix shirabe-php-shim putenv to handle the no-'=' form (PHP unsets the variable), which Platform::clear_env relies on for the env-clearing tearDowns. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe-php-shim')
-rw-r--r--crates/shirabe-php-shim/src/lib.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/crates/shirabe-php-shim/src/lib.rs b/crates/shirabe-php-shim/src/lib.rs
index b85d9f2..550cca4 100644
--- a/crates/shirabe-php-shim/src/lib.rs
+++ b/crates/shirabe-php-shim/src/lib.rs
@@ -2324,18 +2324,28 @@ pub fn getenv(_name: &str) -> Option<String> {
std::env::var(_name).ok()
}
-// TODO(phase-c): only the simple `^(\w+)=(.+)$` form is supported.
+// TODO(phase-c): only the simple `^(\w+)(=(.+))?$` form is supported.
pub fn putenv(setting: &str) -> bool {
let is_word =
|s: &str| !s.is_empty() && s.bytes().all(|b| b.is_ascii_alphanumeric() || b == b'_');
- let Some((name, value)) = setting.split_once('=') else {
- panic!("putenv: unsupported setting format: {setting:?}");
- };
- if !is_word(name) {
- panic!("putenv: unsupported setting format: {setting:?}");
- }
- unsafe {
- std::env::set_var(name, value);
+ // A setting without `=` deletes the variable, mirroring PHP's putenv('NAME').
+ match setting.split_once('=') {
+ Some((name, value)) => {
+ if !is_word(name) {
+ panic!("putenv: unsupported setting format: {setting:?}");
+ }
+ unsafe {
+ std::env::set_var(name, value);
+ }
+ }
+ None => {
+ if !is_word(setting) {
+ panic!("putenv: unsupported setting format: {setting:?}");
+ }
+ unsafe {
+ std::env::remove_var(setting);
+ }
+ }
}
true
}