diff --git a/TIASshot.Tests/ImageStatsTests.cs b/TIASshot.Tests/ImageStatsTests.cs index 8032426..85440f6 100644 --- a/TIASshot.Tests/ImageStatsTests.cs +++ b/TIASshot.Tests/ImageStatsTests.cs @@ -402,6 +402,51 @@ } /// + /// BuildJson_string値中の改行とタブ_エスケープされる: + /// RFC 8259 §7 により制御文字は生で出力できないため '\n' '\t' にエスケープされること + /// + [Test] + public void BuildJson_string値中の改行とタブ_エスケープされる() { + var meta = new Dictionary { + { "device_name", "DFK\n23\tUX" }, + }; + + string json = ImageStats.BuildJson(meta, null); + + Assert.That(json, Does.Contain("\"DFK\\n23\\tUX\""), "改行は \\n,タブは \\t にエスケープされること"); + } + + /// + /// BuildJson_string値中のその他の制御文字_uエスケープされる: + /// 短縮表記を持たない 0x20 未満の制御文字は '\u00XX' 形式にエスケープされること + /// + [Test] + public void BuildJson_string値中のその他の制御文字_uエスケープされる() { + var meta = new Dictionary { + { "serial_number", "A\u0001B\u001fC" }, + }; + + string json = ImageStats.BuildJson(meta, null); + + Assert.That(json, Does.Contain("\"A\\u0001B\\u001fC\""), "制御文字は \\u00XX にエスケープされること"); + } + + /// + /// BuildJson_string値中の非ASCII文字_そのまま出力される: + /// 制御文字以外(日本語など)はエスケープせずそのまま出力されること(特性化) + /// + [Test] + public void BuildJson_string値中の非ASCII文字_そのまま出力される() { + var meta = new Dictionary { + { "shading_correction", "未補正(LSC 保留)" }, + }; + + string json = ImageStats.BuildJson(meta, null); + + Assert.That(json, Does.Contain("\"未補正(LSC 保留)\""), "非 ASCII 文字はそのまま出力されること"); + } + + /// /// BuildJson_statsリスト_frame_statsキーと各フレームのフィールドが生成される: /// 1フレーム分の FrameStats を与えたとき、"frame_stats" 配列が生成され /// "frame", "saturated_ratio", "p99_luminance", "mean_B/G/R", "max_B/G/R" が含まれること