Files
hakorune/docs/development/testing/smoke-tests-v2.md
Selfhosting Dev 73b90a7c28 feat: スモークテストv2実装&Phase 15.5後のプラグイン対応
Phase 15.5 Core Box削除後の新テストシステム構築:

## 実装内容
- スモークテストv2システム完全実装(3段階プロファイル)
- 共通ライブラリ(test_runner/plugin_manager/result_checker/preflight)
- インタープリター層完全削除(約350行)
- PyVM重要インフラ特化保持戦略(JSON v0ブリッジ専用)
- nyash.tomlパス修正(13箇所、プラグイン正常ロード確認)

## 動作確認済み
- 基本算術演算(+, -, *, /)
- 制御構文(if, loop, break, continue)
- 変数代入とスコープ
- プラグインロード(20個の.soファイル)

## 既知の問題
- StringBox/IntegerBoxメソッドが動作しない
  - オブジェクト生成は成功するがメソッド呼び出しでエラー
  - Phase 15.5影響でプラグイン実装が不完全な可能性

## ドキュメント
- docs/development/testing/smoke-tests-v2.md 作成
- docs/reference/pyvm-usage-guidelines.md 作成
- CODEX_QUESTION.md(Codex相談用)作成

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 09:30:42 +09:00

4.4 KiB
Raw Blame History

Smoke Tests v2 - Phase 15.5後のテストシステム

📋 概要

Phase 15.5でCore Box完全削除後のNyashテストシステム。すべてのBoxがプラグイン化されたため、新しいテスト体系を構築。

🚀 クイックスタート

# 基本実行quick profile
./tools/smokes/v2/run.sh --profile quick

# 統合テスト
./tools/smokes/v2/run.sh --profile integration

# 完全テスト
./tools/smokes/v2/run.sh --profile full

📊 現在の状況2025-09-24

動作確認済み

  • 基本算術演算: 10 + 25, 100 - 42, 7 * 6, 84 / 2
  • 文字列リテラル: "Hello World"
  • 変数代入: local x = 42
  • 制御構文: if, loop, break, continue

⚠️ 既知の問題

  • StringBox: メソッド呼び出しが動作しない
    • new StringBox("test") → オブジェクト生成は成功
    • .toString() → 空文字列を返す
    • .length() → エラーで中断
  • IntegerBox: 同様の問題

🔧 テスト環境設定

重要な環境変数

# 必須設定
NYASH_ENTRY_ALLOW_TOPLEVEL_MAIN=1  # main関数警告を抑制

# プラグイン設定Phase 15.5以降は削除不可)
# NYASH_DISABLE_PLUGINS=1  # ❌ 使用不可(すべてプラグイン化済み)

# デバッグ用
NYASH_CLI_VERBOSE=1        # 詳細ログ出力

プラグイン初期化メッセージ抑制

テスト実行時に以下のメッセージが表示されますが、grep -vで除外済み

[FileBox] Plugin initialized
Net plugin: LOG_ON=false, LOG_PATH=net_plugin.log

📁 ディレクトリ構造

tools/smokes/v2/
├── run.sh                    # メインエントリポイント
├── README.md                 # ユーザーガイド
├── profiles/                 # テストプロファイル
│   ├── quick/                # 1-2分の高速テスト
│   │   ├── core/             # 言語基本機能
│   │   └── boxes/            # Box操作現在一部動作せず
│   ├── integration/          # 5-10分の統合テスト
│   └── full/                 # 15-30分の完全テスト
├── lib/                      # 共通ライブラリ
│   ├── test_runner.sh        # テスト実行器
│   ├── plugin_manager.sh     # プラグイン管理
│   ├── result_checker.sh     # 結果検証
│   └── preflight.sh          # 事前チェック
└── configs/                  # 環境設定
    ├── rust_vm_dynamic.conf  # Rust VM設定
    └── llvm_static.conf      # LLVM設定

🧪 テストの作成方法

基本テンプレート

#!/bin/bash
# test_name.sh - テストの説明

# 共通ライブラリ読み込み(必須)
source "$(dirname "$0")/../../../lib/test_runner.sh"
source "$(dirname "$0")/../../../lib/result_checker.sh"

# 環境チェック(必須)
require_env || exit 2

# プラグイン整合性チェック(必須)
preflight_plugins || exit 2

# テスト実装
test_example() {
    local output
    output=$(run_nyash_vm -c 'print(10 + 20)' 2>&1)
    check_exact "30" "$output" "example_test"
}

# テスト実行
run_test "example" test_example

🐛 トラブルシューティング

プラグインが見つからない

# nyash.tomlのパス設定を確認
grep "path = " nyash.toml

# 正しいパス: plugins/*/lib*.so
# 間違ったパス: target/release/lib*.so

StringBoxが動作しない

Phase 15.5でCore Box削除後、プラグイン実装が不完全。現在調査中。 回避策:基本的な算術演算や制御構文のテストに集中。

プラグイン初期化メッセージが邪魔

lib/test_runner.shで自動的にgrep -vで除外済み。

📝 今後の改善点

  1. StringBox/IntegerBoxプラグインの修正

    • メソッド実装の確認と修正
    • v2プラグインAPIへの完全対応
  2. エラーメッセージの改善

    • プラグインロード失敗時の明確なエラー表示
    • メソッド呼び出し失敗時の詳細情報
  3. パリティテスト強化

    • Rust VM ↔ LLVM の出力一致確認
    • プラグイン動作の一貫性検証

🔗 関連ドキュメント