blob: 91bed6ea53d19dfa9dc5b9b97f922e871aa78284 [file] [log] [blame]
// vim: tw=80
//! Attributes are applied to the mock object, too.
#![allow(unused)]
#![deny(warnings)]
use mockall::*;
#[automock]
mod m {
#[cfg(target_os = "multics")]
pub fn bloob(x: DoesNotExist) -> i64 {unimplemented!()}
#[cfg(not(target_os = "multics"))]
pub fn blarg(x: i32) -> i64 {unimplemented!()}
}
#[test]
fn returning() {
let ctx = mock_m::blarg_context();
ctx.expect()
.returning(|x| i64::from(x) + 1);
assert_eq!(5, mock_m::blarg(4));
}
pub struct A{}
#[automock]
impl A {
// Neither A::foo nor MockA::foo should be defined
#[cfg(target_os = "multics")] pub fn foo(&self, x: DoesNotExist) {}
// Both A::bar and MockA::bar should be defined
#[cfg(not(target_os = "multics"))] pub fn bar(&self, _x: i32) -> i32 {0}
}
#[automock]
mod ffi {
extern "C" {
// mock_ffi::baz should not be defined
#[cfg(target_os = "multics")]
pub fn baz(x: DoesNotExist) -> i64;
// mock_ffi::bean should be defined
#[cfg(not(target_os = "multics"))]
pub fn bean(x: u32) -> i64;
}
}
#[test]
fn method() {
let mut mock = MockA::new();
mock.expect_bar()
.returning(|x| x);
assert_eq!(4, mock.bar(4));
}
#[test]
fn foreign() {
let ctx = mock_ffi::bean_context();
ctx.expect().returning(i64::from);
assert_eq!(42, unsafe{mock_ffi::bean(42)});
}