mirror of
https://github.com/fluencelabs/jsonpath
synced 2025-03-16 15:30:50 +00:00
select code coverage
This commit is contained in:
parent
c19c75dac5
commit
f536391b71
@ -995,28 +995,44 @@ impl<'a, 'b> NodeVisitor for Selector<'a, 'b> {
|
||||
.push(Some(ExprTerm::Number(Number::from_f64(*v).unwrap())));
|
||||
}
|
||||
ParseToken::Filter(ref ft) => {
|
||||
if let Some(Some(ref right)) = self.terms.pop() {
|
||||
if let Some(Some(left)) = self.terms.pop() {
|
||||
let mut ret = None;
|
||||
match ft {
|
||||
FilterToken::Equal => left.eq(right, &mut ret),
|
||||
FilterToken::NotEqual => left.ne(right, &mut ret),
|
||||
FilterToken::Greater => left.gt(right, &mut ret),
|
||||
FilterToken::GreaterOrEqual => left.ge(right, &mut ret),
|
||||
FilterToken::Little => left.lt(right, &mut ret),
|
||||
FilterToken::LittleOrEqual => left.le(right, &mut ret),
|
||||
FilterToken::And => left.and(right, &mut ret),
|
||||
FilterToken::Or => left.or(right, &mut ret),
|
||||
};
|
||||
let ref right = match self.terms.pop() {
|
||||
Some(Some(right)) => right,
|
||||
Some(None) => ExprTerm::Json(
|
||||
None,
|
||||
match &self.current {
|
||||
Some(current) => current.to_vec(),
|
||||
_ => unreachable!(),
|
||||
},
|
||||
),
|
||||
_ => panic!("empty term right"),
|
||||
};
|
||||
|
||||
if let Some(e) = ret {
|
||||
self.terms.push(Some(e));
|
||||
}
|
||||
} else {
|
||||
unreachable!()
|
||||
}
|
||||
} else {
|
||||
unreachable!()
|
||||
let left = match self.terms.pop() {
|
||||
Some(Some(left)) => left,
|
||||
Some(None) => ExprTerm::Json(
|
||||
None,
|
||||
match &self.current {
|
||||
Some(current) => current.to_vec(),
|
||||
_ => unreachable!(),
|
||||
},
|
||||
),
|
||||
_ => panic!("empty term left"),
|
||||
};
|
||||
|
||||
let mut ret = None;
|
||||
match ft {
|
||||
FilterToken::Equal => left.eq(right, &mut ret),
|
||||
FilterToken::NotEqual => left.ne(right, &mut ret),
|
||||
FilterToken::Greater => left.gt(right, &mut ret),
|
||||
FilterToken::GreaterOrEqual => left.ge(right, &mut ret),
|
||||
FilterToken::Little => left.lt(right, &mut ret),
|
||||
FilterToken::LittleOrEqual => left.le(right, &mut ret),
|
||||
FilterToken::And => left.and(right, &mut ret),
|
||||
FilterToken::Or => left.or(right, &mut ret),
|
||||
};
|
||||
|
||||
if let Some(e) = ret {
|
||||
self.terms.push(Some(e));
|
||||
}
|
||||
}
|
||||
ParseToken::Range(from, to, step) => {
|
||||
|
@ -343,6 +343,22 @@ fn op_complex() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn op_compare() {
|
||||
setup();
|
||||
|
||||
for path in [
|
||||
r#"$[?("1" == 1)]"#,
|
||||
r#"$[?(1 == "1")]"#,
|
||||
r#"$[?(true == 1)]"#,
|
||||
r#"$[?(@ == 1)]"#,
|
||||
]
|
||||
.iter()
|
||||
{
|
||||
select_and_then_compare(path, json!({}), json!([Value::Null]));
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn example() {
|
||||
setup();
|
||||
|
Loading…
x
Reference in New Issue
Block a user