tests: Add `NavigatorTestBackend`
This commit is contained in:
parent
3716422b37
commit
a38f74d989
|
@ -4175,6 +4175,7 @@ dependencies = [
|
||||||
"ruffle_video_software",
|
"ruffle_video_software",
|
||||||
"serde",
|
"serde",
|
||||||
"toml 0.5.11",
|
"toml 0.5.11",
|
||||||
|
"url",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ ruffle_input_format = { path = "input-format" }
|
||||||
ruffle_video_software = { path = "../video/software", optional = true }
|
ruffle_video_software = { path = "../video/software", optional = true }
|
||||||
image = { version = "0.24.5", default-features = false, features = ["png"] }
|
image = { version = "0.24.5", default-features = false, features = ["png"] }
|
||||||
regex = "1.7.1"
|
regex = "1.7.1"
|
||||||
|
url = "2.3.1"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# Enable running image comparison tests. This is off by default,
|
# Enable running image comparison tests. This is off by default,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// https://doc.rust-lang.org/book/ch11-03-test-organization.html
|
// https://doc.rust-lang.org/book/ch11-03-test-organization.html
|
||||||
|
|
||||||
pub mod environment;
|
pub mod environment;
|
||||||
|
pub mod navigator;
|
||||||
pub mod options;
|
pub mod options;
|
||||||
pub mod runner;
|
pub mod runner;
|
||||||
pub mod test;
|
pub mod test;
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
use ruffle_core::backend::navigator::{
|
||||||
|
NavigationMethod, NavigatorBackend, NullExecutor, NullSpawner, OwnedFuture, Request, Response,
|
||||||
|
};
|
||||||
|
use ruffle_core::indexmap::IndexMap;
|
||||||
|
use ruffle_core::loader::Error;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
|
pub struct NavigatorTestBackend {
|
||||||
|
spawner: NullSpawner,
|
||||||
|
relative_base_path: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl NavigatorTestBackend {
|
||||||
|
pub fn with_base_path(path: &Path, executor: &NullExecutor) -> Result<Self, std::io::Error> {
|
||||||
|
Ok(Self {
|
||||||
|
spawner: executor.spawner(),
|
||||||
|
relative_base_path: path.canonicalize()?,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn url_from_file_path(path: &Path) -> Result<Url, ()> {
|
||||||
|
Url::from_file_path(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl NavigatorBackend for NavigatorTestBackend {
|
||||||
|
fn navigate_to_url(
|
||||||
|
&self,
|
||||||
|
_url: String,
|
||||||
|
_target: String,
|
||||||
|
_vars_method: Option<(NavigationMethod, IndexMap<String, String>)>,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fetch(&self, request: Request) -> OwnedFuture<Response, Error> {
|
||||||
|
let mut path = self.relative_base_path.clone();
|
||||||
|
path.push(request.url());
|
||||||
|
|
||||||
|
Box::pin(async move {
|
||||||
|
let url = Self::url_from_file_path(&path)
|
||||||
|
.map_err(|()| Error::FetchError("Invalid URL".to_string()))?
|
||||||
|
.into();
|
||||||
|
|
||||||
|
let body = std::fs::read(path).map_err(|e| Error::FetchError(e.to_string()))?;
|
||||||
|
|
||||||
|
Ok(Response { url, body })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn spawn_future(&mut self, future: OwnedFuture<(), Error>) {
|
||||||
|
//self.spawner.spawn_local(future);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn pre_process_url(&self, url: Url) -> Url {
|
||||||
|
url
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::util::navigator::NavigatorTestBackend;
|
||||||
use crate::util::test::Test;
|
use crate::util::test::Test;
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use ruffle_core::backend::audio::{
|
use ruffle_core::backend::audio::{
|
||||||
|
@ -5,7 +6,7 @@ use ruffle_core::backend::audio::{
|
||||||
SoundTransform,
|
SoundTransform,
|
||||||
};
|
};
|
||||||
use ruffle_core::backend::log::LogBackend;
|
use ruffle_core::backend::log::LogBackend;
|
||||||
use ruffle_core::backend::navigator::{NullExecutor, NullNavigatorBackend};
|
use ruffle_core::backend::navigator::NullExecutor;
|
||||||
use ruffle_core::events::KeyCode;
|
use ruffle_core::events::KeyCode;
|
||||||
use ruffle_core::events::MouseButton as RuffleMouseButton;
|
use ruffle_core::events::MouseButton as RuffleMouseButton;
|
||||||
use ruffle_core::impl_audio_mixer_backend;
|
use ruffle_core::impl_audio_mixer_backend;
|
||||||
|
@ -84,7 +85,7 @@ pub fn run_swf(
|
||||||
|
|
||||||
let builder = PlayerBuilder::new()
|
let builder = PlayerBuilder::new()
|
||||||
.with_log(TestLogBackend::new(trace_output.clone()))
|
.with_log(TestLogBackend::new(trace_output.clone()))
|
||||||
.with_navigator(NullNavigatorBackend::with_base_path(base_path, &executor)?)
|
.with_navigator(NavigatorTestBackend::with_base_path(base_path, &executor)?)
|
||||||
.with_max_execution_duration(Duration::from_secs(300))
|
.with_max_execution_duration(Duration::from_secs(300))
|
||||||
.with_viewport_dimensions(
|
.with_viewport_dimensions(
|
||||||
movie.width().to_pixels() as u32,
|
movie.width().to_pixels() as u32,
|
||||||
|
|
Loading…
Reference in New Issue