Fix test_spec_ex7_3

This commit is contained in:
Yuheng Chen 2015-05-28 17:18:20 +08:00
parent ce6b057bfe
commit b4f94fdca7
5 changed files with 51 additions and 12 deletions

View file

@ -156,7 +156,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
-> Result<(), ScanError> {
match *first_ev {
Event::Alias => { unimplemented!() },
Event::Scalar(ref v, style) => {
Event::Scalar(_, _) => {
Ok(())
},
Event::SequenceStart => {
@ -170,7 +170,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
}
}
fn load_mapping<R: EventReceiver>(&mut self, first_ev: &Event, recv: &mut R)
fn load_mapping<R: EventReceiver>(&mut self, _first_ev: &Event, recv: &mut R)
-> Result<(), ScanError> {
let mut ev = try!(self.parse(recv));
while ev != Event::MappingEnd {
@ -187,11 +187,11 @@ impl<T: Iterator<Item=char>> Parser<T> {
Ok(())
}
fn load_sequence<R: EventReceiver>(&mut self, first_ev: &Event, recv: &mut R)
fn load_sequence<R: EventReceiver>(&mut self, _first_ev: &Event, recv: &mut R)
-> Result<(), ScanError> {
let mut ev = try!(self.parse(recv));
while ev != Event::SequenceEnd {
let entry = try!(self.load_node(&ev, recv));
try!(self.load_node(&ev, recv));
// next event
ev = try!(self.parse(recv));
@ -367,7 +367,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
self.state = State::BlockMappingFirstKey;
Ok(Event::MappingStart)
},
_ => { unimplemented!(); }
_ => { Err(ScanError::new(tok.0, "while parsing a node, did not find expected node content")) }
}
}
@ -474,7 +474,11 @@ impl<T: Iterator<Item=char>> Parser<T> {
return self.parse_node(false, false);
}
}
} else if (tok.1 != TokenType::FlowMappingEndToken) {
// XXX libyaml fail ex 7.3, empty key
} else if tok.1 == TokenType::ValueToken {
self.state = State::FlowMappingValue;
return Ok(Event::empty_scalar());
} else if tok.1 != TokenType::FlowMappingEndToken {
self.push_state(State::FlowMappingEmptyValue);
return self.parse_node(false, false);
}
@ -494,7 +498,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
if tok.1 == TokenType::ValueToken {
self.skip();
let mut tok = try!(self.peek());
let tok = try!(self.peek());
match tok.1 {
TokenType::FlowEntryToken
| TokenType::FlowMappingEndToken => { },

View file

@ -553,7 +553,7 @@ impl<T: Iterator<Item=char>> Scanner<T> {
let mut chomping: i32 = 0;
let mut increment: usize = 0;
let mut indent: usize = 0;
let mut trailing_blank: bool = false;
let mut trailing_blank: bool;
let mut leading_blank: bool = false;
let mut string = String::new();
@ -742,7 +742,7 @@ impl<T: Iterator<Item=char>> Scanner<T> {
let mut leading_break = String::new();
let mut trailing_breaks = String::new();
let mut whitespaces = String::new();
let mut leading_blanks = false;
let mut leading_blanks;
/* Eat the left quote. */
self.skip();
@ -820,7 +820,6 @@ impl<T: Iterator<Item=char>> Scanner<T> {
self.skip();
// Consume an arbitrary escape code.
if code_length > 0 {
let val = 0usize;
self.lookahead(code_length);
let mut value = 0u32;
for i in 0..code_length {
@ -840,7 +839,7 @@ impl<T: Iterator<Item=char>> Scanner<T> {
};
string.push(ch);
for i in 0..code_length {
for _ in 0..code_length {
self.skip();
}
}
@ -1491,5 +1490,29 @@ key:
next!(p, StreamEndToken);
end!(p);
}
#[test]
fn test_spec_ex7_3() {
let s =
"
{
? foo :,
: bar,
}
";
let mut p = Scanner::new(s.chars());
next!(p, StreamStartToken(..));
next!(p, FlowMappingStartToken);
next!(p, KeyToken);
next_scalar!(p, TScalarStyle::Plain, "foo");
next!(p, ValueToken);
next!(p, FlowEntryToken);
next!(p, ValueToken);
next_scalar!(p, TScalarStyle::Plain, "bar");
next!(p, FlowEntryToken);
next!(p, FlowMappingEndToken);
next!(p, StreamEndToken);
end!(p);
}
}

View file

@ -205,7 +205,6 @@ impl Index<usize> for Yaml {
#[cfg(test)]
mod test {
use parser::Parser;
use yaml::*;
#[test]
fn test_coerce() {

View file

@ -0,0 +1,6 @@
# Ex 8.18
plain key: in-line value
: # Both empty
"quoted key":
- entry

View file

@ -0,0 +1,7 @@
# Ex 7.17
{
unqoted : "separate",
http://foo.com,
omitted value:,
: omitted key,
}