@@ -765,3 +765,140 @@ fn emit_mode_from_emit_str(emit_str: &str) -> Result<EmitMode> {
765
765
_ => Err ( format_err ! ( "Invalid value for `--emit`" ) ) ,
766
766
}
767
767
}
768
+
769
+ #[ cfg( test) ]
770
+ mod test {
771
+ use super :: * ;
772
+ use rustfmt_config_proc_macro:: nightly_only_test;
773
+
774
+ fn get_config < O : CliOptions > ( path : Option < & Path > , options : Option < O > ) -> Config {
775
+ load_config ( path, options) . unwrap ( ) . 0
776
+ }
777
+
778
+ #[ nightly_only_test]
779
+ #[ test]
780
+ fn flag_sets_style_edition_override_correctly ( ) {
781
+ let mut options = GetOptsOptions :: default ( ) ;
782
+ options. style_edition = Some ( StyleEdition :: Edition2024 ) ;
783
+ let config = get_config ( None , Some ( options) ) ;
784
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2024 ) ;
785
+ }
786
+
787
+ #[ nightly_only_test]
788
+ #[ test]
789
+ fn edition_sets_style_edition_override_correctly ( ) {
790
+ let mut options = GetOptsOptions :: default ( ) ;
791
+ options. edition = Some ( Edition :: Edition2024 ) ;
792
+ let config = get_config ( None , Some ( options) ) ;
793
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2024 ) ;
794
+ }
795
+
796
+ #[ nightly_only_test]
797
+ #[ test]
798
+ fn version_sets_style_edition_override_correctly ( ) {
799
+ let mut options = GetOptsOptions :: default ( ) ;
800
+ options. inline_config = HashMap :: from ( [ ( "version" . to_owned ( ) , "Two" . to_owned ( ) ) ] ) ;
801
+ let config = get_config ( None , Some ( options) ) ;
802
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2024 ) ;
803
+ }
804
+
805
+ #[ nightly_only_test]
806
+ #[ test]
807
+ fn style_edition_flag_has_correct_precedence_over_edition ( ) {
808
+ let mut options = GetOptsOptions :: default ( ) ;
809
+ options. style_edition = Some ( StyleEdition :: Edition2021 ) ;
810
+ options. edition = Some ( Edition :: Edition2024 ) ;
811
+ let config = get_config ( None , Some ( options) ) ;
812
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2021 ) ;
813
+ }
814
+
815
+ #[ nightly_only_test]
816
+ #[ test]
817
+ fn style_edition_flag_has_correct_precedence_over_version ( ) {
818
+ let mut options = GetOptsOptions :: default ( ) ;
819
+ options. style_edition = Some ( StyleEdition :: Edition2018 ) ;
820
+ options. inline_config = HashMap :: from ( [ ( "version" . to_owned ( ) , "Two" . to_owned ( ) ) ] ) ;
821
+ let config = get_config ( None , Some ( options) ) ;
822
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2018 ) ;
823
+ }
824
+
825
+ #[ nightly_only_test]
826
+ #[ test]
827
+ fn style_edition_flag_has_correct_precedence_over_edition_version ( ) {
828
+ let mut options = GetOptsOptions :: default ( ) ;
829
+ options. style_edition = Some ( StyleEdition :: Edition2021 ) ;
830
+ options. edition = Some ( Edition :: Edition2018 ) ;
831
+ options. inline_config = HashMap :: from ( [ ( "version" . to_owned ( ) , "Two" . to_owned ( ) ) ] ) ;
832
+ let config = get_config ( None , Some ( options) ) ;
833
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2021 ) ;
834
+ }
835
+
836
+ #[ nightly_only_test]
837
+ #[ test]
838
+ fn style_edition_inline_has_correct_precedence_over_edition_version ( ) {
839
+ let mut options = GetOptsOptions :: default ( ) ;
840
+ options. edition = Some ( Edition :: Edition2018 ) ;
841
+ options. inline_config = HashMap :: from ( [
842
+ ( "version" . to_owned ( ) , "One" . to_owned ( ) ) ,
843
+ ( "style_edition" . to_owned ( ) , "2024" . to_owned ( ) ) ,
844
+ ] ) ;
845
+ let config = get_config ( None , Some ( options) ) ;
846
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2024 ) ;
847
+ }
848
+
849
+ #[ nightly_only_test]
850
+ #[ test]
851
+ fn style_edition_config_file_trumps_edition_flag_version_inline ( ) {
852
+ let mut options = GetOptsOptions :: default ( ) ;
853
+ let config_file = Some ( Path :: new ( "tests/config/style-edition/just-style-edition" ) ) ;
854
+ options. edition = Some ( Edition :: Edition2018 ) ;
855
+ options. inline_config = HashMap :: from ( [ ( "version" . to_owned ( ) , "One" . to_owned ( ) ) ] ) ;
856
+ let config = get_config ( config_file, Some ( options) ) ;
857
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2024 ) ;
858
+ }
859
+
860
+ #[ nightly_only_test]
861
+ #[ test]
862
+ fn style_edition_config_file_trumps_edition_config_and_version_inline ( ) {
863
+ let mut options = GetOptsOptions :: default ( ) ;
864
+ let config_file = Some ( Path :: new (
865
+ "tests/config/style-edition/style-edition-and-edition" ,
866
+ ) ) ;
867
+ options. inline_config = HashMap :: from ( [ ( "version" . to_owned ( ) , "Two" . to_owned ( ) ) ] ) ;
868
+ let config = get_config ( config_file, Some ( options) ) ;
869
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2021 ) ;
870
+ assert_eq ! ( config. edition( ) , Edition :: Edition2024 ) ;
871
+ }
872
+
873
+ #[ nightly_only_test]
874
+ #[ test]
875
+ fn version_config_trumps_edition_config_and_flag ( ) {
876
+ let mut options = GetOptsOptions :: default ( ) ;
877
+ let config_file = Some ( Path :: new ( "tests/config/style-edition/version-edition" ) ) ;
878
+ options. edition = Some ( Edition :: Edition2018 ) ;
879
+ let config = get_config ( config_file, Some ( options) ) ;
880
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2024 ) ;
881
+ }
882
+
883
+ #[ nightly_only_test]
884
+ #[ test]
885
+ fn style_edition_config_file_trumps_version_config ( ) {
886
+ let options = GetOptsOptions :: default ( ) ;
887
+ let config_file = Some ( Path :: new (
888
+ "tests/config/style-edition/version-style-edition" ,
889
+ ) ) ;
890
+ let config = get_config ( config_file, Some ( options) ) ;
891
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2021 ) ;
892
+ }
893
+
894
+ #[ nightly_only_test]
895
+ #[ test]
896
+ fn style_edition_config_file_trumps_edition_version_config ( ) {
897
+ let options = GetOptsOptions :: default ( ) ;
898
+ let config_file = Some ( Path :: new (
899
+ "tests/config/style-edition/version-style-edition-and-edition" ,
900
+ ) ) ;
901
+ let config = get_config ( config_file, Some ( options) ) ;
902
+ assert_eq ! ( config. style_edition( ) , StyleEdition :: Edition2021 ) ;
903
+ }
904
+ }
0 commit comments