@@ -257,3 +257,83 @@ fn find_file_by_path<R: Read>(
257
257
. unwrap_or_else ( |_| panic ! ( "[{}] Couldn't read file contents" , pkg_name) ) ;
258
258
contents
259
259
}
260
+
261
+ #[ cfg( test) ]
262
+ mod tests {
263
+ use std:: io:: Write ;
264
+ use tar;
265
+
266
+ use super :: render_pkg_readme;
267
+
268
+ fn add_file < W : Write > ( pkg : & mut tar:: Builder < W > , path : & str , content : & [ u8 ] ) {
269
+ let mut header = tar:: Header :: new_gnu ( ) ;
270
+ header. set_size ( content. len ( ) as u64 ) ;
271
+ header. set_cksum ( ) ;
272
+ pkg. append_data ( & mut header, path, content) . unwrap ( ) ;
273
+ }
274
+
275
+ #[ test]
276
+ fn test_render_pkg_readme ( ) {
277
+ let mut pkg = tar:: Builder :: new ( vec ! [ ] ) ;
278
+ add_file (
279
+ & mut pkg,
280
+ "foo-0.0.1/Cargo.toml" ,
281
+ br#"
282
+ [package]
283
+ readme = "README.md"
284
+ "# ,
285
+ ) ;
286
+ add_file ( & mut pkg, "foo-0.0.1/README.md" , b"readme" ) ;
287
+ let serialized_archive = pkg. into_inner ( ) . unwrap ( ) ;
288
+ let result =
289
+ render_pkg_readme ( tar:: Archive :: new ( & * serialized_archive) , "foo-0.0.1" ) . unwrap ( ) ;
290
+ assert ! ( result. contains( "readme" ) )
291
+ }
292
+
293
+ #[ test]
294
+ fn test_render_pkg_readme_w_link ( ) {
295
+ let mut pkg = tar:: Builder :: new ( vec ! [ ] ) ;
296
+ add_file (
297
+ & mut pkg,
298
+ "foo-0.0.1/Cargo.toml" ,
299
+ br#"
300
+ [package]
301
+ readme = "README.md"
302
+ repository = "https://github.com/foo/foo"
303
+ "# ,
304
+ ) ;
305
+ add_file (
306
+ & mut pkg,
307
+ "foo-0.0.1/README.md" ,
308
+ b"readme [link](./Other.md)" ,
309
+ ) ;
310
+ let serialized_archive = pkg. into_inner ( ) . unwrap ( ) ;
311
+ let result =
312
+ render_pkg_readme ( tar:: Archive :: new ( & * serialized_archive) , "foo-0.0.1" ) . unwrap ( ) ;
313
+ assert ! ( result. contains( "\" https://github.com/foo/foo/blob/HEAD/./Other.md\" " ) )
314
+ }
315
+
316
+ #[ test]
317
+ fn test_render_pkg_readme_not_at_root ( ) {
318
+ let mut pkg = tar:: Builder :: new ( vec ! [ ] ) ;
319
+ add_file (
320
+ & mut pkg,
321
+ "foo-0.0.1/Cargo.toml" ,
322
+ br#"
323
+ [package]
324
+ readme = "docs/README.md"
325
+ repository = "https://github.com/foo/foo"
326
+ "# ,
327
+ ) ;
328
+ add_file (
329
+ & mut pkg,
330
+ "foo-0.0.1/docs/README.md" ,
331
+ b"docs/readme [link](./Other.md)" ,
332
+ ) ;
333
+ let serialized_archive = pkg. into_inner ( ) . unwrap ( ) ;
334
+ let result =
335
+ render_pkg_readme ( tar:: Archive :: new ( & * serialized_archive) , "foo-0.0.1" ) . unwrap ( ) ;
336
+ assert ! ( result. contains( "docs/readme" ) ) ;
337
+ assert ! ( result. contains( "\" https://github.com/foo/foo/blob/HEAD/docs/./Other.md\" " ) )
338
+ }
339
+ }
0 commit comments