1
0
Fork 0
mirror of git://git.psyc.eu/libpsyc synced 2024-08-15 03:19:02 +00:00

partial parsing possible with PsycParser and PsycListParser

This commit is contained in:
lurchi 2016-09-03 22:38:47 +02:00
parent 6330086b77
commit dd8cc059c5
6 changed files with 640 additions and 249 deletions

View file

@ -0,0 +1,90 @@
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();
//
// 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]);
//}

View file

@ -0,0 +1,90 @@
extern crate psyc;
use psyc::parser::*;
#[test]
fn test_parse() {
let test_data = "| element1| element2| element3".to_string().into_bytes();
let expected1 = PsycListParserResult::ListElement {
value: b"element1"
};
let expected2 = PsycListParserResult::ListElement {
value: b"element2"
};
let expected3 = PsycListParserResult::ListElement {
value: b"element3"
};
let expected4 = PsycListParserResult::Complete;
let mut parser = PsycListParser::new();
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);
}
#[test]
fn test_empty() {
let test_data = "".to_string().into_bytes();
let mut parser = PsycListParser::new();
parser.set_buffer(&test_data);
assert_eq!(parser.parse().unwrap(), PsycListParserResult::Complete);
}
#[test]
fn test_incomplete() {
let test_data1 = "|8 element".to_string().into_bytes();
let test_data2 = "1| element2|".to_string().into_bytes();
let expected = vec![PsycListParserResult::ListElementStart {
value_part: b"element"
},
PsycListParserResult::ListElementEnd {
value_part: b"1"
},
PsycListParserResult::ListElement {
value: b"element2"
}];
let mut parser = PsycListParser::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".to_string().into_bytes();
let mut test_data2 = " foo1".to_string().into_bytes();
let expected = vec![PsycListParserResult::InsufficientData,
PsycListParserResult::ListElement {
value: b"foo1"
}];
let mut parser = PsycListParser::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_data1);
assert_eq!(parser.parse().unwrap(), expected[1]);
}

View file

@ -21,6 +21,43 @@ fn test_parse() {
assert_eq!(parser.parse().unwrap(), expected[1]);
}
#[test]
fn test_empty() {
let test_data = "".to_string().into_bytes();
let mut parser = PsycParser::new();
parser.set_buffer(&test_data);
// FIXME: InsufficientData or Complete?
assert_eq!(parser.parse().unwrap(), PsycParserResult::InsufficientData);
}
#[test]
fn test_incomplete() {
let test_data1 = ":_target\tpsyc://ve.symlynx.com/@blog\n\n:_nick 6\t".to_string().into_bytes();
let test_data2 = "lurchi".to_string().into_bytes();
let expected = vec![PsycParserResult::EntityModifierStart {
operator: ':',
name: b"_nick",
value_part: b""
},
PsycParserResult::EntityModifierEnd {
value_part: b"lurchi"
}];
let mut parser = PsycParser::new();
parser.set_buffer(&test_data1);
let _ = parser.parse();
assert_eq!(parser.parse().unwrap(), expected[0]);
parser.set_buffer(&test_data2);
assert_eq!(parser.parse().unwrap(), expected[1]);
}
#[test]
fn test_insufficient() {
let mut test_data1 = ":_target\tpsyc://ve.symlynx.com/@blog\n\n:_nick".to_string().into_bytes();