git.delta.rocks / jrsonnet / refs/commits / bd50dd196053

difftreelog

source

tests/tests/common.rs1.8 KiBsourcehistory
1use jrsonnet_evaluator::{2	ContextBuilder, ContextInitializer as ContextInitializerT, ObjValueBuilder, Result, Thunk, Val,3	bail,4	function::{FuncVal, builtin},5	parser::Source,6};7use jrsonnet_gcmodule::Trace;89#[macro_export]10macro_rules! ensure_eq {11	($a:expr, $b:expr $(,)?) => {{12		let a = &$a;13		let b = &$b;14		if a != b {15			::jrsonnet_evaluator::bail!("assertion failed: a != b\na={a:#?}\nb={b:#?}")16		}17	}};18}1920#[macro_export]21macro_rules! ensure {22	($v:expr $(,)?) => {23		if !$v {24			::jrsonnet_evaluator::bail!("assertion failed: {}", stringify!($v))25		}26	};27}2829#[macro_export]30macro_rules! ensure_val_eq {31	($a:expr, $b:expr) => {{32		if !::jrsonnet_evaluator::val::equals(&$a.clone(), &$b.clone())? {33			use ::jrsonnet_evaluator::manifest::JsonFormat;34			::jrsonnet_evaluator::bail!(35				"assertion failed: a != b\na={:#?}\nb={:#?}",36				$a.manifest(JsonFormat::default())?,37				$b.manifest(JsonFormat::default())?,38			)39		}40	}};41}4243#[builtin]44fn assert_throw(lazy: Thunk<Val>, message: String) -> Result<bool> {45	match lazy.evaluate() {46		Ok(_) => {47			bail!("expected argument to throw on evaluation, but it returned instead")48		}49		Err(e) => {50			let error = format!("{}", e.error());51			ensure_eq!(message, error);52		}53	}54	Ok(true)55}5657#[builtin]58fn param_names(fun: FuncVal) -> Vec<String> {59	fun.params()60		.iter()61		.map(|v| v.name().as_str().unwrap_or("<unnamed>").to_owned())62		.collect()63}6465#[derive(Trace)]66#[allow(dead_code)]67pub struct ContextInitializer;68impl ContextInitializerT for ContextInitializer {69	fn populate(&self, _for_file: Source, builder: &mut ContextBuilder) {70		let mut bobj = ObjValueBuilder::new();71		bobj.method("assertThrow", assert_throw::INST);72		bobj.method("paramNames", param_names::INST);7374		builder.bind("test", Thunk::evaluated(Val::Obj(bobj.build())));75	}7677	fn as_any(&self) -> &dyn std::any::Any {78		self79	}80}