everyting but promises

This commit is contained in:
Jaroslaw Konik 2025-05-14 15:54:12 +02:00
parent 763550b63a
commit ca508bef58
5 changed files with 27 additions and 45 deletions

View file

@ -0,0 +1,5 @@
def test_func
rust_func.and_then do |x|
print("abc" + 5)
end
end

View file

@ -3,7 +3,7 @@ $state = {
} }
def test_func def test_func
# rust_func.and_then do |x| rust_func.and_then do |x|
# $state['x'] = x $state['x'] = x
# end end
end end

View file

@ -0,0 +1,3 @@
def test_func
spawn_entity
end

View file

@ -331,11 +331,13 @@ impl<T: IntoValue> FuncArgs<'_, RubyValue, RubyRuntime> for Vec<T> {
macro_rules! impl_tuple { macro_rules! impl_tuple {
($($idx:tt $t:tt),+) => { ($($idx:tt $t:tt),+) => {
impl<'a, $($t,)+> FuncArgs<'a, RubyValue, RubyRuntime> impl<'a, $($t: IntoValue,)+> FuncArgs<'a, RubyValue, RubyRuntime>
for ($($t,)+) for ($($t,)+)
{ {
fn parse(self, _engine: &'a magnus::Ruby) -> Vec<RubyValue> { fn parse(self, _engine: &'a magnus::Ruby) -> Vec<RubyValue> {
todo!(); vec![
$(RubyValue::new(self.$idx.into_value()), )+
]
} }
} }
}; };

View file

@ -189,7 +189,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_script_function_gets_called_from_rust_with_heterogenous_params() { fn test_script_function_gets_called_from_rust_with_multiple_params() {
let mut app = build_test_app(); let mut app = build_test_app();
app.add_scripting::<$runtime>(|_| {}); app.add_scripting::<$runtime>(|_| {});
@ -225,33 +225,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_script_function_gets_called_from_rust_with_multiple_params() { fn call_script_function_that_casues_runtime_error() {
let mut app = build_test_app();
app.add_scripting::<$runtime>(|_| {});
let entity_id = run_script::<$runtime, _, _>(
&mut app,
format!(
"tests/{}/script_function_gets_called_from_rust_with_multiple_params.{}",
$script, $extension
)
.to_string(),
|mut scripted_entities: Query<(Entity, &mut <$runtime as Runtime>::ScriptData)>,
scripting_runtime: ResMut<$runtime>| {
let (entity, mut script_data) = scripted_entities.single_mut().unwrap();
scripting_runtime
.call_fn("test_func", &mut script_data, entity, vec![1, 2])
.unwrap();
},
);
<$runtime>::assert_state_key_value_i32(&app.world(), entity_id, "a_value", 1i32);
<$runtime>::assert_state_key_value_i32(&app.world(), entity_id, "b_value", 2i32);
}
#[test]
fn test_call_script_function_that_casues_runtime_error() {
let mut app = build_test_app(); let mut app = build_test_app();
app.add_scripting::<$runtime>(|_| {}); app.add_scripting::<$runtime>(|_| {});
@ -274,18 +248,14 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_call_script_function_that_causes_runtime_error() { fn call_script_function_that_does_not_exist() {
let mut app = build_test_app(); let mut app = build_test_app();
app.add_scripting::<$runtime>(|_| {}); app.add_scripting::<$runtime>(|_| {});
run_script::<$runtime, _, _>( run_script::<$runtime, _, _>(
&mut app, &mut app,
format!( format!("tests/{}/side_effects.{}", $script, $extension).to_string(),
"tests/{}/call_script_function_that_causes_runtime_error.{}",
$script, $extension
)
.to_string(),
|mut scripted_entities: Query<(Entity, &mut <$runtime as Runtime>::ScriptData)>, |mut scripted_entities: Query<(Entity, &mut <$runtime as Runtime>::ScriptData)>,
scripting_runtime: ResMut<$runtime>| { scripting_runtime: ResMut<$runtime>| {
let (entity, mut script_data) = scripted_entities.single_mut().unwrap(); let (entity, mut script_data) = scripted_entities.single_mut().unwrap();
@ -297,7 +267,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_script_function_gets_called_from_rust() { fn script_function_gets_called_from_rust() {
let mut app = build_test_app(); let mut app = build_test_app();
app.add_scripting::<$runtime>(|_| {}); app.add_scripting::<$runtime>(|_| {});
@ -316,7 +286,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_return_via_promise() { fn return_via_promise() {
let mut app = build_test_app(); let mut app = build_test_app();
app.add_scripting::<$runtime>(|runtime| { app.add_scripting::<$runtime>(|runtime| {
@ -333,7 +303,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_promise_runtime_error_does_not_panic() { fn promise_runtime_error() {
let mut app = build_test_app(); let mut app = build_test_app();
app.add_scripting::<$runtime>(|runtime| { app.add_scripting::<$runtime>(|runtime| {
@ -348,7 +318,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_side_effects() { fn side_effects() {
let mut app = build_test_app(); let mut app = build_test_app();
#[derive(Component)] #[derive(Component)]
@ -374,7 +344,7 @@ macro_rules! scripting_tests {
} }
#[test] #[test]
fn test_rust_function_gets_called_from_script() { fn rust_function_gets_called_from_script() {
let mut app = build_test_app(); let mut app = build_test_app();
#[derive(Default, Resource)] #[derive(Default, Resource)]
@ -519,7 +489,9 @@ mod ruby_tests {
value: &str, value: &str,
) { ) {
let runtime = world.get_resource::<RubyRuntime>().unwrap(); let runtime = world.get_resource::<RubyRuntime>().unwrap();
runtime.with_engine(|engine| { let key = key.to_string();
let value = value.to_string();
runtime.with_engine_thread(move |engine| {
let state: magnus::value::Value = engine.eval("$state").unwrap(); let state: magnus::value::Value = engine.eval("$state").unwrap();
let res: String = state.funcall_public("[]", (key,)).unwrap(); let res: String = state.funcall_public("[]", (key,)).unwrap();
assert_eq!(res, value); assert_eq!(res, value);