]>
Commit | Line | Data |
---|---|---|
7cac9316 XL |
1 | #![allow(dead_code)] |
2 | #![allow(non_upper_case_globals)] | |
3 | extern crate yaml_rust; | |
4 | ||
5 | use yaml_rust::parser::{Parser, EventReceiver, Event}; | |
6 | use yaml_rust::scanner::TScalarStyle; | |
7 | ||
8 | #[derive(Clone, PartialEq, PartialOrd, Debug)] | |
9 | enum TestEvent { | |
10 | OnDocumentStart, | |
11 | OnDocumentEnd, | |
12 | OnSequenceStart, | |
13 | OnSequenceEnd, | |
14 | OnMapStart, | |
15 | OnMapEnd, | |
16 | OnScalar, | |
17 | OnAlias, | |
18 | OnNull, | |
19 | } | |
20 | ||
21 | struct YamlChecker { | |
22 | pub evs: Vec<TestEvent> | |
23 | } | |
24 | ||
25 | impl EventReceiver for YamlChecker { | |
26 | fn on_event(&mut self, ev: &Event) { | |
27 | let tev = match *ev { | |
28 | Event::DocumentStart => TestEvent::OnDocumentStart, | |
29 | Event::DocumentEnd => TestEvent::OnDocumentEnd, | |
30 | Event::SequenceStart(..) => TestEvent::OnSequenceStart, | |
31 | Event::SequenceEnd => TestEvent::OnSequenceEnd, | |
32 | Event::MappingStart(..) => TestEvent::OnMapStart, | |
33 | Event::MappingEnd => TestEvent::OnMapEnd, | |
34 | Event::Scalar(ref v, style, _, _)=> { | |
35 | if v == "~" && style == TScalarStyle::Plain { | |
36 | TestEvent::OnNull | |
37 | } else { | |
38 | TestEvent::OnScalar | |
39 | } | |
40 | }, | |
41 | Event::Alias(_) => TestEvent::OnAlias, | |
42 | _ => { return } // ignore other events | |
43 | }; | |
44 | self.evs.push(tev); | |
45 | } | |
46 | } | |
47 | ||
48 | fn str_to_test_events(docs: &str) -> Vec<TestEvent> { | |
49 | let mut p = YamlChecker { | |
50 | evs: Vec::new() | |
51 | }; | |
52 | let mut parser = Parser::new(docs.chars()); | |
53 | parser.load(&mut p, true).unwrap(); | |
54 | p.evs | |
55 | } | |
56 | ||
57 | macro_rules! assert_next { | |
58 | ($v:expr, $p:pat) => ( | |
59 | match $v.next().unwrap() { | |
60 | $p => {}, | |
61 | e => { panic!("unexpected event: {:?}", e); } | |
62 | } | |
63 | ) | |
64 | } | |
65 | ||
66 | // auto generated from handler_spec_test.cpp | |
67 | include!("specexamples.rs.inc"); | |
68 | include!("spec_test.rs.inc"); | |
69 | ||
70 | // hand-crafted tests | |
71 | //#[test] | |
72 | //fn test_hc_alias() { | |
73 | //} |