Skip to content

Commit fb99476

Browse files
committed
add test mod
1 parent c418285 commit fb99476

File tree

3 files changed

+94
-83
lines changed

3 files changed

+94
-83
lines changed

src/parser/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ mod parser2;
1111
mod model2;
1212
mod errors2;
1313
mod macros2;
14+
mod tests;
1415

1516
pub use errors::JsonPathParserError;
1617
pub use model::FilterExpression;

src/parser/parser2.rs

Lines changed: 2 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ use crate::parser::model2::Literal;
99

1010
#[derive(Parser)]
1111
#[grammar = "parser/grammar/json_path_9535.pest"]
12-
struct JSPathParser;
12+
pub(super) struct JSPathParser;
1313
const MAX_VAL: i64 = 9007199254740991; // Maximum safe integer value in JavaScript
1414
const MIN_VAL: i64 = -9007199254740991; // Minimum safe integer value in JavaScript
1515

16-
type Parsed<T> = Result<T, JsonPathParserError>;
16+
pub(super) type Parsed<T> = Result<T, JsonPathParserError>;
1717

1818
/// Parses a string into a [JsonPath].
1919
///
@@ -74,86 +74,5 @@ mod tests {
7474
use pest::error::Error;
7575
use crate::lit;
7676

77-
struct TestPair<T> {
78-
rule: Rule,
79-
parse_fn: fn(Pair<Rule>) -> Parsed<T>,
80-
}
81-
82-
impl<T:PartialEq + Debug> TestPair<T> {
83-
fn new(rule: Rule, parse_fn: fn(Pair<Rule>) -> Parsed<T>) -> Self {
84-
Self {
85-
rule,
86-
parse_fn
87-
}
88-
}
89-
fn assert(self,input:&str, expected:T) -> Self {
90-
match parse(input, self.rule){
91-
Ok(e) => {
92-
assert((self.parse_fn)(e), expected);
93-
},
94-
Err(e) => {
95-
panic!("parsing error `{}`", e);
96-
}
97-
}
98-
self
99-
}
100-
fn assert_fail(self,input:&str) -> Self {
101-
match parse(input, self.rule){
102-
Ok(e) => {
103-
if let Ok(r) = (self.parse_fn)(e) {
104-
panic!("expected error, got {:?}", r);
105-
}
106-
},
107-
Err(_) => {}
108-
}
109-
self
110-
}
111-
}
112-
113-
fn parse(input:&str,rule:Rule) -> Result<Pair<Rule>, Error<Rule>> {
114-
match JSPathParser::parse(rule, input){
115-
Ok(e) => {
116-
Ok(e.into_iter().next().expect("no pairs found"))
117-
},
118-
Err(e) => {
119-
Err(e)
120-
}
121-
}
122-
}
123-
124-
fn assert<T>(result: Parsed<T>, expected:T)
125-
where T:PartialEq + Debug {
126-
match result {
127-
Ok(e) => assert_eq!(e, expected),
128-
Err(e) => {
129-
panic!("parsing error `{}`", e);
130-
}
131-
}
132-
}
13377

134-
135-
#[test]
136-
fn literals(){
137-
138-
TestPair::new(Rule::literal, literal)
139-
.assert("null", lit!())
140-
.assert("false", lit!(b false))
141-
.assert("true", lit!(b true))
142-
.assert("\"hello\"", lit!(s "\"hello\""))
143-
.assert("\'hello\'", lit!(s "\'hello\'"))
144-
.assert("\'hel\\'lo\'", lit!(s "\'hel\\'lo\'"))
145-
.assert("\'hel\"lo\'", lit!(s "\'hel\"lo\'"))
146-
.assert("\'hel\nlo\'", lit!(s "\'hel\nlo\'"))
147-
.assert("\'\"\'", lit!(s "\'\"\'"))
148-
.assert_fail("\'hel\\\"lo\'")
149-
.assert("1", lit!(i 1))
150-
.assert("0", lit!(i 0))
151-
.assert("-0", lit!(i 0))
152-
.assert("1.2", lit!(f 1.2))
153-
.assert("9007199254740990", lit!(i 9007199254740990))
154-
.assert_fail("9007199254740995")
155-
;
156-
157-
158-
}
15978
}

src/parser/tests.rs

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
use crate::parser::model2::Literal;
2+
use std::fmt::Debug;
3+
use pest::error::Error;
4+
use pest::iterators::Pair;
5+
use pest::Parser;
6+
use crate::lit;
7+
use crate::parser::parser2::{literal, Rule};
8+
use std::panic;
9+
10+
struct TestPair<T> {
11+
rule: Rule,
12+
parse_fn: fn(Pair<Rule>) -> crate::parser::parser2::Parsed<T>,
13+
}
14+
15+
impl<T:PartialEq + Debug> TestPair<T> {
16+
fn new(rule: Rule, parse_fn: fn(Pair<Rule>) -> crate::parser::parser2::Parsed<T>) -> Self {
17+
Self {
18+
rule,
19+
parse_fn
20+
}
21+
}
22+
fn assert(self,input:&str, expected:T) -> Self {
23+
match parse(input, self.rule){
24+
Ok(e) => {
25+
assert((self.parse_fn)(e), expected);
26+
},
27+
Err(e) => {
28+
panic!("parsing error `{}`", e);
29+
}
30+
}
31+
self
32+
}
33+
fn assert_fail(self,input:&str) -> Self {
34+
match parse(input, self.rule){
35+
Ok(e) => {
36+
if let Ok(r) = (self.parse_fn)(e) {
37+
panic!("expected error, got {:?}", r);
38+
}
39+
},
40+
Err(_) => {}
41+
}
42+
self
43+
}
44+
}
45+
46+
fn parse(input:&str,rule:Rule) -> Result<Pair<Rule>, Error<Rule>> {
47+
match crate::parser::parser2::JSPathParser::parse(rule, input){
48+
Ok(e) => {
49+
Ok(e.into_iter().next().expect("no pairs found"))
50+
},
51+
Err(e) => {
52+
Err(e)
53+
}
54+
}
55+
}
56+
57+
fn assert<T>(result: crate::parser::parser2::Parsed<T>, expected:T)
58+
where T:PartialEq + Debug {
59+
match result {
60+
Ok(e) => assert_eq!(e, expected),
61+
Err(e) => {
62+
panic!("parsing error `{}`", e);
63+
}
64+
}
65+
}
66+
67+
68+
#[test]
69+
fn literals(){
70+
71+
TestPair::new(Rule::literal, literal)
72+
.assert("null", lit!())
73+
.assert("false", lit!(b false))
74+
.assert("true", lit!(b true))
75+
.assert("\"hello\"", lit!(s "\"hello\""))
76+
.assert("\'hello\'", lit!(s "\'hello\'"))
77+
.assert("\'hel\\'lo\'", lit!(s "\'hel\\'lo\'"))
78+
.assert("\'hel\"lo\'", lit!(s "\'hel\"lo\'"))
79+
.assert("\'hel\nlo\'", lit!(s "\'hel\nlo\'"))
80+
.assert("\'\"\'", lit!(s "\'\"\'"))
81+
.assert_fail("\'hel\\\"lo\'")
82+
.assert("1", lit!(i 1))
83+
.assert("0", lit!(i 0))
84+
.assert("-0", lit!(i 0))
85+
.assert("1.2", lit!(f 1.2))
86+
.assert("9007199254740990", lit!(i 9007199254740990))
87+
.assert_fail("9007199254740995")
88+
;
89+
90+
91+
}

0 commit comments

Comments
 (0)