@@ -22,17 +22,18 @@ mod tests {
22
22
struct Testcase {
23
23
name : String ,
24
24
selector : String ,
25
- document : serde_yaml :: Value , // JSON deserialised as YAML
26
- result : serde_yaml :: Value , // JSON deserialised as YAML
25
+ document : serde_json :: Value ,
26
+ result : serde_json :: Value ,
27
27
#[ serde( default ) ]
28
28
focus : bool , // if true, run only tests with focus set to true
29
29
}
30
30
31
31
#[ test]
32
32
fn compliance_test_suite ( ) {
33
- let y = fs:: read_to_string ( "tests/cts.yaml " ) . expect ( "failed to read cts.yaml " ) ;
33
+ let cts_json = fs:: read_to_string ( "tests/cts.json " ) . expect ( "failed to read cts.json " ) ;
34
34
35
- let suite: TestSuite = serde_yaml:: from_str ( & y) . expect ( "failed to deserialize cts.yaml" ) ;
35
+ let suite: TestSuite =
36
+ serde_json:: from_str ( & cts_json) . expect ( "failed to deserialize cts.json" ) ;
36
37
37
38
let focussed = ( & suite. tests ) . iter ( ) . find ( |t| t. focus ) . is_some ( ) ;
38
39
@@ -44,11 +45,8 @@ mod tests {
44
45
let result = panic:: catch_unwind ( || {
45
46
if VERBOSE {
46
47
println ! (
47
- "name = {}, selector = {}, document = {}, result = {}" ,
48
- t. name,
49
- t. selector,
50
- as_json( & t. document) . expect( "invalid document" ) ,
51
- as_json( & t. result) . expect( "invalid result" )
48
+ "name = {}, selector = {}, document = {:?}, result = {:?}" ,
49
+ t. name, t. selector, t. document, t. result
52
50
) ;
53
51
}
54
52
let path = jsonpath:: parse ( & t. selector ) ;
@@ -60,18 +58,13 @@ mod tests {
60
58
) ;
61
59
62
60
if let Ok ( p) = path {
63
- if let Ok ( result) =
64
- p. find ( & as_json_value ( t. document ) . expect ( "invalid document" ) )
65
- {
66
- if !equal (
67
- & result,
68
- as_json_value_array ( & t. result ) . expect ( "invalid result" ) ,
69
- ) {
61
+ if let Ok ( result) = p. find ( & t. document ) {
62
+ if !equal ( & result, as_array ( & t. result ) . expect ( "invalid result" ) ) {
70
63
assert ! (
71
64
false ,
72
65
"incorrect result for {}, expected: {:?}, got: {:?}" ,
73
66
t. name,
74
- as_json_value_array ( & t. result) . unwrap( ) ,
67
+ as_array ( & t. result) . unwrap( ) ,
75
68
result
76
69
)
77
70
}
@@ -100,91 +93,13 @@ mod tests {
100
93
}
101
94
}
102
95
103
- fn as_json ( v : & serde_yaml :: Value ) -> Result < String , String > {
96
+ fn as_array ( v : & serde_json :: Value ) -> Result < Vec < serde_json :: Value > , String > {
104
97
match v {
105
- serde_yaml:: Value :: Null => Ok ( "null" . to_string ( ) ) ,
106
-
107
- serde_yaml:: Value :: Bool ( b) => Ok ( b. to_string ( ) ) ,
108
-
109
- serde_yaml:: Value :: Number ( num) => Ok ( num. to_string ( ) ) ,
110
-
111
- serde_yaml:: Value :: String ( s) => Ok ( json:: stringify ( s. to_string ( ) ) ) ,
112
-
113
- serde_yaml:: Value :: Sequence ( seq) => {
114
- let array_elements = seq
115
- . into_iter ( )
116
- . map ( |v| as_json ( v) . expect ( "invalid sequence element" ) ) ;
117
- Ok ( format ! ( "[{}]" , itertools:: join( array_elements, "," ) ) )
118
- }
119
-
120
- serde_yaml:: Value :: Mapping ( map) => {
121
- let object_members = map. iter ( ) . map ( |( k, v) | {
122
- format ! (
123
- "{}:{}" ,
124
- as_json( k) . expect( "invalid object key" ) ,
125
- as_json( v) . expect( "invalid object value" )
126
- )
127
- } ) ;
128
- Ok ( format ! ( "{{{}}}" , itertools:: join( object_members, "," ) ) )
129
- }
130
- }
131
- }
132
-
133
- fn as_json_value ( v : serde_yaml:: Value ) -> Result < serde_json:: Value , String > {
134
- match v {
135
- serde_yaml:: Value :: Null => Ok ( serde_json:: Value :: Null ) ,
136
-
137
- serde_yaml:: Value :: Bool ( b) => Ok ( serde_json:: Value :: Bool ( b) ) ,
138
-
139
- serde_yaml:: Value :: Number ( num) => {
140
- Ok ( serde_json:: Value :: Number ( yaml_number_as_json ( num. clone ( ) ) ) )
141
- }
142
-
143
- serde_yaml:: Value :: String ( s) => Ok ( serde_json:: Value :: String ( s. clone ( ) ) ) ,
144
-
145
- serde_yaml:: Value :: Sequence ( seq) => {
146
- let array_elements = seq
147
- . into_iter ( )
148
- . map ( |v| as_json_value ( v) . expect ( "invalid sequence element" ) ) ;
149
- Ok ( serde_json:: Value :: Array ( array_elements. collect ( ) ) )
150
- }
151
-
152
- serde_yaml:: Value :: Mapping ( map) => {
153
- let object_members = map. iter ( ) . map ( |( k, v) | {
154
- if let serde_yaml:: Value :: String ( k_string) = k {
155
- (
156
- k_string. clone ( ) , //serde_json::to_string(k).expect("non-string mapping key"),
157
- as_json_value ( v. clone ( ) ) . expect ( "invalid map value" ) ,
158
- )
159
- } else {
160
- panic ! ( "non-string mapping key" )
161
- }
162
- } ) ;
163
- Ok ( serde_json:: Value :: Object ( object_members. collect ( ) ) )
164
- }
165
- }
166
- }
167
-
168
- fn as_json_value_array ( v : & serde_yaml:: Value ) -> Result < Vec < serde_json:: Value > , String > {
169
- match v {
170
- serde_yaml:: Value :: Sequence ( seq) => {
171
- let array_elements = seq
172
- . into_iter ( )
173
- . map ( |v| as_json_value ( v. clone ( ) ) . expect ( "invalid sequence element" ) ) ;
98
+ serde_json:: Value :: Array ( seq) => {
99
+ let array_elements = seq. into_iter ( ) . map ( |v| v. clone ( ) ) ;
174
100
Ok ( array_elements. collect ( ) )
175
101
}
176
102
_ => Err ( "not a sequence" . to_string ( ) ) ,
177
103
}
178
104
}
179
-
180
- fn yaml_number_as_json ( n : serde_yaml:: Number ) -> serde_json:: Number {
181
- if n. is_i64 ( ) {
182
- serde_json:: Number :: from ( n. as_i64 ( ) . expect ( "invalid i64 in YAML" ) )
183
- } else if n. is_u64 ( ) {
184
- serde_json:: Number :: from ( n. as_u64 ( ) . expect ( "invalid u64 in YAML" ) )
185
- } else {
186
- serde_json:: Number :: from_f64 ( n. as_f64 ( ) . expect ( "invalid f64 in YAML" ) )
187
- . expect ( "invalid f64 for JSON" )
188
- }
189
- }
190
105
}
0 commit comments