// Utils層テスト - StringUtils & EscapeUtilsの動作確認

using "apps/lib/json_native/utils/string.hako" as StringUtils
using "apps/lib/json_native/utils/escape.hako" as EscapeUtils

print("🧪 Utils層テスト開始")

// ===== StringUtilsテスト =====

print("\n📝 StringUtilsテスト")

// トリム機能テスト
local trimmed = StringUtils.trim("  hello world  ")
print("trim test: '" + trimmed + "'")  // 期待値: 'hello world'

// 文字判定テスト
print("is_digit('5'): " + StringUtils.is_digit("5"))     // true
print("is_digit('a'): " + StringUtils.is_digit("a"))     // false
print("is_alpha('A'): " + StringUtils.is_alpha("A"))     // true
print("is_alpha('1'): " + StringUtils.is_alpha("1"))     // false

// 文字列検索テスト
print("index_of('hello', 'l'): " + StringUtils.index_of("hello", "l"))  // 2
print("contains('hello', 'ell'): " + StringUtils.contains("hello", "ell"))  // true

// 大文字小文字変換テスト
print("to_upper('hello'): " + StringUtils.to_upper("hello"))  // HELLO
print("to_lower('WORLD'): " + StringUtils.to_lower("WORLD"))  // world

// 配列結合テスト
local arr = new ArrayBox()
arr.push("a")
arr.push("b")
arr.push("c")
print("join test: " + StringUtils.join(arr, ","))  // a,b,c

// 数値判定・変換テスト
print("is_integer('42'): " + StringUtils.is_integer("42"))    // true
print("is_integer('abc'): " + StringUtils.is_integer("abc"))  // false
print("parse_integer('42'): " + StringUtils.parse_integer("42"))  // 42

// ===== EscapeUtilsテスト =====

print("\n🔒 EscapeUtilsテスト")

// 基本エスケープテスト
print("escape_string('hello'): " + EscapeUtils.escape_string("hello"))
print("escape_string('say \"hi\"'): " + EscapeUtils.escape_string("say \"hi\""))

// クォート機能テスト
print("quote_string('hello'): " + EscapeUtils.quote_string("hello"))

// アンエスケープテスト
local escaped = "say \\\"hi\\\""
local unescaped = EscapeUtils.unescape_string(escaped)
print("unescape test: " + unescaped)

// クォート除去テスト
local quoted = "\"hello world\""
local unquoted = EscapeUtils.unquote_string(quoted)
print("unquote test: " + unquoted)

// 妥当性検証テスト
print("validate_string('hello'): " + EscapeUtils.validate_string("hello"))
print("validate_string('hello\\nworld'): " + EscapeUtils.validate_string("hello\\nworld"))

// 安全表示テスト
print("safe_display('hello\\tworld'): " + EscapeUtils.safe_display("hello\tworld"))

print("\n✅ Utils層テスト完了！")
print("🎯 美しいモジュラー設計の威力を確認")
