diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-21 12:40:10 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-21 12:40:10 +0900 |
| commit | 2b2ca914cc5f2f7fde3b6e75faabbe4913fd7264 (patch) | |
| tree | ff8bbb00238526c376f521647adc9ea9f486b84c /crates/shirabe/tests/util | |
| parent | 4b92ecafd7634ad99aa432d58fbc1958d1f01270 (diff) | |
| download | php-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/tests/util')
| -rw-r--r-- | crates/shirabe/tests/util/auth_helper_test.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/bitbucket_test.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/error_handler_test.rs | 21 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/filesystem_test.rs | 48 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/git_test.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/http/proxy_manager_test.rs | 37 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/ini_helper_test.rs | 35 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/perforce_test.rs | 8 | ||||
| -rw-r--r-- | crates/shirabe/tests/util/stream_context_factory_test.rs | 33 |
9 files changed, 202 insertions, 1 deletions
diff --git a/crates/shirabe/tests/util/auth_helper_test.rs b/crates/shirabe/tests/util/auth_helper_test.rs index ebdd1f1..91bd9dd 100644 --- a/crates/shirabe/tests/util/auth_helper_test.rs +++ b/crates/shirabe/tests/util/auth_helper_test.rs @@ -2,6 +2,13 @@ // These mock IO/Config to drive AuthHelper's header/option building and interactive auth // storage; mocking is not available here. + +#[allow(dead_code)] +fn set_up() { + // Builds mocked IOInterface/Config and a real AuthHelper; mocking is not available. + todo!() +} + macro_rules! stub { ($name:ident) => { #[test] diff --git a/crates/shirabe/tests/util/bitbucket_test.rs b/crates/shirabe/tests/util/bitbucket_test.rs index 2eb015a..a89b85e 100644 --- a/crates/shirabe/tests/util/bitbucket_test.rs +++ b/crates/shirabe/tests/util/bitbucket_test.rs @@ -2,6 +2,13 @@ // These mock IO/Config/HttpDownloader to drive Bitbucket's OAuth/access-token flow; mocking // is not available and a real HttpDownloader reaches curl_multi_init (todo!()). + +#[allow(dead_code)] +fn set_up() { + // Builds mocked IO/HttpDownloader/Config and records time(); mocking is not available. + todo!() +} + macro_rules! stub { ($name:ident) => { #[test] diff --git a/crates/shirabe/tests/util/error_handler_test.rs b/crates/shirabe/tests/util/error_handler_test.rs index 92ce4e8..8f42bca 100644 --- a/crates/shirabe/tests/util/error_handler_test.rs +++ b/crates/shirabe/tests/util/error_handler_test.rs @@ -5,6 +5,27 @@ // trigger those by undefined-index access / array_merge misuse. There is no equivalent // runtime mechanism in Rust to port faithfully. +#[allow(dead_code)] +fn set_up() { + // ErrorHandler::register() installs a PHP set_error_handler; no Rust equivalent. + todo!() +} + +#[allow(dead_code)] +fn tear_down() { + // restore_error_handler() is PHP runtime machinery; no Rust equivalent. + todo!() +} + +#[allow(dead_code)] +struct TearDown; + +impl Drop for TearDown { + fn drop(&mut self) { + tear_down(); + } +} + #[test] #[ignore = "relies on PHP's set_error_handler converting an undefined-array-key notice into an ErrorException; no Rust equivalent"] fn test_error_handler_capture_notice() { diff --git a/crates/shirabe/tests/util/filesystem_test.rs b/crates/shirabe/tests/util/filesystem_test.rs index 4ed9c14..e101c79 100644 --- a/crates/shirabe/tests/util/filesystem_test.rs +++ b/crates/shirabe/tests/util/filesystem_test.rs @@ -3,6 +3,54 @@ // These exercise Filesystem path helpers and on-disk operations (sizes, copy, symlinks and // junctions over a temp tree). The filesystem fixtures and platform-specific symlink/junction // behaviour are not ported. +use shirabe::util::filesystem::Filesystem; +use shirabe_php_shim::{dirname, is_dir, is_file}; + +#[allow(dead_code)] +struct SetUp { + fs: Filesystem, + working_dir: String, + test_file: String, +} + +#[allow(dead_code)] +fn set_up() -> SetUp { + let fs = Filesystem::new(None); + // getUniqueTmpDirectory is base TestCase infrastructure that is not ported. + let working_dir: String = todo!(); + #[allow(unreachable_code)] + let unique_tmp: String = todo!(); + #[allow(unreachable_code)] + let test_file: String = format!("{unique_tmp}/composer_test_file"); + #[allow(unreachable_code)] + SetUp { + fs, + working_dir, + test_file, + } +} + +#[allow(dead_code)] +fn tear_down(set_up: &mut SetUp) { + if is_dir(&set_up.working_dir) { + let _ = set_up.fs.remove_directory(&set_up.working_dir); + } + if is_file(&set_up.test_file) { + let _ = set_up.fs.remove_directory(dirname(&set_up.test_file)); + } +} + +#[allow(dead_code)] +struct TearDown { + set_up: SetUp, +} + +impl Drop for TearDown { + fn drop(&mut self) { + tear_down(&mut self.set_up); + } +} + macro_rules! stub { ($name:ident) => { #[test] diff --git a/crates/shirabe/tests/util/git_test.rs b/crates/shirabe/tests/util/git_test.rs index 69539ef..4802180 100644 --- a/crates/shirabe/tests/util/git_test.rs +++ b/crates/shirabe/tests/util/git_test.rs @@ -2,6 +2,13 @@ // These mock IO/Config/ProcessExecutor to drive Git::runCommand and mirror syncing; mocking // is not available here. + +#[allow(dead_code)] +fn set_up() { + // Builds mocked IO/Config/ProcessExecutor/Filesystem and a real Git; mocking is not available. + todo!() +} + macro_rules! stub { ($name:ident) => { #[test] diff --git a/crates/shirabe/tests/util/http/proxy_manager_test.rs b/crates/shirabe/tests/util/http/proxy_manager_test.rs index 50be143..0ed059d 100644 --- a/crates/shirabe/tests/util/http/proxy_manager_test.rs +++ b/crates/shirabe/tests/util/http/proxy_manager_test.rs @@ -2,11 +2,48 @@ // ProxyManager reads HTTP(S)_PROXY / CGI_HTTP_PROXY / no_proxy environment variables; the // env-dependent setup (without its setUp/tearDown isolation) is not ported. +use shirabe::util::http::proxy_manager::ProxyManager; +use shirabe::util::platform::Platform; + +fn set_up() { + Platform::clear_env("HTTP_PROXY"); + Platform::clear_env("http_proxy"); + Platform::clear_env("HTTPS_PROXY"); + Platform::clear_env("https_proxy"); + Platform::clear_env("NO_PROXY"); + Platform::clear_env("no_proxy"); + Platform::clear_env("CGI_HTTP_PROXY"); + Platform::clear_env("cgi_http_proxy"); + ProxyManager::reset(); +} + +fn tear_down() { + Platform::clear_env("HTTP_PROXY"); + Platform::clear_env("http_proxy"); + Platform::clear_env("HTTPS_PROXY"); + Platform::clear_env("https_proxy"); + Platform::clear_env("NO_PROXY"); + Platform::clear_env("no_proxy"); + Platform::clear_env("CGI_HTTP_PROXY"); + Platform::clear_env("cgi_http_proxy"); + ProxyManager::reset(); +} + +struct TearDown; + +impl Drop for TearDown { + fn drop(&mut self) { + tear_down(); + } +} + macro_rules! stub { ($name:ident) => { #[test] #[ignore = "not yet ported (ProxyManager is driven by proxy environment variables)"] fn $name() { + let _tear_down = TearDown; + set_up(); todo!() } }; diff --git a/crates/shirabe/tests/util/ini_helper_test.rs b/crates/shirabe/tests/util/ini_helper_test.rs index e214a78..59dc967 100644 --- a/crates/shirabe/tests/util/ini_helper_test.rs +++ b/crates/shirabe/tests/util/ini_helper_test.rs @@ -1,7 +1,40 @@ //! ref: composer/tests/Composer/Test/Util/IniHelperTest.php use shirabe::util::ini_helper::IniHelper; -use shirabe_php_shim::{PATH_SEPARATOR, putenv}; +use shirabe::util::platform::Platform; +use shirabe_php_shim::{PATH_SEPARATOR, getenv, putenv}; + +#[allow(dead_code)] +fn set_up() -> TearDown { + // Register our name with XdebugHandler. + // TODO: XdebugHandler is the external composer/xdebug-handler package and is not ported. + todo!(); + // Save current state + #[allow(unreachable_code)] + let env_original = getenv("COMPOSER_ORIGINAL_INIS"); + TearDown { env_original } +} + +#[allow(dead_code)] +fn tear_down(env_original: &Option<String>) { + // Restore original state + if let Some(env_original) = env_original { + putenv(&format!("COMPOSER_ORIGINAL_INIS={env_original}")); + } else { + Platform::clear_env("COMPOSER_ORIGINAL_INIS"); + } +} + +#[allow(dead_code)] +struct TearDown { + env_original: Option<String>, +} + +impl Drop for TearDown { + fn drop(&mut self) { + tear_down(&self.env_original); + } +} fn set_env(paths: &[&str]) { putenv(&format!( diff --git a/crates/shirabe/tests/util/perforce_test.rs b/crates/shirabe/tests/util/perforce_test.rs index 3958b83..59b9fd8 100644 --- a/crates/shirabe/tests/util/perforce_test.rs +++ b/crates/shirabe/tests/util/perforce_test.rs @@ -2,6 +2,14 @@ // These mock IO and a ProcessExecutor to drive Perforce client/stream/command behaviour; // mocking is not available here. + +#[allow(dead_code)] +fn set_up() { + // Builds mocked ProcessExecutor/IO, the test repo config, and a Windows-flagged Perforce; + // mocking is not available. + todo!() +} + macro_rules! stub { ($name:ident) => { #[test] diff --git a/crates/shirabe/tests/util/stream_context_factory_test.rs b/crates/shirabe/tests/util/stream_context_factory_test.rs index 6f484fa..f75c78d 100644 --- a/crates/shirabe/tests/util/stream_context_factory_test.rs +++ b/crates/shirabe/tests/util/stream_context_factory_test.rs @@ -3,11 +3,44 @@ // These build a stream context and assert proxy/option handling driven by HTTP(S)_PROXY / // no_proxy environment variables; the env-dependent setup (without its setUp/tearDown // isolation) is not ported. +use shirabe::util::http::proxy_manager::ProxyManager; +use shirabe::util::platform::Platform; + +fn set_up() { + Platform::clear_env("HTTP_PROXY"); + Platform::clear_env("http_proxy"); + Platform::clear_env("HTTPS_PROXY"); + Platform::clear_env("https_proxy"); + Platform::clear_env("NO_PROXY"); + Platform::clear_env("no_proxy"); + ProxyManager::reset(); +} + +fn tear_down() { + Platform::clear_env("HTTP_PROXY"); + Platform::clear_env("http_proxy"); + Platform::clear_env("HTTPS_PROXY"); + Platform::clear_env("https_proxy"); + Platform::clear_env("NO_PROXY"); + Platform::clear_env("no_proxy"); + ProxyManager::reset(); +} + +struct TearDown; + +impl Drop for TearDown { + fn drop(&mut self) { + tear_down(); + } +} + macro_rules! stub { ($name:ident) => { #[test] #[ignore = "not yet ported (StreamContextFactory proxy/option building is driven by proxy env vars)"] fn $name() { + let _tear_down = TearDown; + set_up(); todo!() } }; |
