mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 06:11:16 +00:00

The animation should not start when the property is initialized, only when the property is set by the setter
69 lines
2.8 KiB
Rust
69 lines
2.8 KiB
Rust
use std::error::Error;
|
|
use std::{fs::File, io::Write, path::PathBuf};
|
|
|
|
lazy_static::lazy_static! {
|
|
static ref NATIVE_LIB: PathBuf = {
|
|
use test_driver_lib::Message;
|
|
let mut res = PathBuf::new();
|
|
test_driver_lib::run_cargo(&env!("CARGO"), "build", &["-p", "sixtyfps-node"], |message| {
|
|
if let Message::CompilerArtifact(artifact) = message {
|
|
if artifact.target.name != "sixtyfps_node_native" {
|
|
return Ok(());
|
|
}
|
|
assert!(res.as_os_str().is_empty(), "There must be only one target with name 'sixtyfps_node_native'");
|
|
res = artifact.filenames[0].clone();
|
|
} else if let Message::CompilerMessage(cm) = message {
|
|
println!("{}", cm);
|
|
}
|
|
Ok(())
|
|
}).expect("Could not run cargo build to extract native node plugin path");
|
|
assert!(!res.as_os_str().is_empty(), "Did not find the native nodejs lib (sixtyfps_node_native)");
|
|
res
|
|
};
|
|
}
|
|
|
|
pub fn test(testcase: &test_driver_lib::TestCase) -> Result<(), Box<dyn Error>> {
|
|
let native_lib = NATIVE_LIB.as_os_str();
|
|
|
|
let mut sixtyfpspath = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
|
|
sixtyfpspath.pop(); // driver
|
|
sixtyfpspath.pop(); // tests
|
|
sixtyfpspath.push("api/sixtyfps-node/lib/index.js");
|
|
|
|
let dir = tempfile::tempdir()?;
|
|
|
|
let mut main_js = File::create(dir.path().join("main.js"))?;
|
|
write!(
|
|
main_js,
|
|
r#"
|
|
const assert = require('assert').strict;
|
|
let sixtyfpslib = require("{sixtyfpspath}");
|
|
let sixtyfps = require("{path}");
|
|
"#,
|
|
sixtyfpspath = sixtyfpspath.to_string_lossy(),
|
|
path = testcase.absolute_path.to_string_lossy()
|
|
)?;
|
|
let source = std::fs::read_to_string(&testcase.absolute_path)?;
|
|
let include_paths = test_driver_lib::extract_include_paths(&source);
|
|
for x in test_driver_lib::extract_test_functions(&source).filter(|x| x.language_id == "js") {
|
|
write!(main_js, "{{\n {}\n}}\n", x.source.replace("\n", "\n "))?;
|
|
}
|
|
|
|
let output = std::process::Command::new("node")
|
|
.arg(dir.path().join("main.js"))
|
|
.current_dir(dir.path())
|
|
.env("SIXTYFPS_NODE_NATIVE_LIB", native_lib)
|
|
.env("SIXTYFPS_INCLUDE_PATH", std::env::join_paths(include_paths).unwrap())
|
|
.stdout(std::process::Stdio::piped())
|
|
.stderr(std::process::Stdio::piped())
|
|
.output()
|
|
.map_err(|err| format!("Could not launch npm start: {}", err))?;
|
|
|
|
if !output.status.success() {
|
|
print!("{}", String::from_utf8_lossy(output.stdout.as_ref()));
|
|
print!("{}", String::from_utf8_lossy(output.stderr.as_ref()));
|
|
return Err(String::from_utf8_lossy(output.stderr.as_ref()).to_owned().into());
|
|
}
|
|
|
|
Ok(())
|
|
}
|