Fix test_spec_ex7_3
This commit is contained in:
parent
ce6b057bfe
commit
b4f94fdca7
5 changed files with 51 additions and 12 deletions
|
@ -156,7 +156,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
|
||||||
-> Result<(), ScanError> {
|
-> Result<(), ScanError> {
|
||||||
match *first_ev {
|
match *first_ev {
|
||||||
Event::Alias => { unimplemented!() },
|
Event::Alias => { unimplemented!() },
|
||||||
Event::Scalar(ref v, style) => {
|
Event::Scalar(_, _) => {
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
},
|
||||||
Event::SequenceStart => {
|
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> {
|
-> Result<(), ScanError> {
|
||||||
let mut ev = try!(self.parse(recv));
|
let mut ev = try!(self.parse(recv));
|
||||||
while ev != Event::MappingEnd {
|
while ev != Event::MappingEnd {
|
||||||
|
@ -187,11 +187,11 @@ impl<T: Iterator<Item=char>> Parser<T> {
|
||||||
Ok(())
|
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> {
|
-> Result<(), ScanError> {
|
||||||
let mut ev = try!(self.parse(recv));
|
let mut ev = try!(self.parse(recv));
|
||||||
while ev != Event::SequenceEnd {
|
while ev != Event::SequenceEnd {
|
||||||
let entry = try!(self.load_node(&ev, recv));
|
try!(self.load_node(&ev, recv));
|
||||||
|
|
||||||
// next event
|
// next event
|
||||||
ev = try!(self.parse(recv));
|
ev = try!(self.parse(recv));
|
||||||
|
@ -367,7 +367,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
|
||||||
self.state = State::BlockMappingFirstKey;
|
self.state = State::BlockMappingFirstKey;
|
||||||
Ok(Event::MappingStart)
|
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);
|
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);
|
self.push_state(State::FlowMappingEmptyValue);
|
||||||
return self.parse_node(false, false);
|
return self.parse_node(false, false);
|
||||||
}
|
}
|
||||||
|
@ -494,7 +498,7 @@ impl<T: Iterator<Item=char>> Parser<T> {
|
||||||
|
|
||||||
if tok.1 == TokenType::ValueToken {
|
if tok.1 == TokenType::ValueToken {
|
||||||
self.skip();
|
self.skip();
|
||||||
let mut tok = try!(self.peek());
|
let tok = try!(self.peek());
|
||||||
match tok.1 {
|
match tok.1 {
|
||||||
TokenType::FlowEntryToken
|
TokenType::FlowEntryToken
|
||||||
| TokenType::FlowMappingEndToken => { },
|
| TokenType::FlowMappingEndToken => { },
|
||||||
|
|
|
@ -553,7 +553,7 @@ impl<T: Iterator<Item=char>> Scanner<T> {
|
||||||
let mut chomping: i32 = 0;
|
let mut chomping: i32 = 0;
|
||||||
let mut increment: usize = 0;
|
let mut increment: usize = 0;
|
||||||
let mut indent: 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 leading_blank: bool = false;
|
||||||
|
|
||||||
let mut string = String::new();
|
let mut string = String::new();
|
||||||
|
@ -742,7 +742,7 @@ impl<T: Iterator<Item=char>> Scanner<T> {
|
||||||
let mut leading_break = String::new();
|
let mut leading_break = String::new();
|
||||||
let mut trailing_breaks = String::new();
|
let mut trailing_breaks = String::new();
|
||||||
let mut whitespaces = String::new();
|
let mut whitespaces = String::new();
|
||||||
let mut leading_blanks = false;
|
let mut leading_blanks;
|
||||||
|
|
||||||
/* Eat the left quote. */
|
/* Eat the left quote. */
|
||||||
self.skip();
|
self.skip();
|
||||||
|
@ -820,7 +820,6 @@ impl<T: Iterator<Item=char>> Scanner<T> {
|
||||||
self.skip();
|
self.skip();
|
||||||
// Consume an arbitrary escape code.
|
// Consume an arbitrary escape code.
|
||||||
if code_length > 0 {
|
if code_length > 0 {
|
||||||
let val = 0usize;
|
|
||||||
self.lookahead(code_length);
|
self.lookahead(code_length);
|
||||||
let mut value = 0u32;
|
let mut value = 0u32;
|
||||||
for i in 0..code_length {
|
for i in 0..code_length {
|
||||||
|
@ -840,7 +839,7 @@ impl<T: Iterator<Item=char>> Scanner<T> {
|
||||||
};
|
};
|
||||||
string.push(ch);
|
string.push(ch);
|
||||||
|
|
||||||
for i in 0..code_length {
|
for _ in 0..code_length {
|
||||||
self.skip();
|
self.skip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1491,5 +1490,29 @@ key:
|
||||||
next!(p, StreamEndToken);
|
next!(p, StreamEndToken);
|
||||||
end!(p);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -205,7 +205,6 @@ impl Index<usize> for Yaml {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use parser::Parser;
|
|
||||||
use yaml::*;
|
use yaml::*;
|
||||||
#[test]
|
#[test]
|
||||||
fn test_coerce() {
|
fn test_coerce() {
|
||||||
|
|
6
saphyr/tests/specs/libyaml_fail-01.yaml
Normal file
6
saphyr/tests/specs/libyaml_fail-01.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Ex 8.18
|
||||||
|
plain key: in-line value
|
||||||
|
: # Both empty
|
||||||
|
"quoted key":
|
||||||
|
- entry
|
||||||
|
|
7
saphyr/tests/specs/libyaml_fail-02.yaml
Normal file
7
saphyr/tests/specs/libyaml_fail-02.yaml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Ex 7.17
|
||||||
|
{
|
||||||
|
unqoted : "separate",
|
||||||
|
http://foo.com,
|
||||||
|
omitted value:,
|
||||||
|
: omitted key,
|
||||||
|
}
|
Loading…
Reference in a new issue