use std::fs;
use std::io::Write;
use uxn_tal_defined::v1::{ProtocolParseResult, ProtocolVarVar};
use uxn_tal_defined::EmulatorLauncher;
#[test]
fn test_basic_mode_with_uxn_mapper() {
let temp_dir = tempfile::tempdir().expect("create temp dir");
let bas_path = temp_dir.path().join("test.bas");
let mut f = fs::File::create(&bas_path).expect("create .bas file");
writeln!(f, "10 PRINT \"HELLO WORLD\"").unwrap();
let mut result = ProtocolParseResult {
url_raw:
"uxntal://https://git.sr.ht/~rabbits/tiny-basic/tree/main/item/examples/sierpinski.bas"
.to_string(),
raw: Default::default(),
proto_vars: Default::default(),
query_vars: Default::default(),
bang_vars: Default::default(),
url: "https://git.sr.ht/~rabbits/tiny-basic/tree/main/item/examples/sierpinski.bas"
.to_string(),
protocol: "uxntal".to_string(),
query_string: "".to_string(),
repo_ref: None,
};
result
.proto_vars
.insert("basic".to_string(), ProtocolVarVar::Bool(true));
let mapper = uxn_tal_defined::emu_uxn::UxnMapper;
let cmd = mapper.build_command(
&result,
"test.bas",
std::path::Path::new("uxnemu"),
Some(temp_dir.path()),
);
let args: Vec<String> = cmd
.get_args()
.map(|a| a.to_string_lossy().to_string())
.collect();
assert_eq!(args.len(), 1, "Should have 1 argument: the .bas file");
assert_eq!(args[0], "test.bas", "First arg should be the .bas file");
}
#[test]
fn test_auto_detection_bas_file() {
let url =
"uxntal://https://git.sr.ht/~rabbits/tiny-basic/tree/main/item/examples/sierpinski.bas";
let parsed = uxn_tal::parse_uxntal_url(url);
assert_eq!(
parsed.proto_vars.get("basic"),
Some(&uxn_tal_defined::v1::ProtocolVarVar::Bool(true)),
"basic mode should be automatically enabled for .bas files"
);
}
#[test]
fn test_bas_and_orca_modes_dont_conflict() {
let bas_url = "uxntal://github.com/example/repo/program.bas";
let bas_parsed = uxn_tal::parse_uxntal_url(bas_url);
let orca_url = "uxntal://github.com/example/repo/song.orca";
let orca_parsed = uxn_tal::parse_uxntal_url(orca_url);
assert_eq!(
bas_parsed.proto_vars.get("basic"),
Some(&uxn_tal_defined::v1::ProtocolVarVar::Bool(true)),
".bas file should enable basic mode"
);
assert_eq!(
bas_parsed.proto_vars.get("orca"),
None,
".bas file should not enable orca mode"
);
assert_eq!(
orca_parsed.proto_vars.get("orca"),
Some(&uxn_tal_defined::v1::ProtocolVarVar::Bool(true)),
".orca file should enable orca mode"
);
assert_eq!(
orca_parsed.proto_vars.get("basic"),
None,
".orca file should not enable basic mode"
);
}