mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
change parse methods: the buffer must be passed on every call to simplify the parser lifetime
This commit is contained in:
parent
dd8cc059c5
commit
f892d406f4
6 changed files with 403 additions and 447 deletions
|
@ -1,80 +1,57 @@
|
|||
extern crate psyc;
|
||||
use psyc::parser::*;
|
||||
|
||||
#[test]
|
||||
fn test_parse() {
|
||||
let test_data = "{foo1} bar1{foo2} bar2".to_string().into_bytes();
|
||||
|
||||
let expected1 = PsycDictParserResult::DictEntry{
|
||||
key: b"foo1",
|
||||
value: b"bar1"
|
||||
};
|
||||
|
||||
let expected2 = PsycDictParserResult::DictEntry{
|
||||
key: b"foo2",
|
||||
value: b"bar2"
|
||||
};
|
||||
|
||||
let expected3 = PsycDictParserResult::Complete;
|
||||
|
||||
let mut parser = PsycDictParser::new();
|
||||
|
||||
parser.set_buffer(&test_data);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected1);
|
||||
assert_eq!(parser.parse().unwrap(), expected2);
|
||||
assert_eq!(parser.parse().unwrap(), expected3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_empty() {
|
||||
let test_data = "".to_string().into_bytes();
|
||||
|
||||
let mut parser = PsycDictParser::new();
|
||||
|
||||
parser.set_buffer(&test_data);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), PsycDictParserResult::Complete);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_incomplete() {
|
||||
let test_data1 = "{foo1}4 bar".to_string().into_bytes();
|
||||
let test_data2 = "1{foo2} bar2".to_string().into_bytes();
|
||||
|
||||
let expected = vec![PsycDictParserResult::DictEntryStart {
|
||||
key: b"foo1",
|
||||
value_part: b"bar"
|
||||
},
|
||||
PsycDictParserResult::DictEntryEnd {
|
||||
value_part: b"1"
|
||||
},
|
||||
PsycDictParserResult::DictEntry {
|
||||
key: b"foo2",
|
||||
value: b"bar2"
|
||||
}];
|
||||
|
||||
let mut parser = PsycDictParser::new();
|
||||
|
||||
parser.set_buffer(&test_data1);
|
||||
assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
|
||||
parser.set_buffer(&test_data2);
|
||||
assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[2]);
|
||||
}
|
||||
|
||||
//#[test]
|
||||
//fn test_insufficient() {
|
||||
// let mut test_data1 = "{4 foo".to_string().into_bytes();
|
||||
// let mut test_data2 = "1} bar1".to_string().into_bytes();
|
||||
// let mut test_data3 = "{4 foo1} bar1".to_string().into_bytes();
|
||||
//fn test_parse() {
|
||||
// let test_data = "{foo1} bar1{foo2} bar2".to_string().into_bytes();
|
||||
//
|
||||
// let expected = vec![PsycDictParserResult::InsufficientData,
|
||||
// PsycDictParserResult::DictEntry {
|
||||
// let expected1 = PsycDictParserResult::DictEntry{
|
||||
// key: b"foo1",
|
||||
// value: b"bar1"
|
||||
// };
|
||||
//
|
||||
// let expected2 = PsycDictParserResult::DictEntry{
|
||||
// key: b"foo2",
|
||||
// value: b"bar2"
|
||||
// };
|
||||
//
|
||||
// let expected3 = PsycDictParserResult::Complete;
|
||||
//
|
||||
// let mut parser = PsycDictParser::new();
|
||||
//
|
||||
// parser.set_buffer(&test_data);
|
||||
//
|
||||
// assert_eq!(parser.parse().unwrap(), expected1);
|
||||
// assert_eq!(parser.parse().unwrap(), expected2);
|
||||
// assert_eq!(parser.parse().unwrap(), expected3);
|
||||
//}
|
||||
//
|
||||
//#[test]
|
||||
//fn test_empty() {
|
||||
// let test_data = "".to_string().into_bytes();
|
||||
//
|
||||
// let mut parser = PsycDictParser::new();
|
||||
//
|
||||
// parser.set_buffer(&test_data);
|
||||
//
|
||||
// assert_eq!(parser.parse().unwrap(), PsycDictParserResult::Complete);
|
||||
//}
|
||||
//
|
||||
//#[test]
|
||||
//fn test_incomplete() {
|
||||
// let test_data1 = "{foo1}4 bar".to_string().into_bytes();
|
||||
// let test_data2 = "1{foo2} bar2".to_string().into_bytes();
|
||||
//
|
||||
// let expected = vec![PsycDictParserResult::DictEntryStart {
|
||||
// key: b"foo1",
|
||||
// value: b"bar1"
|
||||
// value_part: b"bar"
|
||||
// },
|
||||
// PsycDictParserResult::DictEntryEnd {
|
||||
// value_part: b"1"
|
||||
// },
|
||||
// PsycDictParserResult::DictEntry {
|
||||
// key: b"foo2",
|
||||
// value: b"bar2"
|
||||
// }];
|
||||
//
|
||||
// let mut parser = PsycDictParser::new();
|
||||
|
@ -82,9 +59,32 @@ fn test_incomplete() {
|
|||
// parser.set_buffer(&test_data1);
|
||||
// assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
//
|
||||
// //let unparsed_length = parser.copy_unparsed_into_buffer(&mut test_data1);
|
||||
// //test_data1.resize(unparsed_length, 0);
|
||||
// //test_data1.append(&mut test_data2);
|
||||
// parser.set_buffer(&test_data3);
|
||||
// parser.set_buffer(&test_data2);
|
||||
// assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
//
|
||||
// assert_eq!(parser.parse().unwrap(), expected[2]);
|
||||
//}
|
||||
//
|
||||
////#[test]
|
||||
////fn test_insufficient() {
|
||||
//// let mut test_data1 = "{4 foo".to_string().into_bytes();
|
||||
//// let mut test_data2 = "1} bar1".to_string().into_bytes();
|
||||
//// let mut test_data3 = "{4 foo1} bar1".to_string().into_bytes();
|
||||
////
|
||||
//// let expected = vec![PsycDictParserResult::InsufficientData,
|
||||
//// PsycDictParserResult::DictEntry {
|
||||
//// key: b"foo1",
|
||||
//// value: b"bar1"
|
||||
//// }];
|
||||
////
|
||||
//// let mut parser = PsycDictParser::new();
|
||||
////
|
||||
//// parser.set_buffer(&test_data1);
|
||||
//// assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
////
|
||||
//// //let unparsed_length = parser.copy_unparsed_into_buffer(&mut test_data1);
|
||||
//// //test_data1.resize(unparsed_length, 0);
|
||||
//// //test_data1.append(&mut test_data2);
|
||||
//// parser.set_buffer(&test_data3);
|
||||
//// assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
////}
|
||||
|
|
|
@ -21,12 +21,12 @@ fn test_parse() {
|
|||
|
||||
let mut parser = PsycListParser::new();
|
||||
|
||||
parser.set_buffer(&test_data);
|
||||
//parser.set_buffer(&test_data);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected1);
|
||||
assert_eq!(parser.parse().unwrap(), expected2);
|
||||
assert_eq!(parser.parse().unwrap(), expected3);
|
||||
assert_eq!(parser.parse().unwrap(), expected4);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), expected1);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), expected2);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), expected3);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), expected4);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -35,9 +35,9 @@ fn test_empty() {
|
|||
|
||||
let mut parser = PsycListParser::new();
|
||||
|
||||
parser.set_buffer(&test_data);
|
||||
//parser.set_buffer(&test_data);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), PsycListParserResult::Complete);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), PsycListParserResult::Complete);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -57,13 +57,13 @@ fn test_incomplete() {
|
|||
|
||||
let mut parser = PsycListParser::new();
|
||||
|
||||
parser.set_buffer(&test_data1);
|
||||
assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
//parser.set_buffer(&test_data1);
|
||||
assert_eq!(parser.parse(&test_data1).unwrap(), expected[0]);
|
||||
|
||||
parser.set_buffer(&test_data2);
|
||||
assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
//parser.set_buffer(&test_data2);
|
||||
assert_eq!(parser.parse(&test_data2).unwrap(), expected[1]);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[2]);
|
||||
assert_eq!(parser.parse(&test_data2).unwrap(), expected[2]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -78,13 +78,13 @@ fn test_insufficient() {
|
|||
|
||||
let mut parser = PsycListParser::new();
|
||||
|
||||
parser.set_buffer(&test_data1);
|
||||
//parser.set_buffer(&test_data1);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
assert_eq!(parser.parse(&test_data1).unwrap(), expected[0]);
|
||||
|
||||
let unparsed_length = parser.copy_unparsed_into_buffer(&mut test_data1);
|
||||
test_data1.resize(unparsed_length, 0);
|
||||
test_data1.append(&mut test_data2);
|
||||
parser.set_buffer(&test_data1);
|
||||
assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
//parser.set_buffer(&test_data1);
|
||||
assert_eq!(parser.parse(&test_data1).unwrap(), expected[1]);
|
||||
}
|
||||
|
|
|
@ -14,11 +14,8 @@ fn test_parse() {
|
|||
|
||||
let mut parser = PsycParser::new();
|
||||
|
||||
parser.set_buffer(&test_data);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), expected[0]);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), expected[1]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -27,10 +24,8 @@ fn test_empty() {
|
|||
|
||||
let mut parser = PsycParser::new();
|
||||
|
||||
parser.set_buffer(&test_data);
|
||||
|
||||
// FIXME: InsufficientData or Complete?
|
||||
assert_eq!(parser.parse().unwrap(), PsycParserResult::InsufficientData);
|
||||
assert_eq!(parser.parse(&test_data).unwrap(), PsycParserResult::InsufficientData);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -50,12 +45,10 @@ fn test_incomplete() {
|
|||
|
||||
let mut parser = PsycParser::new();
|
||||
|
||||
parser.set_buffer(&test_data1);
|
||||
let _ = parser.parse();
|
||||
assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
let _ = parser.parse(&test_data1);
|
||||
assert_eq!(parser.parse(&test_data1).unwrap(), expected[0]);
|
||||
|
||||
parser.set_buffer(&test_data2);
|
||||
assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
assert_eq!(parser.parse(&test_data2).unwrap(), expected[1]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -79,21 +72,17 @@ fn test_insufficient() {
|
|||
|
||||
let mut parser = PsycParser::new();
|
||||
|
||||
parser.set_buffer(&test_data1[.. 1]);
|
||||
assert_eq!(parser.parse().unwrap(), expected[0]);
|
||||
assert_eq!(parser.parse(&test_data1[.. 1]).unwrap(), expected[0]);
|
||||
|
||||
let unparsed_length = parser.copy_unparsed_into_buffer(&mut test_data1);
|
||||
assert_eq!(unparsed_length, 1);
|
||||
parser.set_buffer(&test_data1[.. 44]);
|
||||
assert_eq!(parser.parse().unwrap(), expected[1]);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[2]);
|
||||
assert_eq!(parser.parse(&test_data1[.. 44]).unwrap(), expected[1]);
|
||||
|
||||
assert_eq!(parser.parse(&test_data1[.. 44]).unwrap(), expected[2]);
|
||||
|
||||
let unparsed_length = parser.copy_unparsed_into_buffer(&mut test_data1);
|
||||
test_data1.resize(unparsed_length, 0);
|
||||
test_data1.append(&mut test_data2);
|
||||
parser.set_buffer(&test_data1);
|
||||
assert_eq!(parser.parse().unwrap(), expected[3]);
|
||||
|
||||
assert_eq!(parser.parse().unwrap(), expected[4]);
|
||||
assert_eq!(parser.parse(&test_data1).unwrap(), expected[3]);
|
||||
assert_eq!(parser.parse(&test_data1).unwrap(), expected[4]);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue