tests: Move shared object tests to their own file

This commit is contained in:
Nathan Adams 2023-01-27 19:47:27 +01:00 committed by kmeisthax
parent 792d68d370
commit dda8debadc
2 changed files with 113 additions and 109 deletions

View File

@ -2,10 +2,8 @@
//!
//! Trace output can be compared with correct output from the official Flash Player.
use ruffle_core::backend::storage::{MemoryStorageBackend, StorageBackend};
use crate::external_interface::tests::{external_interface_avm1, external_interface_avm2};
use crate::util::runner::test_swf_with_hooks;
use crate::shared_object::{shared_object_avm1, shared_object_avm2};
use anyhow::Context;
use anyhow::Result;
use libtest_mimic::{Arguments, Trial};
@ -13,6 +11,7 @@ use std::path::Path;
use util::test::Test;
mod external_interface;
mod shared_object;
mod util;
const RUN_IMG_TESTS: bool = cfg!(feature = "imgtests");
@ -24,112 +23,6 @@ fn set_logger() {
.try_init();
}
fn shared_object_avm1() -> Result<()> {
set_logger();
// Test SharedObject persistence. Run an SWF that saves data
// to a shared object twice and verify that the data is saved.
let mut memory_storage_backend: Box<dyn StorageBackend> =
Box::<MemoryStorageBackend>::default();
// Initial run; no shared object data.
test_swf_with_hooks(
Path::new("tests/swfs/avm1/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm1/shared_object/input1.json"),
Path::new("tests/swfs/avm1/shared_object/output1.txt"),
|_player| Ok(()),
|player| {
// Save the storage backend for next run.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
false,
false,
)?;
// Verify that the flash cookie matches the expected one
let expected = std::fs::read("tests/swfs/avm1/shared_object/RuffleTest.sol")?;
std::assert_eq!(
expected,
memory_storage_backend
.get("localhost//RuffleTest")
.unwrap_or_default()
);
// Re-run the SWF, verifying that the shared object persists.
test_swf_with_hooks(
Path::new("tests/swfs/avm1/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm1/shared_object/input2.json"),
Path::new("tests/swfs/avm1/shared_object/output2.txt"),
|player| {
// Swap in the previous storage backend.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
|_player| Ok(()),
false,
false,
)?;
Ok(())
}
fn shared_object_avm2() -> Result<()> {
set_logger();
// Test SharedObject persistence. Run an SWF that saves data
// to a shared object twice and verify that the data is saved.
let mut memory_storage_backend: Box<dyn StorageBackend> =
Box::<MemoryStorageBackend>::default();
// Initial run; no shared object data.
test_swf_with_hooks(
Path::new("tests/swfs/avm2/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm2/shared_object/input1.json"),
Path::new("tests/swfs/avm2/shared_object/output1.txt"),
|_player| Ok(()),
|player| {
// Save the storage backend for next run.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
false,
false,
)?;
// Verify that the flash cookie matches the expected one
let expected = std::fs::read("tests/swfs/avm2/shared_object/RuffleTest.sol")?;
std::assert_eq!(
expected,
memory_storage_backend
.get("localhost//RuffleTest")
.unwrap_or_default()
);
// Re-run the SWF, verifying that the shared object persists.
test_swf_with_hooks(
Path::new("tests/swfs/avm2/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm2/shared_object/input2.json"),
Path::new("tests/swfs/avm2/shared_object/output2.txt"),
|player| {
// Swap in the previous storage backend.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
|_player| Ok(()),
false,
false,
)?;
Ok(())
}
fn main() {
let args = Arguments::from_args();

View File

@ -0,0 +1,111 @@
use crate::set_logger;
use crate::util::runner::test_swf_with_hooks;
use anyhow::Result;
use ruffle_core::backend::storage::{MemoryStorageBackend, StorageBackend};
use std::path::Path;
pub fn shared_object_avm1() -> Result<()> {
set_logger();
// Test SharedObject persistence. Run an SWF that saves data
// to a shared object twice and verify that the data is saved.
let mut memory_storage_backend: Box<dyn StorageBackend> =
Box::<MemoryStorageBackend>::default();
// Initial run; no shared object data.
test_swf_with_hooks(
Path::new("tests/swfs/avm1/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm1/shared_object/input1.json"),
Path::new("tests/swfs/avm1/shared_object/output1.txt"),
|_player| Ok(()),
|player| {
// Save the storage backend for next run.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
false,
false,
)?;
// Verify that the flash cookie matches the expected one
let expected = std::fs::read("tests/swfs/avm1/shared_object/RuffleTest.sol")?;
std::assert_eq!(
expected,
memory_storage_backend
.get("localhost//RuffleTest")
.unwrap_or_default()
);
// Re-run the SWF, verifying that the shared object persists.
test_swf_with_hooks(
Path::new("tests/swfs/avm1/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm1/shared_object/input2.json"),
Path::new("tests/swfs/avm1/shared_object/output2.txt"),
|player| {
// Swap in the previous storage backend.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
|_player| Ok(()),
false,
false,
)?;
Ok(())
}
pub fn shared_object_avm2() -> Result<()> {
set_logger();
// Test SharedObject persistence. Run an SWF that saves data
// to a shared object twice and verify that the data is saved.
let mut memory_storage_backend: Box<dyn StorageBackend> =
Box::<MemoryStorageBackend>::default();
// Initial run; no shared object data.
test_swf_with_hooks(
Path::new("tests/swfs/avm2/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm2/shared_object/input1.json"),
Path::new("tests/swfs/avm2/shared_object/output1.txt"),
|_player| Ok(()),
|player| {
// Save the storage backend for next run.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
false,
false,
)?;
// Verify that the flash cookie matches the expected one
let expected = std::fs::read("tests/swfs/avm2/shared_object/RuffleTest.sol")?;
std::assert_eq!(
expected,
memory_storage_backend
.get("localhost//RuffleTest")
.unwrap_or_default()
);
// Re-run the SWF, verifying that the shared object persists.
test_swf_with_hooks(
Path::new("tests/swfs/avm2/shared_object/test.swf"),
1,
Path::new("tests/swfs/avm2/shared_object/input2.json"),
Path::new("tests/swfs/avm2/shared_object/output2.txt"),
|player| {
// Swap in the previous storage backend.
let mut player = player.lock().unwrap();
std::mem::swap(player.storage_mut(), &mut memory_storage_backend);
Ok(())
},
|_player| Ok(()),
false,
false,
)?;
Ok(())
}