More work on WASM handling.
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2022-08-20 12:22:12 +02:00
parent 703fd2c147
commit 2d4253e155
36 changed files with 922 additions and 87 deletions

View File

@@ -276,7 +276,7 @@ pub fn load_species(path: &String, library: &mut StaticData) {
}
fn load_wasm(path: &String, library: &mut WebAssemblyScriptResolver) {
let file = File::open(path.to_string() + "gen7_scripts_rs.wasm").unwrap();
let file = File::open(path.to_string() + "gen7_scripts.wasm").unwrap();
let mut reader = BufReader::new(file);
let mut buffer = Vec::new();
reader.read_to_end(&mut buffer).unwrap();
@@ -392,7 +392,7 @@ fn parse_effect_parameter(value: &Value) -> EffectParameter {
EffectParameter::Int(n.as_i64().unwrap())
}
}
Value::String(s) => EffectParameter::String(s.clone()),
Value::String(s) => EffectParameter::String(StringKey::new(s.as_str())),
Value::Array(_) => {
panic!("Unexpected type")
}

BIN
tests/data/gen7_scripts.wasm Executable file

Binary file not shown.

Binary file not shown.

View File

@@ -5,10 +5,12 @@
use std::fs::File;
use std::io::Read;
use std::path::Path;
use std::sync::Arc;
use conquer_once::OnceCell;
use pkmn_lib::dynamic_data::{DynamicLibrary, ScriptCategory};
use pkmn_lib::dynamic_data::{DynamicLibrary, MoveChoice, PokemonBuilder, ScriptCategory, TurnChoice};
use pkmn_lib::static_data::EffectParameter;
use crate::common::{library_loader, TestCase};
@@ -51,10 +53,47 @@ fn integration_tests(input: &Path) {
#[test]
#[cfg_attr(miri, ignore)]
fn validate_script() {
let lib = library_loader::load_library();
let lib = get_library();
let script = lib
.load_script(0 as *const u8, ScriptCategory::Move, &"test".into())
.unwrap()
.unwrap();
script.on_initialize(&lib, &[]);
let parameters = [EffectParameter::String("foo".into())];
script.on_initialize(&lib, &parameters);
script.on_initialize(&lib, &parameters);
script.on_initialize(&lib, &parameters);
}
#[test]
#[cfg_attr(miri, ignore)]
fn validate_script_2() {
let lib = get_library();
let script = lib
.load_script(0 as *const u8, ScriptCategory::Move, &"test".into())
.unwrap()
.unwrap();
let user = Arc::new(
PokemonBuilder::new(&lib, "charizard".into(), 100)
.learn_move("fire_blast".into())
.build(),
);
script.on_before_turn(&TurnChoice::Move(MoveChoice::new(
user.clone(),
user.learned_moves().read().get(0).unwrap().as_ref().unwrap().clone(),
0,
0,
)));
assert_eq!(user.current_health(), user.max_health() - 50);
let mut speed: u32 = 100;
script.change_speed(
&TurnChoice::Move(MoveChoice::new(
user.clone(),
user.learned_moves().read().get(0).unwrap().as_ref().unwrap().clone(),
0,
0,
)),
&mut speed,
);
assert_eq!(speed, 684);
}