use crate::common;
use common::e2e_helpers::{create_runtime_with_finalize, transpile};
#[test]
fn test_local_scene_call_simple() {
let lua = create_runtime_with_finalize().unwrap();
let pasta_source = "\
*テスト
>サブシーン
・サブシーン
さくら:サブシーンだよ。
";
let lua_code = transpile(pasta_source);
lua.load(&lua_code).exec().unwrap();
lua.load("require('pasta').finalize_scene()")
.exec()
.unwrap();
let found: bool = lua
.load(
r#"
local SCENE = require "pasta.scene"
local gn = SCENE.get_global_table("テスト1").__global_name__
local result = SCENE.search("サブシーン", gn)
return result ~= nil and type(result.func) == "function"
"#,
)
.eval()
.unwrap();
assert!(
found,
"Local scene 'サブシーン' should be found and callable via finalize path"
);
}
#[test]
fn test_local_scene_call_duplicate_random_selection() {
let lua = create_runtime_with_finalize().unwrap();
let pasta_source = "\
*テスト
>Head0
・Head0
さくら:バリエーション1。
・Head0
さくら:バリエーション2。
";
let lua_code = transpile(pasta_source);
lua.load(&lua_code).exec().unwrap();
lua.load("require('pasta').finalize_scene()")
.exec()
.unwrap();
let success: bool = lua
.load(
r#"
local SCENE = require "pasta.scene"
local gn = SCENE.get_global_table("テスト1").__global_name__
for i = 1, 10 do
local result = SCENE.search("Head0", gn)
if result == nil or type(result.func) ~= "function" then
return false
end
end
return true
"#,
)
.eval()
.unwrap();
assert!(
success,
"Duplicate local scenes 'Head0' should always resolve without error"
);
}
#[test]
fn test_local_scene_call_prefix_match() {
let lua = create_runtime_with_finalize().unwrap();
let pasta_source = "\
*テスト
>Head0
・Head0
さくら:ゼロ。
・Head1
さくら:ワン。
";
let lua_code = transpile(pasta_source);
lua.load(&lua_code).exec().unwrap();
lua.load("require('pasta').finalize_scene()")
.exec()
.unwrap();
let success: bool = lua
.load(
r#"
local SCENE = require "pasta.scene"
local gn = SCENE.get_global_table("テスト1").__global_name__
local result = SCENE.search("Head", gn)
if result == nil then
return false
end
-- local_name should contain "Head"
return result.local_name ~= nil and string.find(result.local_name, "Head") ~= nil
"#,
)
.eval()
.unwrap();
assert!(
success,
"Prefix search 'Head' should find a local scene via finalize path"
);
}