@@ -2469,3 +2469,191 @@ version = "0.1.0"
2469
2469
& [ ( "Cargo.toml" , & rewritten_toml) ] ,
2470
2470
) ;
2471
2471
}
2472
+
2473
+ #[ cargo_test]
2474
+ fn basic_filesizes ( ) {
2475
+ let cargo_toml_orig_contents = r#"
2476
+ [package]
2477
+ name = "foo"
2478
+ version = "0.0.1"
2479
+ authors = []
2480
+ exclude = ["*.txt"]
2481
+ license = "MIT"
2482
+ description = "foo"
2483
+ "# ;
2484
+ let main_rs_contents = r#"fn main() { println!("🦀"); }"# ;
2485
+ let cargo_toml_contents = format ! (
2486
+ r#"{}
2487
+ [package]
2488
+ name = "foo"
2489
+ version = "0.0.1"
2490
+ authors = []
2491
+ exclude = ["*.txt"]
2492
+ description = "foo"
2493
+ license = "MIT"
2494
+ "# ,
2495
+ cargo:: core:: package:: MANIFEST_PREAMBLE
2496
+ ) ;
2497
+ let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2498
+ # It is not intended for manual editing.
2499
+ version = 3
2500
+
2501
+ [[package]]
2502
+ name = "foo"
2503
+ version = "0.0.1"
2504
+ "# ;
2505
+ let p = project ( )
2506
+ . file ( "Cargo.toml" , cargo_toml_orig_contents)
2507
+ . file ( "src/main.rs" , main_rs_contents)
2508
+ . file ( "src/bar.txt" , "Ignored text file contents" ) // should be ignored when packaging
2509
+ . build ( ) ;
2510
+
2511
+ let uncompressed_size = cargo_toml_orig_contents. len ( )
2512
+ + main_rs_contents. len ( )
2513
+ + cargo_toml_contents. len ( )
2514
+ + cargo_lock_contents. len ( ) ;
2515
+ let compressed_size = 699 ;
2516
+
2517
+ p. cargo ( "package" )
2518
+ . with_stderr ( format ! (
2519
+ "\
2520
+ [WARNING] manifest has no documentation[..]
2521
+ See [..]
2522
+ [PACKAGING] foo v0.0.1 ([CWD])
2523
+ [VERIFYING] foo v0.0.1 ([CWD])
2524
+ [COMPILING] foo v0.0.1 ([CWD][..])
2525
+ [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2526
+ [PACKAGED] 4 files, {} B ({} B compressed)
2527
+ " ,
2528
+ uncompressed_size, compressed_size
2529
+ ) )
2530
+ . run ( ) ;
2531
+ assert ! ( p. root( ) . join( "target/package/foo-0.0.1.crate" ) . is_file( ) ) ;
2532
+ p. cargo ( "package -l" )
2533
+ . with_stdout (
2534
+ "\
2535
+ Cargo.lock
2536
+ Cargo.toml
2537
+ Cargo.toml.orig
2538
+ src/main.rs
2539
+ " ,
2540
+ )
2541
+ . run ( ) ;
2542
+ p. cargo ( "package" ) . with_stdout ( "" ) . run ( ) ;
2543
+
2544
+ let f = File :: open ( & p. root ( ) . join ( "target/package/foo-0.0.1.crate" ) ) . unwrap ( ) ;
2545
+ assert_eq ! ( f. metadata( ) . unwrap( ) . len( ) , compressed_size) ;
2546
+ validate_crate_contents (
2547
+ f,
2548
+ "foo-0.0.1.crate" ,
2549
+ & [ "Cargo.lock" , "Cargo.toml" , "Cargo.toml.orig" , "src/main.rs" ] ,
2550
+ & [
2551
+ ( "Cargo.lock" , cargo_lock_contents) ,
2552
+ ( "Cargo.toml" , & cargo_toml_contents) ,
2553
+ ( "Cargo.toml.orig" , cargo_toml_orig_contents) ,
2554
+ ( "src/main.rs" , main_rs_contents) ,
2555
+ ] ,
2556
+ ) ;
2557
+ }
2558
+
2559
+ #[ cargo_test]
2560
+ fn larger_filesizes ( ) {
2561
+ let cargo_toml_orig_contents = r#"
2562
+ [package]
2563
+ name = "foo"
2564
+ version = "0.0.1"
2565
+ authors = []
2566
+ license = "MIT"
2567
+ description = "foo"
2568
+ "# ;
2569
+ let lots_of_crabs = std:: iter:: repeat ( "🦀" ) . take ( 1337 ) . collect :: < String > ( ) ;
2570
+ let main_rs_contents = format ! ( r#"fn main() {{ println!("{}"); }}"# , lots_of_crabs) ;
2571
+ // Relatively uncompressible to increase the compressed package size beyond 1kB.
2572
+ let bar_txt_contents = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
2573
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
2574
+ exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
2575
+ in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
2576
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
2577
+ laborum." ;
2578
+ let cargo_toml_contents = format ! (
2579
+ r#"{}
2580
+ [package]
2581
+ name = "foo"
2582
+ version = "0.0.1"
2583
+ authors = []
2584
+ description = "foo"
2585
+ license = "MIT"
2586
+ "# ,
2587
+ cargo:: core:: package:: MANIFEST_PREAMBLE
2588
+ ) ;
2589
+ let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2590
+ # It is not intended for manual editing.
2591
+ version = 3
2592
+
2593
+ [[package]]
2594
+ name = "foo"
2595
+ version = "0.0.1"
2596
+ "# ;
2597
+ let p = project ( )
2598
+ . file ( "Cargo.toml" , cargo_toml_orig_contents)
2599
+ . file ( "src/main.rs" , & main_rs_contents)
2600
+ . file ( "src/bar.txt" , bar_txt_contents)
2601
+ . build ( ) ;
2602
+
2603
+ let uncompressed_size = cargo_toml_orig_contents. len ( )
2604
+ + main_rs_contents. len ( )
2605
+ + cargo_toml_contents. len ( )
2606
+ + cargo_lock_contents. len ( )
2607
+ + bar_txt_contents. len ( ) ;
2608
+ let compressed_size = 1010 ;
2609
+
2610
+ p. cargo ( "package" )
2611
+ . with_stderr ( format ! (
2612
+ "\
2613
+ [WARNING] manifest has no documentation[..]
2614
+ See [..]
2615
+ [PACKAGING] foo v0.0.1 ([CWD])
2616
+ [VERIFYING] foo v0.0.1 ([CWD])
2617
+ [COMPILING] foo v0.0.1 ([CWD][..])
2618
+ [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
2619
+ [PACKAGED] 5 files, {} ({} compressed)
2620
+ " ,
2621
+ humansize:: format_size( uncompressed_size, humansize:: DECIMAL ) ,
2622
+ humansize:: format_size( compressed_size, humansize:: DECIMAL )
2623
+ ) )
2624
+ . run ( ) ;
2625
+ assert ! ( p. root( ) . join( "target/package/foo-0.0.1.crate" ) . is_file( ) ) ;
2626
+ p. cargo ( "package -l" )
2627
+ . with_stdout (
2628
+ "\
2629
+ Cargo.lock
2630
+ Cargo.toml
2631
+ Cargo.toml.orig
2632
+ src/bar.txt
2633
+ src/main.rs
2634
+ " ,
2635
+ )
2636
+ . run ( ) ;
2637
+ p. cargo ( "package" ) . with_stdout ( "" ) . run ( ) ;
2638
+
2639
+ let f = File :: open ( & p. root ( ) . join ( "target/package/foo-0.0.1.crate" ) ) . unwrap ( ) ;
2640
+ assert_eq ! ( f. metadata( ) . unwrap( ) . len( ) , compressed_size) ;
2641
+ validate_crate_contents (
2642
+ f,
2643
+ "foo-0.0.1.crate" ,
2644
+ & [
2645
+ "Cargo.lock" ,
2646
+ "Cargo.toml" ,
2647
+ "Cargo.toml.orig" ,
2648
+ "src/bar.txt" ,
2649
+ "src/main.rs" ,
2650
+ ] ,
2651
+ & [
2652
+ ( "Cargo.lock" , cargo_lock_contents) ,
2653
+ ( "Cargo.toml" , & cargo_toml_contents) ,
2654
+ ( "Cargo.toml.orig" , cargo_toml_orig_contents) ,
2655
+ ( "src/bar.txt" , bar_txt_contents) ,
2656
+ ( "src/main.rs" , & main_rs_contents) ,
2657
+ ] ,
2658
+ ) ;
2659
+ }
0 commit comments