1717)
1818
1919def _fake_install (v , ** kwargs ):
20+ try :
21+ kwargs ["run-for" ] = kwargs .pop ("run_for" )
22+ except LookupError :
23+ pass
2024 return {
2125 "company" : kwargs .get ("company" , "Test" ),
2226 "id" : f"test-{ v } " ,
@@ -28,10 +32,19 @@ def _fake_install(v, **kwargs):
2832 }
2933
3034INSTALLS = [
31- _fake_install ("1.0" , alias = [{"name" : "test1.0.exe" , "target" : "./test-binary-1.0.exe" },
32- {"name" : "testw1.0.exe" , "target" : "./test-binary-w-1.0.exe" , "windowed" : 1 }]),
33- _fake_install ("1.1" , alias = [{"name" : "test1.1.exe" , "target" : "./test-binary-1.1.exe" },
34- {"name" : "testw1.1.exe" , "target" : "./test-binary-w-1.1.exe" , "windowed" : 1 }]),
35+ _fake_install ("1.0" ,
36+ run_for = [dict (tag = "1.0" , target = "./test-binary-1.0.exe" ),
37+ dict (tag = "1.0" , target = "./test-binary-1.0-win.exe" , windowed = 1 )],
38+ alias = [dict (name = "test1.0.exe" , target = "./test-binary-1.0.exe" ),
39+ dict (name = "testw1.0.exe" , target = "./test-binary-w-1.0.exe" , windowed = 1 )],
40+ ),
41+ _fake_install ("1.1" ,
42+ default = 1 ,
43+ run_for = [dict (tag = "1.1" , target = "./test-binary-1.1.exe" ),
44+ dict (tag = "1.1" , target = "./test-binary-1.1-win.exe" , windowed = 1 )],
45+ alias = [dict (name = "test1.1.exe" , target = "./test-binary-1.1.exe" ),
46+ dict (name = "testw1.1.exe" , target = "./test-binary-w-1.1.exe" , windowed = 1 )],
47+ ),
3548 _fake_install ("1.3.1" , company = "PythonCore" ),
3649 _fake_install ("1.3.2" , company = "PythonOther" ),
3750 _fake_install ("2.0" , alias = [{"name" : "test2.0.exe" , "target" : "./test-binary-2.0.exe" }]),
@@ -73,30 +86,41 @@ def test_read_shebang(fake_config, tmp_path, script, expect):
7386
7487
7588@pytest .mark .parametrize ("script, expect, windowed" , [
89+ # Non-windowed alias from non-windowed launcher uses default 'executable'
7690 ("#! /usr/bin/test1.0\n " , "test-binary-1.0.exe" , False ),
77- ("#! /usr/bin/test1.0\n " , "test-binary-w-1.0.exe" , True ),
91+ # Non-windowed alias from windowed launcher uses first windowed 'run-for'
92+ ("#! /usr/bin/test1.0\n " , "test-binary-1.0-win.exe" , True ),
93+ # Windowed alias from either launcher uses the discovered alias
7894 ("#! /usr/bin/testw1.0\n " , "test-binary-w-1.0.exe" , False ),
7995 ("#! /usr/bin/testw1.0\n " , "test-binary-w-1.0.exe" , True ),
96+
8097 # No windowed option for 2.0, so picks the regular executable
8198 ("#! /usr/bin/test2.0\n " , "test-binary-2.0.exe" , False ),
8299 ("#! /usr/bin/test2.0\n " , "test-binary-2.0.exe" , True ),
83100 ("#! /usr/bin/testw2.0\n " , None , False ),
84101 ("#! /usr/bin/testw2.0\n " , None , True ),
85102 ("#!test1.0.exe\n " , "test-binary-1.0.exe" , False ),
86- ("#!test1.0.exe\n " , "test-binary-w- 1.0.exe" , True ),
103+ ("#!test1.0.exe\n " , "test-binary-1.0-win .exe" , True ),
87104 ("#!testw1.0.exe\n " , "test-binary-w-1.0.exe" , False ),
88105 ("#!testw1.0.exe\n " , "test-binary-w-1.0.exe" , True ),
89106 ("#!test1.1.exe\n " , "test-binary-1.1.exe" , False ),
90- ("#!test1.1.exe\n " , "test-binary-w- 1.1.exe" , True ),
107+ ("#!test1.1.exe\n " , "test-binary-1.1-win .exe" , True ),
91108 ("#!testw1.1.exe\n " , "test-binary-w-1.1.exe" , False ),
92109 ("#!testw1.1.exe\n " , "test-binary-w-1.1.exe" , True ),
110+
93111 # Matching executable name won't be overridden by windowed setting
94112 ("#!test-binary-1.1.exe\n " , "test-binary-1.1.exe" , False ),
95113 ("#!test-binary-1.1.exe\n " , "test-binary-1.1.exe" , True ),
96114 ("#! /usr/bin/env test1.0\n " , "test-binary-1.0.exe" , False ),
97- ("#! /usr/bin/env test1.0\n " , "test-binary-w- 1.0.exe" , True ),
115+ ("#! /usr/bin/env test1.0\n " , "test-binary-1.0-win .exe" , True ),
98116 ("#! /usr/bin/env testw1.0\n " , "test-binary-w-1.0.exe" , False ),
99117 ("#! /usr/bin/env testw1.0\n " , "test-binary-w-1.0.exe" , True ),
118+
119+ # Default name will use default 'executable' or first windowed 'run-for'
120+ ("#! /usr/bin/python\n " , "test-binary-1.1.exe" , False ),
121+ ("#! /usr/bin/python\n " , "test-binary-1.1-win.exe" , True ),
122+ ("#! /usr/bin/pythonw\n " , "test-binary-1.1-win.exe" , False ),
123+ ("#! /usr/bin/pythonw\n " , "test-binary-1.1-win.exe" , True ),
100124])
101125def test_read_shebang_windowed (fake_config , tmp_path , script , expect , windowed ):
102126 fake_config .installs .extend (INSTALLS )
0 commit comments