tests: Move ExternalInterfaceTestProvider to its own mod

This commit is contained in:
Nathan Adams 2023-01-27 19:36:51 +01:00 committed by kmeisthax
parent c5ab440083
commit ccc7c0a424
2 changed files with 54 additions and 51 deletions

View File

@ -0,0 +1,52 @@
use ruffle_core::context::UpdateContext;
use ruffle_core::external::Value as ExternalValue;
use ruffle_core::external::{ExternalInterfaceMethod, ExternalInterfaceProvider};
#[derive(Default)]
pub struct ExternalInterfaceTestProvider {}
impl ExternalInterfaceTestProvider {
pub fn new() -> Self {
Default::default()
}
}
fn do_trace(context: &mut UpdateContext<'_, '_>, args: &[ExternalValue]) -> ExternalValue {
context.avm_trace(&format!("[ExternalInterface] trace: {args:?}"));
"Traced!".into()
}
fn do_ping(context: &mut UpdateContext<'_, '_>, _args: &[ExternalValue]) -> ExternalValue {
context.avm_trace("[ExternalInterface] ping");
"Pong!".into()
}
fn do_reentry(context: &mut UpdateContext<'_, '_>, _args: &[ExternalValue]) -> ExternalValue {
context.avm_trace("[ExternalInterface] starting reentry");
if let Some(callback) = context.external_interface.get_callback("callWith") {
callback.call(
context,
"callWith",
vec!["trace".into(), "successful reentry!".into()],
)
} else {
ExternalValue::Null
}
}
impl ExternalInterfaceProvider for ExternalInterfaceTestProvider {
fn get_method(&self, name: &str) -> Option<Box<dyn ExternalInterfaceMethod>> {
match name {
"trace" => Some(Box::new(do_trace)),
"ping" => Some(Box::new(do_ping)),
"reentry" => Some(Box::new(do_reentry)),
_ => None,
}
}
fn on_callback_available(&self, _name: &str) {}
fn on_fs_command(&self, _command: &str, _args: &str) -> bool {
false
}
}

View File

@ -6,10 +6,9 @@ use ruffle_core::backend::{
log::LogBackend, log::LogBackend,
storage::{MemoryStorageBackend, StorageBackend}, storage::{MemoryStorageBackend, StorageBackend},
}; };
use ruffle_core::context::UpdateContext;
use ruffle_core::external::Value as ExternalValue; use ruffle_core::external::Value as ExternalValue;
use ruffle_core::external::{ExternalInterfaceMethod, ExternalInterfaceProvider};
use crate::external_interface::ExternalInterfaceTestProvider;
use crate::util::runner::test_swf_with_hooks; use crate::util::runner::test_swf_with_hooks;
use anyhow::Context; use anyhow::Context;
use anyhow::Result; use anyhow::Result;
@ -24,6 +23,7 @@ use std::path::Path;
use std::rc::Rc; use std::rc::Rc;
use util::test::Test; use util::test::Test;
mod external_interface;
mod util; mod util;
const RUN_IMG_TESTS: bool = cfg!(feature = "imgtests"); const RUN_IMG_TESTS: bool = cfg!(feature = "imgtests");
@ -256,55 +256,6 @@ impl LogBackend for TestLogBackend {
} }
} }
#[derive(Default)]
pub struct ExternalInterfaceTestProvider {}
impl ExternalInterfaceTestProvider {
pub fn new() -> Self {
Default::default()
}
}
fn do_trace(context: &mut UpdateContext<'_, '_>, args: &[ExternalValue]) -> ExternalValue {
context.avm_trace(&format!("[ExternalInterface] trace: {args:?}"));
"Traced!".into()
}
fn do_ping(context: &mut UpdateContext<'_, '_>, _args: &[ExternalValue]) -> ExternalValue {
context.avm_trace("[ExternalInterface] ping");
"Pong!".into()
}
fn do_reentry(context: &mut UpdateContext<'_, '_>, _args: &[ExternalValue]) -> ExternalValue {
context.avm_trace("[ExternalInterface] starting reentry");
if let Some(callback) = context.external_interface.get_callback("callWith") {
callback.call(
context,
"callWith",
vec!["trace".into(), "successful reentry!".into()],
)
} else {
ExternalValue::Null
}
}
impl ExternalInterfaceProvider for ExternalInterfaceTestProvider {
fn get_method(&self, name: &str) -> Option<Box<dyn ExternalInterfaceMethod>> {
match name {
"trace" => Some(Box::new(do_trace)),
"ping" => Some(Box::new(do_ping)),
"reentry" => Some(Box::new(do_reentry)),
_ => None,
}
}
fn on_callback_available(&self, _name: &str) {}
fn on_fs_command(&self, _command: &str, _args: &str) -> bool {
false
}
}
fn main() { fn main() {
let args = Arguments::from_args(); let args = Arguments::from_args();