@@ -145,11 +145,40 @@ where for<'a> T: Serialize {
145
145
let mut sample_json = serde_json:: to_string_pretty ( & sample_json_value) ?;
146
146
sample_json. push ( '\n' ) ;
147
147
let test_name = format ! ( "v{version}" ) ;
148
- let file_regression_test_path = format ! ( "{}/{}.json" , test_dir. display( ) , test_name) ;
149
- let file_regression_expected_path =
148
+ let file_regression_test_path_str = format ! ( "{}/{}.json" , test_dir. display( ) , test_name) ;
149
+ let file_regression_expected_path_str =
150
150
format ! ( "{}/{}.expected.json" , test_dir. display( ) , test_name) ;
151
- std:: fs:: write ( file_regression_test_path, sample_json. as_bytes ( ) ) ?;
152
- std:: fs:: write ( file_regression_expected_path, sample_json. as_bytes ( ) ) ?;
151
+
152
+ let file_regression_test_path = Path :: new ( & file_regression_test_path_str) ;
153
+ let ( changes_detected, file_created) = if file_regression_test_path. try_exists ( ) ? {
154
+ let expected_old_json_value: JsonValue = deserialize_json_file ( file_regression_test_path) ?;
155
+ let expected_new_json_value: JsonValue = serde_json:: from_str ( & sample_json) ?;
156
+ ( expected_old_json_value != expected_new_json_value, false )
157
+ } else {
158
+ ( false , true )
159
+ } ;
160
+
161
+ if changes_detected || file_created {
162
+ std:: fs:: write (
163
+ file_regression_test_path_str. clone ( ) ,
164
+ sample_json. as_bytes ( ) ,
165
+ ) ?;
166
+ std:: fs:: write (
167
+ file_regression_expected_path_str. clone ( ) ,
168
+ sample_json. as_bytes ( ) ,
169
+ ) ?;
170
+ if file_created {
171
+ panic ! (
172
+ "The following files need to be added: {file_regression_test_path_str:?} and \
173
+ {file_regression_expected_path_str:?}"
174
+ )
175
+ } else {
176
+ panic ! (
177
+ "The following files need to be updated: {file_regression_test_path_str:?} and \
178
+ {file_regression_expected_path_str:?}"
179
+ )
180
+ }
181
+ }
153
182
Ok ( ( ) )
154
183
}
155
184
0 commit comments