aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-07-20 18:19:24 +0900
committernsfisis <nsfisis@gmail.com>2026-07-20 18:19:24 +0900
commitdc0087845355222d1cbf2820289444db3eebc87e (patch)
treed61e5d31099ec9f05284a16e4f0044c759698d5c
parentdbb91e0c4b61b7c1106a9d3aefcab6f2598b93d4 (diff)
downloadphp-shirabe-dc0087845355222d1cbf2820289444db3eebc87e.tar.gz
php-shirabe-dc0087845355222d1cbf2820289444db3eebc87e.tar.zst
php-shirabe-dc0087845355222d1cbf2820289444db3eebc87e.zip
fix(json-file): forward detected indent into write's encode options
JsonFile::write_with_options() used the caller-supplied JsonEncodeOptions verbatim, ignoring self.indent (set by read()'s detect_indenting), unlike PHP's write() which always passes $this->indent to encode() regardless of the $options argument. Un-ignore test_preserve_indentation_after_read.
-rw-r--r--crates/shirabe/src/json/json_file.rs5
-rw-r--r--crates/shirabe/tests/json/json_file_test.rs1
2 files changed, 5 insertions, 1 deletions
diff --git a/crates/shirabe/src/json/json_file.rs b/crates/shirabe/src/json/json_file.rs
index 0ce55e55..91e0d380 100644
--- a/crates/shirabe/src/json/json_file.rs
+++ b/crates/shirabe/src/json/json_file.rs
@@ -220,6 +220,11 @@ impl JsonFile {
hash: PhpMixed,
options: JsonEncodeOptions,
) -> anyhow::Result<()> {
+ let options = JsonEncodeOptions {
+ indent: self.indent.clone(),
+ ..options
+ };
+
if self.path == "php://memory" {
file_put_contents(
&self.path,
diff --git a/crates/shirabe/tests/json/json_file_test.rs b/crates/shirabe/tests/json/json_file_test.rs
index bc0fe223..14cb1e68 100644
--- a/crates/shirabe/tests/json/json_file_test.rs
+++ b/crates/shirabe/tests/json/json_file_test.rs
@@ -204,7 +204,6 @@ fn test_double_escaped_unicode() {
}
#[test]
-#[ignore = "JsonFile::write never forwards self.indent (set by read()'s detect_indenting) into the encode options, unlike PHP's write() which passes $this->indent to encode()"]
fn test_preserve_indentation_after_read() {
let src = fixture_path("tabs.json");
let dst = fixture_path("tabs2.json");