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" が含まれること