diff --git a/rust/src/build_system.rs b/rust/src/build_system.rs index b7b49bb..84e4926 100644 --- a/rust/src/build_system.rs +++ b/rust/src/build_system.rs @@ -107,6 +107,25 @@ mod tests { [[build-system.a]] # empty table within the array [[build-system.a]] name = "Nail" + "#}, + false + )] + #[case::reorder( + indoc ! {r#" + [build-system] + requires = [ + "hatchling", + ] + build-backend = "hatchling.build" + + "#}, + indoc ! {r#" + [build-system] + build-backend = "hatchling.build" + requires = [ + "hatchling", + ] + "#}, false )] diff --git a/rust/src/helpers/table.rs b/rust/src/helpers/table.rs index 2addc76..eb18610 100644 --- a/rust/src/helpers/table.rs +++ b/rust/src/helpers/table.rs @@ -316,3 +316,51 @@ pub fn collapse_sub_tables(tables: &mut Tables, name: &str) { sub.clear(); } } + +#[cfg(test)] +mod tests { + use super::*; + + use indoc::indoc; + use taplo::parser::parse; + + #[test] + fn test_reorder() { + let root_ast = parse(indoc! {r#" + [A] + b = 1 + a = 1 + + [B] + b = 2 + [C] + b = 3 + # Notes on A + a = 3"#}) + .into_syntax() + .clone_for_update(); + let tables = Tables::from_ast(&root_ast); + { + let table = &mut tables.get("A").unwrap().first().unwrap().borrow_mut(); + reorder_table_keys(table, &["", "a", "b"]); + } + tables.reorder(&root_ast, &["C", "B", "A"]); + assert_eq!( + root_ast.to_string(), + indoc! {r#" + [C] + # Notes on A + a = 3 + b = 3 + + [B] + b = 2 + + [A] + a = 1 + b = 1 + + "#} + ); + } +} diff --git a/rust/src/main.rs b/rust/src/main.rs index 5abda5f..01232d6 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -272,6 +272,29 @@ mod tests { true, (3, 8) )] + #[case::space_issue_27( + indoc ! {r#" + [build-system] + requires = [ + "hatchling", + ] + build-backend = "hatchling.build" + + [project] + "#}, + indoc ! {r#" + [build-system] + build-backend = "hatchling.build" + requires = [ + "hatchling", + ] + + [project] + "#}, + 2, + true, + (3, 8) + )] fn test_format_toml( #[case] start: &str, #[case] expected: &str, diff --git a/tests/test_main.py b/tests/test_main.py index 8216701..3453136 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -66,6 +66,53 @@ """, id="collapsed", ), + pytest.param( + """ + [build-system] + requires = [ + "hatchling", + ] + build-backend = "hatchling.build" + + [project] + keywords = [ + "A", + ] + classifiers = [ + "Programming Language :: Python :: 3 :: Only", + ] + dynamic = [ + "B", + ] + dependencies = [ + "requests>=2.0", + ] + """, + """\ + [build-system] + build-backend = "hatchling.build" + requires = [ + "hatchling", + ] + + [project] + keywords = [ + "A", + ] + classifiers = [ + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + ] + dynamic = [ + "B", + ] + dependencies = [ + "requests>=2.0", + ] + """, + id="multi", + ), ], ) def test_format_toml(start: str, expected: str) -> None: