diff options
Diffstat (limited to 'src/tools/cargo/tests/testsuite/config_include.rs')
-rw-r--r-- | src/tools/cargo/tests/testsuite/config_include.rs | 112 |
1 files changed, 77 insertions, 35 deletions
diff --git a/src/tools/cargo/tests/testsuite/config_include.rs b/src/tools/cargo/tests/testsuite/config_include.rs index ae568065a..057c583ae 100644 --- a/src/tools/cargo/tests/testsuite/config_include.rs +++ b/src/tools/cargo/tests/testsuite/config_include.rs @@ -6,9 +6,9 @@ use cargo_test_support::{no_such_file_err_msg, project}; #[cargo_test] fn gated() { // Requires -Z flag. - write_config("include='other'"); + write_config("include='other.toml'"); write_config_at( - ".cargo/other", + ".cargo/other.toml", " othervalue = 1 ", @@ -25,13 +25,13 @@ fn simple() { write_config_at( ".cargo/config", " - include = 'other' + include = 'other.toml' key1 = 1 key2 = 2 ", ); write_config_at( - ".cargo/other", + ".cargo/other.toml", " key2 = 3 key3 = 4 @@ -84,39 +84,63 @@ fn works_with_cli() { } #[cargo_test] -fn left_to_right() { - // How it merges multiple includes. +fn left_to_right_bottom_to_top() { + // How it merges multiple nested includes. write_config_at( ".cargo/config", " - include = ['one', 'two'] - primary = 1 + include = ['left-middle.toml', 'right-middle.toml'] + top = 1 + ", + ); + write_config_at( + ".cargo/right-middle.toml", + " + include = 'right-bottom.toml' + top = 0 + right-middle = 0 ", ); write_config_at( - ".cargo/one", + ".cargo/right-bottom.toml", " - one = 1 - primary = 2 + top = -1 + right-middle = -1 + right-bottom = -1 ", ); write_config_at( - ".cargo/two", + ".cargo/left-middle.toml", " - two = 2 - primary = 3 + include = 'left-bottom.toml' + top = -2 + right-middle = -2 + right-bottom = -2 + left-middle = -2 + ", + ); + write_config_at( + ".cargo/left-bottom.toml", + " + top = -3 + right-middle = -3 + right-bottom = -3 + left-middle = -3 + left-bottom = -3 ", ); let config = ConfigBuilder::new().unstable_flag("config-include").build(); - assert_eq!(config.get::<i32>("primary").unwrap(), 1); - assert_eq!(config.get::<i32>("one").unwrap(), 1); - assert_eq!(config.get::<i32>("two").unwrap(), 2); + assert_eq!(config.get::<i32>("top").unwrap(), 1); + assert_eq!(config.get::<i32>("right-middle").unwrap(), 0); + assert_eq!(config.get::<i32>("right-bottom").unwrap(), -1); + assert_eq!(config.get::<i32>("left-middle").unwrap(), -2); + assert_eq!(config.get::<i32>("left-bottom").unwrap(), -3); } #[cargo_test] fn missing_file() { // Error when there's a missing file. - write_config("include='missing'"); + write_config("include='missing.toml'"); let config = ConfigBuilder::new() .unstable_flag("config-include") .build_err(); @@ -127,10 +151,10 @@ fn missing_file() { could not load Cargo configuration Caused by: - failed to load config include `missing` from `[..]/.cargo/config` + failed to load config include `missing.toml` from `[..]/.cargo/config` Caused by: - failed to read configuration file `[..]/.cargo/missing` + failed to read configuration file `[..]/.cargo/missing.toml` Caused by: {}", @@ -140,11 +164,29 @@ Caused by: } #[cargo_test] +fn wrong_file_extension() { + // Error when it doesn't end with `.toml`. + write_config("include='config.png'"); + let config = ConfigBuilder::new() + .unstable_flag("config-include") + .build_err(); + assert_error( + config.unwrap_err(), + "\ +could not load Cargo configuration + +Caused by: + expected a config include path ending with `.toml`, but found `config.png` from `[..]/.cargo/config` +", + ); +} + +#[cargo_test] fn cycle() { // Detects a cycle. - write_config_at(".cargo/config", "include='one'"); - write_config_at(".cargo/one", "include='two'"); - write_config_at(".cargo/two", "include='config'"); + write_config_at(".cargo/config.toml", "include='one.toml'"); + write_config_at(".cargo/one.toml", "include='two.toml'"); + write_config_at(".cargo/two.toml", "include='config.toml'"); let config = ConfigBuilder::new() .unstable_flag("config-include") .build_err(); @@ -154,16 +196,16 @@ fn cycle() { could not load Cargo configuration Caused by: - failed to load config include `one` from `[..]/.cargo/config` + failed to load config include `one.toml` from `[..]/.cargo/config.toml` Caused by: - failed to load config include `two` from `[..]/.cargo/one` + failed to load config include `two.toml` from `[..]/.cargo/one.toml` Caused by: - failed to load config include `config` from `[..]/.cargo/two` + failed to load config include `config.toml` from `[..]/.cargo/two.toml` Caused by: - config `include` cycle detected with path `[..]/.cargo/config`", + config `include` cycle detected with path `[..]/.cargo/config.toml`", ); } @@ -178,10 +220,10 @@ fn cli_include() { bar = 2 ", ); - write_config_at(".cargo/config-foo", "foo = 2"); + write_config_at(".cargo/config-foo.toml", "foo = 2"); let config = ConfigBuilder::new() .unstable_flag("config-include") - .config_arg("include='.cargo/config-foo'") + .config_arg("include='.cargo/config-foo.toml'") .build(); assert_eq!(config.get::<i32>("foo").unwrap(), 2); assert_eq!(config.get::<i32>("bar").unwrap(), 2); @@ -209,7 +251,7 @@ fn cli_include_failed() { // Error message when CLI include fails to load. let config = ConfigBuilder::new() .unstable_flag("config-include") - .config_arg("include='foobar'") + .config_arg("include='foobar.toml'") .build_err(); assert_error( config.unwrap_err(), @@ -218,10 +260,10 @@ fn cli_include_failed() { failed to load --config include Caused by: - failed to load config include `foobar` from `--config cli option` + failed to load config include `foobar.toml` from `--config cli option` Caused by: - failed to read configuration file `[..]/foobar` + failed to read configuration file `[..]/foobar.toml` Caused by: {}", @@ -235,14 +277,14 @@ fn cli_merge_failed() { // Error message when CLI include merge fails. write_config("foo = ['a']"); write_config_at( - ".cargo/other", + ".cargo/other.toml", " foo = 'b' ", ); let config = ConfigBuilder::new() .unstable_flag("config-include") - .config_arg("include='.cargo/other'") + .config_arg("include='.cargo/other.toml'") .build_err(); // Maybe this error message should mention it was from an include file? assert_error( @@ -251,7 +293,7 @@ fn cli_merge_failed() { failed to merge --config key `foo` into `[..]/.cargo/config` Caused by: - failed to merge config value from `[..]/.cargo/other` into `[..]/.cargo/config`: \ + failed to merge config value from `[..]/.cargo/other.toml` into `[..]/.cargo/config`: \ expected array, but found string", ); } |