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

difftreelog

source

tests/tests/common.rs1.9 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]44#[allow(dead_code)]45fn assert_throw(lazy: Thunk<Val>, message: String) -> Result<bool> {46	match lazy.evaluate() {47		Ok(_) => {48			bail!("expected argument to throw on evaluation, but it returned instead")49		}50		Err(e) => {51			let error = format!("{}", e.error());52			ensure_eq!(message, error);53		}54	}55	Ok(true)56}5758#[builtin]59#[allow(dead_code)]60fn param_names(fun: FuncVal) -> Vec<String> {61	fun.params()62		.iter()63		.map(|v| v.name().as_str().unwrap_or("<unnamed>").to_owned())64		.collect()65}6667#[derive(Trace)]68#[allow(dead_code)]69pub struct ContextInitializer;70impl ContextInitializerT for ContextInitializer {71	fn populate(&self, _for_file: Source, builder: &mut ContextBuilder) {72		let mut bobj = ObjValueBuilder::new();73		bobj.method("assertThrow", assert_throw {});74		bobj.method("paramNames", param_names {});7576		builder.bind("test", Thunk::evaluated(Val::Obj(bobj.build())));77	}7879	fn as_any(&self) -> &dyn std::any::Any {80		self81	}82}