Results do not match other implementations #6

This commit is contained in:
freestrings 2019-06-17 12:07:52 +09:00
parent 1a5e8cc025
commit b41b9f3aa6
3 changed files with 28 additions and 0 deletions

View File

@ -263,6 +263,13 @@ mod parser_tests {
ParseToken::ArrayEof
]));
assert_eq!(run("$[:]"), Ok(vec![
ParseToken::Absolute,
ParseToken::Array,
ParseToken::Range(None, None),
ParseToken::ArrayEof
]));
match run("$[") {
Ok(_) => panic!(),
_ => {}
@ -520,5 +527,12 @@ mod tokenizer_tests {
]
, Some(TokenError::Eof)
));
run("$[:]", (vec![
Token::Absolute(0),
Token::OpenArray(1),
Token::Split(2),
Token::CloseArray(3)
], Some(TokenError::Eof)));
}
}

View File

@ -375,6 +375,13 @@ impl Parser {
fn range_to(tokenizer: &mut TokenReader) -> ParseResult<Node> {
debug!("#range_to");
match tokenizer.peek_token() {
Ok(Token::CloseArray(_)) => {
return Ok(Self::node(ParseToken::Range(None, None)))
}
_ => {}
}
match tokenizer.next_token() {
Ok(Token::Key(pos, ref val)) => {
let digit = utils::string_to_isize(val, || tokenizer.err_msg_with_pos(pos))?;

View File

@ -349,4 +349,11 @@ fn filer_same_obj() {
{"a": 1},
{"a": 1}
]));
}
#[test]
fn empty_range() {
setup();
select_and_then_compare("$[:]", json!(["first", "second"]), json!(["first", "second"]));
}