Skip to content

Commit b55a0a0

Browse files
committed
OK
1 parent 9536947 commit b55a0a0

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

tests/helpers/mod.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,51 @@
11
#![allow(dead_code)]
22

3+
use std::rc::Rc;
34
use std::{ffi::CStr, fs::File, io::Write};
45

6+
use mrubyedge::yamrb::helpers::{mrb_call_inspect, mrb_define_cmethod};
7+
use mrubyedge::yamrb::value::RObject;
8+
use mrubyedge::yamrb::vm::VM;
9+
use mrubyedge::Error;
10+
11+
/// Define `Object#assert_eq(expected)` in the VM.
12+
/// Raises RuntimeError if `self != expected`.
13+
pub fn define_assert_eq(vm: &mut VM) {
14+
let object_class = vm.get_class_by_name("Object");
15+
16+
mrb_define_cmethod(
17+
vm,
18+
object_class,
19+
"assert_eq",
20+
Box::new(
21+
|vm: &mut VM, args: &[Rc<RObject>]| -> Result<Rc<RObject>, Error> {
22+
if args.len() < 2 {
23+
return Err(Error::ArgumentError(
24+
"assert_eq requires 2 arguments".to_string(),
25+
));
26+
}
27+
let expected = &args[0];
28+
let got = &args[1];
29+
30+
let expected_inspect = mrb_call_inspect(vm, expected.clone())?;
31+
let got_inspect = mrb_call_inspect(vm, got.clone())?;
32+
33+
let expected_str: String = expected_inspect.as_ref().try_into()?;
34+
let got_str: String = got_inspect.as_ref().try_into()?;
35+
36+
if expected_str != got_str {
37+
return Err(Error::RuntimeError(format!(
38+
"assertion failed: expected {}, got {}",
39+
expected_str, got_str
40+
)));
41+
}
42+
43+
Ok(RObject::nil().to_refcount_assigned())
44+
},
45+
),
46+
);
47+
}
48+
549
pub fn mrbc_compile(fname: &'static str, code: &str) -> Vec<u8> {
650
let mut src = std::env::temp_dir();
751
src.push(format!("{}.{}.rb", fname, std::process::id()));

tests/smoke.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ redis.call("DEL", "mrubyedge_test_key")
2020
let mut rite = mrubyedge::rite::load(&binary).unwrap();
2121
let mut vm = mrubyedge::yamrb::vm::VM::open(&mut rite);
2222
mrubyedge_redis::init_redis(&mut vm);
23-
assert!(vm.run().unwrap().is_nil());
23+
define_assert_eq(&mut vm);
24+
let result = vm.run().unwrap();
25+
let deleted: i32 = result.as_ref().try_into().unwrap();
26+
assert_eq!(deleted, 1);
2427
}
2528

2629
#[test]

0 commit comments

Comments
 (0)