mirror of
https://github.com/fluencelabs/jsonpath
synced 2025-04-01 22:41:06 +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())));
|
.push(Some(ExprTerm::Number(Number::from_f64(*v).unwrap())));
|
||||||
}
|
}
|
||||||
ParseToken::Filter(ref ft) => {
|
ParseToken::Filter(ref ft) => {
|
||||||
if let Some(Some(ref right)) = self.terms.pop() {
|
let ref right = match self.terms.pop() {
|
||||||
if let Some(Some(left)) = self.terms.pop() {
|
Some(Some(right)) => right,
|
||||||
let mut ret = None;
|
Some(None) => ExprTerm::Json(
|
||||||
match ft {
|
None,
|
||||||
FilterToken::Equal => left.eq(right, &mut ret),
|
match &self.current {
|
||||||
FilterToken::NotEqual => left.ne(right, &mut ret),
|
Some(current) => current.to_vec(),
|
||||||
FilterToken::Greater => left.gt(right, &mut ret),
|
_ => unreachable!(),
|
||||||
FilterToken::GreaterOrEqual => left.ge(right, &mut ret),
|
},
|
||||||
FilterToken::Little => left.lt(right, &mut ret),
|
),
|
||||||
FilterToken::LittleOrEqual => left.le(right, &mut ret),
|
_ => panic!("empty term right"),
|
||||||
FilterToken::And => left.and(right, &mut ret),
|
};
|
||||||
FilterToken::Or => left.or(right, &mut ret),
|
|
||||||
};
|
|
||||||
|
|
||||||
if let Some(e) = ret {
|
let left = match self.terms.pop() {
|
||||||
self.terms.push(Some(e));
|
Some(Some(left)) => left,
|
||||||
}
|
Some(None) => ExprTerm::Json(
|
||||||
} else {
|
None,
|
||||||
unreachable!()
|
match &self.current {
|
||||||
}
|
Some(current) => current.to_vec(),
|
||||||
} else {
|
_ => unreachable!(),
|
||||||
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) => {
|
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]
|
#[test]
|
||||||
fn example() {
|
fn example() {
|
||||||
setup();
|
setup();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user