tests: Move test framework into its own crate

This commit is contained in:
Nathan Adams 2023-11-09 12:34:32 +01:00
parent 2f5166790c
commit 673d52f013
16 changed files with 108 additions and 82 deletions

47
Cargo.lock generated
View File

@ -4254,6 +4254,34 @@ dependencies = [
"serde_json",
]
[[package]]
name = "ruffle_test_framework"
version = "0.1.0"
dependencies = [
"anyhow",
"approx",
"async-channel",
"chrono",
"env_logger",
"futures",
"image",
"libtest-mimic",
"pretty_assertions",
"regex",
"ruffle_core",
"ruffle_input_format",
"ruffle_render",
"ruffle_render_wgpu",
"ruffle_socket_format",
"ruffle_video_software",
"serde",
"toml",
"tracing",
"tracing-subscriber",
"url",
"walkdir",
]
[[package]]
name = "ruffle_video"
version = "0.1.0"
@ -4894,26 +4922,9 @@ name = "tests"
version = "0.1.0"
dependencies = [
"anyhow",
"approx",
"async-channel",
"chrono",
"env_logger",
"futures",
"image",
"libtest-mimic",
"pretty_assertions",
"regex",
"ruffle_core",
"ruffle_input_format",
"ruffle_render",
"ruffle_render_wgpu",
"ruffle_socket_format",
"ruffle_video_software",
"serde",
"toml",
"tracing",
"tracing-subscriber",
"url",
"ruffle_test_framework",
"walkdir",
]

View File

@ -27,6 +27,7 @@ members = [
"tests/input-format",
"tests/socket-format",
"tests/mocket",
"tests/framework",
]
default-members = ["desktop"]
resolver = "2"

View File

@ -7,39 +7,20 @@ license.workspace = true
repository.workspace = true
version.workspace = true
[dependencies]
futures = "0.3.29"
ruffle_core = { path = "../core", features = ["deterministic", "timeline_debug", "avm_debug", "audio", "mp3", "default_font"] }
ruffle_render_wgpu = { path = "../render/wgpu" }
ruffle_render = { path = "../render" }
ruffle_input_format = { path = "input-format" }
ruffle_socket_format = { path = "socket-format" }
ruffle_video_software = { path = "../video/software", optional = true }
image = { version = "0.24.7", default-features = false, features = ["png"] }
regex = "1.10.2"
url = "2.4.1"
chrono = "0.4.31"
[features]
# Enable running image comparison tests. This is off by default,
# since the images we compare against are generated on CI, and may
# not match your local machine's Vulkan version / image output.
imgtests = ["ruffle_video_software"]
jpegxr = ["ruffle_core/jpegxr"]
lzma = ["ruffle_core/lzma"]
imgtests = ["ruffle_test_framework/imgtests"]
jpegxr = ["ruffle_test_framework/jpegxr"]
lzma = ["ruffle_test_framework/lzma"]
[dev-dependencies]
approx = "0.5.1"
pretty_assertions = "1.4.0"
env_logger = "0.10.0"
tracing = { workspace = true}
tracing-subscriber = { workspace = true }
serde = "1.0.190"
toml = "0.8.6"
ruffle_core = { path = "../core", features = ["deterministic", "timeline_debug", "avm_debug", "audio", "mp3", "default_font"] }
ruffle_test_framework = { path = "framework" }
libtest-mimic = "0.6.1"
walkdir = "2.4.0"
anyhow = "1.0.75"
async-channel = "1.9.0"
[[test]]
name = "tests"

View File

@ -0,0 +1,37 @@
[package]
name = "ruffle_test_framework"
authors.workspace = true
edition.workspace = true
homepage.workspace = true
license.workspace = true
repository.workspace = true
version.workspace = true
[dependencies]
futures = "0.3.29"
ruffle_core = { path = "../../core", features = ["deterministic", "timeline_debug", "avm_debug", "audio", "mp3", "default_font"] }
ruffle_render_wgpu = { path = "../../render/wgpu" }
ruffle_render = { path = "../../render" }
ruffle_input_format = { path = "../input-format" }
ruffle_socket_format = { path = "../socket-format" }
ruffle_video_software = { path = "../../video/software", optional = true }
image = { version = "0.24.7", default-features = false, features = ["png"] }
regex = "1.10.2"
url = "2.4.1"
chrono = "0.4.31"
approx = "0.5.1"
pretty_assertions = "1.4.0"
env_logger = "0.10.0"
tracing = { workspace = true}
tracing-subscriber = { workspace = true }
serde = "1.0.190"
toml = "0.8.6"
libtest-mimic = "0.6.1"
walkdir = "2.4.0"
anyhow = "1.0.75"
async-channel = "1.9.0"
[features]
imgtests = ["ruffle_video_software"]
jpegxr = ["ruffle_core/jpegxr"]
lzma = ["ruffle_core/lzma"]

View File

@ -1,6 +1,3 @@
// Despite being the older method of defining modules, this is required for test modules
// https://doc.rust-lang.org/book/ch11-03-test-organization.html
pub mod environment;
pub mod fs_commands;
pub mod image_trigger;
@ -24,3 +21,18 @@ impl<'a> std::fmt::Debug for PrettyString<'a> {
f.write_str(self.0)
}
}
pub fn set_logger() {
let _ = env_logger::Builder::from_env(
env_logger::Env::default().default_filter_or("info,wgpu_core=warn,wgpu_hal=warn"),
)
.format_timestamp(None)
.is_test(true)
.try_init();
let subscriber = tracing_subscriber::fmt::Subscriber::builder()
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.finish();
// Ignore error if it's already been set
let _ = tracing::subscriber::set_global_default(subscriber);
}

View File

@ -1,4 +1,4 @@
use crate::util::runner::TestLogBackend;
use crate::runner::TestLogBackend;
use async_channel::Receiver;
use ruffle_core::backend::log::LogBackend;
use ruffle_core::backend::navigator::{

View File

@ -1,6 +1,6 @@
use crate::util::environment::wgpu_descriptors;
use crate::util::image_trigger::ImageTrigger;
use crate::util::runner::TestAudioBackend;
use crate::environment::wgpu_descriptors;
use crate::image_trigger::ImageTrigger;
use crate::runner::TestAudioBackend;
use anyhow::{anyhow, Result};
use approx::assert_relative_eq;
use regex::Regex;

View File

@ -1,9 +1,9 @@
use crate::util::fs_commands::{FsCommand, TestFsCommandProvider};
use crate::util::image_trigger::ImageTrigger;
use crate::util::navigator::TestNavigatorBackend;
use crate::util::options::ImageComparison;
use crate::util::test::Test;
use crate::util::test_ui::TestUiBackend;
use crate::fs_commands::{FsCommand, TestFsCommandProvider};
use crate::image_trigger::ImageTrigger;
use crate::navigator::TestNavigatorBackend;
use crate::options::ImageComparison;
use crate::test::Test;
use crate::test_ui::TestUiBackend;
use anyhow::{anyhow, Result};
use ruffle_core::backend::audio::{
swf, AudioBackend, AudioMixer, DecodeError, RegisterError, SoundHandle, SoundInstanceHandle,
@ -138,7 +138,7 @@ pub fn run_swf(
let mut images = test.options.image_comparisons.clone();
let wgpu_descriptors = if cfg!(feature = "imgtests") && !images.is_empty() {
crate::util::environment::wgpu_descriptors()
crate::environment::wgpu_descriptors()
} else {
None
};

View File

@ -1,7 +1,7 @@
use crate::options::TestOptions;
use crate::runner::run_swf;
use crate::set_logger;
use crate::util::options::TestOptions;
use crate::util::runner::run_swf;
use crate::util::PrettyString;
use crate::PrettyString;
use anyhow::{anyhow, Context, Result};
use pretty_assertions::Comparison;
use ruffle_core::Player;

View File

@ -1,8 +1,8 @@
use crate::external_interface::ExternalInterfaceTestProvider;
use crate::set_logger;
use crate::util::options::TestOptions;
use crate::util::test::Test;
use ruffle_core::external::Value as ExternalValue;
use ruffle_test_framework::options::TestOptions;
use ruffle_test_framework::set_logger;
use ruffle_test_framework::test::Test;
use std::collections::BTreeMap;
use std::path::Path;

View File

@ -7,28 +7,12 @@ use crate::shared_object::{shared_object_avm1, shared_object_avm2, shared_object
use anyhow::Context;
use anyhow::Result;
use libtest_mimic::{Arguments, Trial};
use ruffle_test_framework::test::Test;
use std::panic::{catch_unwind, resume_unwind};
use std::path::Path;
use util::test::Test;
mod external_interface;
mod shared_object;
mod util;
fn set_logger() {
let _ = env_logger::Builder::from_env(
env_logger::Env::default().default_filter_or("info,wgpu_core=warn,wgpu_hal=warn"),
)
.format_timestamp(None)
.is_test(true)
.try_init();
let subscriber = tracing_subscriber::fmt::Subscriber::builder()
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.finish();
// Ignore error if it's already been set
let _ = tracing::subscriber::set_global_default(subscriber);
}
fn is_candidate(args: &Arguments, test_name: &str) -> bool {
if let Some(filter) = &args.filter {

View File

@ -1,7 +1,7 @@
use crate::set_logger;
use crate::util::options::TestOptions;
use crate::util::test::Test;
use ruffle_core::backend::storage::{MemoryStorageBackend, StorageBackend};
use ruffle_test_framework::options::TestOptions;
use ruffle_test_framework::set_logger;
use ruffle_test_framework::test::Test;
use std::path::Path;
pub fn shared_object_avm1() -> Result<(), libtest_mimic::Failed> {