142 lines
4.4 KiB
Markdown
142 lines
4.4 KiB
Markdown
|
|
# Smoke Tests v2 - Phase 15.5後のテストシステム
|
|||
|
|
|
|||
|
|
## 📋 概要
|
|||
|
|
|
|||
|
|
Phase 15.5でCore Box完全削除後のNyashテストシステム。すべてのBoxがプラグイン化されたため、新しいテスト体系を構築。
|
|||
|
|
|
|||
|
|
## 🚀 クイックスタート
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 基本実行(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**: 同様の問題
|
|||
|
|
|
|||
|
|
## 🔧 テスト環境設定
|
|||
|
|
|
|||
|
|
### 重要な環境変数
|
|||
|
|
```bash
|
|||
|
|
# 必須設定
|
|||
|
|
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設定
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 テストの作成方法
|
|||
|
|
|
|||
|
|
### 基本テンプレート
|
|||
|
|
```bash
|
|||
|
|
#!/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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🐛 トラブルシューティング
|
|||
|
|
|
|||
|
|
### プラグインが見つからない
|
|||
|
|
```bash
|
|||
|
|
# 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 の出力一致確認
|
|||
|
|
- プラグイン動作の一貫性検証
|
|||
|
|
|
|||
|
|
## 🔗 関連ドキュメント
|
|||
|
|
|
|||
|
|
- [Phase 15.5 Core Box Unification](../roadmap/phases/phase-15/phase-15.5-core-box-unification.md)
|
|||
|
|
- [Plugin System Reference](../../reference/plugin-system/)
|
|||
|
|
- [PyVM Usage Guidelines](../../reference/pyvm-usage-guidelines.md)
|