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..d83cd53 100644 --- a/rust/src/helpers/table.rs +++ b/rust/src/helpers/table.rs @@ -316,3 +316,24 @@ pub fn collapse_sub_tables(tables: &mut Tables, name: &str) { sub.clear(); } } + +#[cfg(test)] +mod tests { + use super::*; + + use taplo::parser::parse; + + #[test] + fn test_reorder() { + let root_ast = parse("[A]\nb = 1\na = 1\n\n[B]\nb = 2") + .into_syntax() + .clone_for_update(); + let mut 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, &["B", "A"]); + assert_eq!(root_ast.to_string(), "[B]\nb = 2\n\n[A]\na = 1\n\nb = 1\n\n"); + } +} 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: