From db573426da88433235dddae2818f431bf92d75c3 Mon Sep 17 00:00:00 2001 From: Jaroslaw Konik Date: Mon, 26 May 2025 07:00:00 +0200 Subject: [PATCH] conditional doctests --- README.md | 2 +- .../ruby/eval_that_causes_runtime_error.rb | 2 + src/lib.rs | 15 +++++ tests/tests.rs | 58 +++++++++++++++---- 4 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 assets/tests/ruby/eval_that_causes_runtime_error.rb diff --git a/README.md b/README.md index 6e55837..85f507a 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ Add the following to your `Cargo.toml`: ```toml [dependencies] -bevy_scriptum = { version = "0.7", features = ["lua"] } +bevy_scriptum = { version = "0.8", features = ["lua"] } ``` or execute `cargo add bevy_scriptum --features lua` from your project directory. diff --git a/assets/tests/ruby/eval_that_causes_runtime_error.rb b/assets/tests/ruby/eval_that_causes_runtime_error.rb new file mode 100644 index 0000000..a8a033e --- /dev/null +++ b/assets/tests/ruby/eval_that_causes_runtime_error.rb @@ -0,0 +1,2 @@ +mark_called +# puts("foo" + 1) diff --git a/src/lib.rs b/src/lib.rs index c2375f6..3ae0518 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,8 +21,10 @@ //! ```no_run //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|runtime| { @@ -42,11 +44,13 @@ //! ```no_run //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! //! #[derive(Component)] //! struct Player; //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|runtime| { @@ -66,8 +70,10 @@ //! ```no_run //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|runtime| { @@ -89,9 +95,11 @@ //! ```no_run //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! //! struct MyPlugin; +//! # #[cfg(feature = "lua")] //! impl Plugin for MyPlugin { //! fn build(&self, app: &mut App) { //! app.add_scripting_api::(|runtime| { @@ -102,6 +110,7 @@ //! } //! } //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|_| { @@ -128,8 +137,10 @@ //! ```no_run //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|runtime| { @@ -154,8 +165,10 @@ //! ```no_run //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|runtime| { @@ -209,8 +222,10 @@ //! ``` //! use bevy::prelude::*; //! use bevy_scriptum::prelude::*; +//! # #[cfg(feature = "lua")] //! use bevy_scriptum::runtimes::lua::prelude::*; //! +//! # #[cfg(feature = "lua")] //! App::new() //! .add_plugins(DefaultPlugins) //! .add_scripting::(|runtime| { diff --git a/tests/tests.rs b/tests/tests.rs index 904c469..fde6066 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -11,6 +11,24 @@ use bevy_scriptum::{FuncArgs, Runtime, prelude::*}; #[cfg(any(feature = "rhai", feature = "lua", feature = "ruby"))] static TRACING_SUBSCRIBER: OnceLock<()> = OnceLock::new(); +#[cfg(any(feature = "rhai", feature = "lua", feature = "ruby"))] +#[derive(Default, Resource)] +struct TimesCalled { + times_called: u8, +} + +macro_rules! assert_n_times_called { + ($app: expr, $count: expr) => { + assert_eq!( + $app.world() + .get_resource::() + .unwrap() + .times_called, + $count + ); + }; +} + #[cfg(any(feature = "rhai", feature = "lua", feature = "ruby"))] fn build_test_app() -> App { let mut app = App::new(); @@ -224,6 +242,33 @@ macro_rules! scripting_tests { ); } + #[test] + fn eval_that_casues_runtime_error_doesnt_panic() { + let mut app = build_test_app(); + + app.add_scripting::<$runtime>(|r| { + r.add_function( + String::from("mark_called"), + |mut times_called: ResMut| { + times_called.times_called += 1; + }, + ); + }) + .init_resource::(); + + run_script::<$runtime, _, _>( + &mut app, + format!( + "tests/{}/eval_that_causes_runtime_error.{}", + $script, $extension + ) + .to_string(), + || {}, + ); + + assert_n_times_called!(app, 1); + } + #[test] fn call_script_function_that_casues_runtime_error() { let mut app = build_test_app(); @@ -347,11 +392,6 @@ macro_rules! scripting_tests { fn rust_function_gets_called_from_script() { let mut app = build_test_app(); - #[derive(Default, Resource)] - struct TimesCalled { - times_called: u8, - } - app.world_mut().init_resource::(); app.add_scripting::<$runtime>(|runtime| { @@ -370,13 +410,7 @@ macro_rules! scripting_tests { call_script_on_update_from_rust::<$runtime>, ); - assert_eq!( - app.world() - .get_resource::() - .unwrap() - .times_called, - 1 - ); + assert_n_times_called!(app, 1); } #[test]