#!/bin/bash # set -eは使わない(個々のテストが失敗しても続行するため) # stringbox_basic.sh - StringBoxの基本操作テスト # 共通ライブラリ読み込み(必須) source "$(dirname "$0")/../../lib/test_runner.sh" source "$(dirname "$0")/../../lib/result_checker.sh" source "$(dirname "$0")/_ensure_fixture.sh" # 環境チェック(必須) require_env || exit 2 # プラグイン整合性チェック(必須) preflight_plugins || exit 2 # 可能ならフィクスチャプラグインも整備(無くても続行可) ensure_fixture_plugin || true # テスト実装 test_stringbox_new() { local script=' local s s = new StringBox("Hello") print(s) ' local output output=$(run_nyash_vm -c "$script" 2>&1) # Plugin-first prints a descriptor like "StringBox()"; legacy builtin prints the raw string. if echo "$output" | grep -q '^StringBox('; then check_regex '^StringBox\([0-9]\+\)$' "$output" "stringbox_new_plugin" else check_exact "Hello" "$output" "stringbox_new_builtin" fi } test_stringbox_length() { local script=' local s s = new StringBox("Nyash") print(s.length()) ' local output output=$(run_nyash_vm -c "$script" 2>&1) # If VM currently lacks StringBox.length route, skip gracefully in quick profile. if echo "$output" | grep -q 'BoxCall unsupported on StringBox.length'; then test_skip "stringbox_length (plugin method path not wired yet)" return 0 fi # Plugin-first prints IntegerBox descriptor; legacy builtin prints numeric. if echo "$output" | grep -q '^IntegerBox('; then check_regex '^IntegerBox\([0-9]\+\)$' "$output" "stringbox_length_plugin" else check_exact "5" "$output" "stringbox_length_builtin" fi } test_stringbox_concat() { # Phase 15.5: VM does not yet route StringBox.concat via plugin; use literal concat to validate concat semantics. local script=' print("Hello" + " World") ' local output output=$(run_nyash_vm -c "$script" 2>&1) check_exact "Hello World" "$output" "stringbox_concat_literals" } # テスト実行 run_test "stringbox_new" test_stringbox_new run_test "stringbox_length" test_stringbox_length run_test "stringbox_concat" test_stringbox_concat