@@ -5640,3 +5640,74 @@ def test_noqa_multiline_hanging_indent() -> None:
56405640 )
56415641 output = isort .code (test_input , line_length = 120 , multi_line_output = WrapModes .HANGING_INDENT )
56425642 assert output == test_input
5643+
5644+
5645+ @pytest .mark .parametrize (
5646+ (
5647+ "actual_imports" ,
5648+ "expected_sort" ,
5649+ ),
5650+ [
5651+ (
5652+ ("from __future__ import annotations\n import __future__\n " ),
5653+ ("from __future__ import annotations\n import __future__\n " ),
5654+ ),
5655+ (
5656+ (
5657+ "import __future__\n \n "
5658+ "from __future__ import generator_stop\n "
5659+ "from __future__ import annotations\n \n "
5660+ "from concurrent.futures import ThreadPoolExecutor\n \n "
5661+ ),
5662+ (
5663+ "from __future__ import annotations, generator_stop\n "
5664+ "import __future__\n \n "
5665+ "from concurrent.futures import ThreadPoolExecutor\n "
5666+ ),
5667+ ),
5668+ (
5669+ ("from __future__ import annotations\n import sys\n " ),
5670+ ("from __future__ import annotations\n \n import sys\n " ),
5671+ ),
5672+ (("import __future__\n import sys\n " ), ("import __future__\n \n import sys\n " )),
5673+ (
5674+ ("import __future__ as future\n from __future__ import annotations\n " ),
5675+ ("from __future__ import annotations\n import __future__ as future\n " ),
5676+ ),
5677+ (
5678+ ("# Copyright 2026\n import __future__\n from __future__ import annotations\n " ),
5679+ ("# Copyright 2026\n from __future__ import annotations\n import __future__\n " ),
5680+ ),
5681+ (
5682+ ("import __future__\n from __future__ import *\n " ),
5683+ ("from __future__ import *\n import __future__\n " ),
5684+ ),
5685+ (
5686+ (
5687+ "from __future__ import annotations\n "
5688+ "import __future__\n "
5689+ "from __future__ import annotations\n "
5690+ ),
5691+ ("from __future__ import annotations\n import __future__\n " ),
5692+ ),
5693+ (
5694+ (
5695+ "import sys\n "
5696+ "from __future__ import annotations\n "
5697+ "import os\n "
5698+ "import __future__\n "
5699+ "from pathlib import Path\n "
5700+ ),
5701+ (
5702+ "from __future__ import annotations\n "
5703+ "import __future__\n \n "
5704+ "import os\n "
5705+ "import sys\n "
5706+ "from pathlib import Path\n "
5707+ ),
5708+ ),
5709+ ],
5710+ )
5711+ def test_dunder_future_import (actual_imports : str , expected_sort : str ) -> None :
5712+ output = isort .code (actual_imports )
5713+ assert output == expected_sort
0 commit comments