2015-05-27 13:57:42 +00:00
|
|
|
#![allow(dead_code)]
|
2015-05-30 10:49:54 +00:00
|
|
|
#![allow(non_upper_case_globals)]
|
2024-04-02 14:57:23 +00:00
|
|
|
extern crate saphyr_parser;
|
2015-05-27 13:57:42 +00:00
|
|
|
|
2024-04-02 14:57:23 +00:00
|
|
|
use saphyr_parser::{Event, EventReceiver, Parser, TScalarStyle};
|
2015-05-27 13:57:42 +00:00
|
|
|
|
2017-05-08 18:35:53 +00:00
|
|
|
// These names match the names used in the C++ test suite.
|
2023-08-11 23:54:46 +00:00
|
|
|
#[cfg_attr(feature = "cargo-clippy", allow(clippy::enum_variant_names))]
|
2015-05-27 13:57:42 +00:00
|
|
|
#[derive(Clone, PartialEq, PartialOrd, Debug)]
|
|
|
|
enum TestEvent {
|
|
|
|
OnDocumentStart,
|
|
|
|
OnDocumentEnd,
|
|
|
|
OnSequenceStart,
|
|
|
|
OnSequenceEnd,
|
|
|
|
OnMapStart,
|
|
|
|
OnMapEnd,
|
|
|
|
OnScalar,
|
|
|
|
OnAlias,
|
|
|
|
OnNull,
|
|
|
|
}
|
|
|
|
|
|
|
|
struct YamlChecker {
|
2018-09-15 16:49:04 +00:00
|
|
|
pub evs: Vec<TestEvent>,
|
2015-05-27 13:57:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl EventReceiver for YamlChecker {
|
2017-06-19 13:41:26 +00:00
|
|
|
fn on_event(&mut self, ev: Event) {
|
|
|
|
let tev = match ev {
|
2015-05-27 13:57:42 +00:00
|
|
|
Event::DocumentStart => TestEvent::OnDocumentStart,
|
|
|
|
Event::DocumentEnd => TestEvent::OnDocumentEnd,
|
2015-05-28 17:56:03 +00:00
|
|
|
Event::SequenceStart(..) => TestEvent::OnSequenceStart,
|
2015-05-27 13:57:42 +00:00
|
|
|
Event::SequenceEnd => TestEvent::OnSequenceEnd,
|
2015-05-28 17:56:03 +00:00
|
|
|
Event::MappingStart(..) => TestEvent::OnMapStart,
|
2015-05-27 13:57:42 +00:00
|
|
|
Event::MappingEnd => TestEvent::OnMapEnd,
|
2018-09-15 16:49:04 +00:00
|
|
|
Event::Scalar(ref v, style, _, _) => {
|
2015-05-27 15:04:03 +00:00
|
|
|
if v == "~" && style == TScalarStyle::Plain {
|
2015-05-27 13:57:42 +00:00
|
|
|
TestEvent::OnNull
|
|
|
|
} else {
|
|
|
|
TestEvent::OnScalar
|
|
|
|
}
|
2018-09-15 16:49:04 +00:00
|
|
|
}
|
2015-05-28 17:56:03 +00:00
|
|
|
Event::Alias(_) => TestEvent::OnAlias,
|
2018-09-15 16:49:04 +00:00
|
|
|
_ => return, // ignore other events
|
2015-05-27 13:57:42 +00:00
|
|
|
};
|
|
|
|
self.evs.push(tev);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn str_to_test_events(docs: &str) -> Vec<TestEvent> {
|
2018-09-15 16:49:04 +00:00
|
|
|
let mut p = YamlChecker { evs: Vec::new() };
|
2024-03-24 21:51:15 +00:00
|
|
|
let mut parser = Parser::new_from_str(docs);
|
2015-05-27 13:57:42 +00:00
|
|
|
parser.load(&mut p, true).unwrap();
|
|
|
|
p.evs
|
|
|
|
}
|
|
|
|
|
|
|
|
macro_rules! assert_next {
|
2018-09-15 16:49:04 +00:00
|
|
|
($v:expr, $p:pat) => {
|
2015-05-27 13:57:42 +00:00
|
|
|
match $v.next().unwrap() {
|
2018-09-15 16:49:04 +00:00
|
|
|
$p => {}
|
|
|
|
e => {
|
2023-12-26 17:08:21 +00:00
|
|
|
panic!("unexpected event: {:?} (expected {:?})", e, stringify!($p));
|
2018-09-15 16:49:04 +00:00
|
|
|
}
|
2015-05-27 13:57:42 +00:00
|
|
|
}
|
2018-09-15 16:49:04 +00:00
|
|
|
};
|
2015-05-27 13:57:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// auto generated from handler_spec_test.cpp
|
|
|
|
include!("specexamples.rs.inc");
|
|
|
|
include!("spec_test.rs.inc");
|