jaq_core/load/
test.rs

1//! Unit tests.
2
3use alloc::vec::Vec;
4
5/// A single jq unit test.
6pub struct Test<S> {
7    /// jq filter
8    pub filter: S,
9    /// input value in JSON format
10    pub input: S,
11    /// output values in JSON format
12    pub output: Vec<S>,
13}
14
15/// Parser for a jq unit test.
16pub struct Parser<I>(I);
17
18impl<I> Parser<I> {
19    /// Create a parser from an iterator over lines.
20    pub fn new(lines: I) -> Self {
21        Self(lines)
22    }
23}
24
25impl<S: core::ops::Deref<Target = str>, I: Iterator<Item = S>> Iterator for Parser<I> {
26    type Item = Test<S>;
27
28    fn next(&mut self) -> Option<Self::Item> {
29        let lines = &mut self.0;
30        Some(Test {
31            filter: lines.find(|l| !(l.is_empty() || l.starts_with('#')))?,
32            input: lines.next()?,
33            output: lines.take_while(|l| !l.is_empty()).collect(),
34        })
35    }
36}