10
10
import unittest
11
11
import sys
12
12
import os
13
- import subprocess
14
13
from unittest .mock import patch , MagicMock
15
14
16
15
class TestTopologicallySorted (unittest .TestCase ):
@@ -26,9 +25,8 @@ def test_Valid(self):
26
25
def GetEdge (node ):
27
26
return tuple (graph [node ])
28
27
29
- self .assertEqual (
30
- gyp .common .TopologicallySorted (graph .keys (), GetEdge ), ["a" , "c" , "d" , "b" ]
31
- )
28
+ assert gyp .common .TopologicallySorted (
29
+ graph .keys (), GetEdge ) == ["a" , "c" , "d" , "b" ]
32
30
33
31
def test_Cycle (self ):
34
32
"""Test that an exception is thrown on a cyclic graph."""
@@ -60,7 +58,7 @@ def tearDown(self):
60
58
61
59
def assertFlavor (self , expected , argument , param ):
62
60
sys .platform = argument
63
- self . assertEqual ( expected , gyp .common .GetFlavor (param ) )
61
+ assert expected == gyp .common .GetFlavor (param )
64
62
65
63
def test_platform_default (self ):
66
64
self .assertFlavor ("freebsd" , "freebsd9" , {})
@@ -90,47 +88,84 @@ def test_GetCrossCompilerPredefines(self, mock_mkstemp, mock_unlink, mock_close)
90
88
mock_unlink .return_value = None
91
89
mock_mkstemp .return_value = (0 , "temp.c" )
92
90
93
- def mock_run (env , defines_stdout ):
94
- with patch ("subprocess.Popen " ) as mock_popen :
91
+ def mock_run (env , defines_stdout , expected_cmd ):
92
+ with patch ("subprocess.run " ) as mock_run :
95
93
mock_process = MagicMock ()
96
- mock_process .communicate .return_value = (
97
- TestGetFlavor .MockCommunicate (defines_stdout ), None )
98
- mock_process .stdout = MagicMock ()
99
- mock_popen .return_value = mock_process
94
+ mock_process .returncode = 0
95
+ mock_process .stdout = TestGetFlavor .MockCommunicate (defines_stdout )
96
+ mock_run .return_value = mock_process
100
97
expected_input = "temp.c" if sys .platform == "win32" else "/dev/null"
101
98
with patch .dict (os .environ , env ):
102
99
defines = gyp .common .GetCrossCompilerPredefines ()
103
100
flavor = gyp .common .GetFlavor ({})
104
101
if env .get ("CC_target" ):
105
- mock_popen .assert_called_with (
106
- [env ["CC_target" ], "-dM" , "-E" , "-x" , "c" , expected_input ],
102
+ mock_run .assert_called_with (
103
+ [
104
+ * expected_cmd ,
105
+ "-dM" , "-E" , "-x" , "c" , expected_input
106
+ ],
107
107
shell = sys .platform == "win32" ,
108
- stdout = subprocess . PIPE , stderr = subprocess . STDOUT )
108
+ capture_output = True , check = True )
109
109
return [defines , flavor ]
110
110
111
- [defines1 , _ ] = mock_run ({}, "" )
112
- self . assertDictEqual ({}, defines1 )
111
+ [defines1 , _ ] = mock_run ({}, "" , [] )
112
+ assert {} == defines1
113
113
114
114
[defines2 , flavor2 ] = mock_run (
115
115
{ "CC_target" : "/opt/wasi-sdk/bin/clang" },
116
- "#define __wasm__ 1\n #define __wasi__ 1\n "
116
+ "#define __wasm__ 1\n #define __wasi__ 1\n " ,
117
+ ["/opt/wasi-sdk/bin/clang" ]
117
118
)
118
- self . assertDictEqual ( { "__wasm__" : "1" , "__wasi__" : "1" }, defines2 )
119
- self . assertEqual ( "wasi" , flavor2 )
119
+ assert { "__wasm__" : "1" , "__wasi__" : "1" } == defines2
120
+ assert flavor2 == "wasi"
120
121
121
122
[defines3 , flavor3 ] = mock_run (
122
- { "CC_target" : "/opt/wasi-sdk/bin/clang" },
123
- "#define __wasm__ 1\n "
123
+ { "CC_target" : "/opt/wasi-sdk/bin/clang --target=wasm32" },
124
+ "#define __wasm__ 1\n " ,
125
+ ["/opt/wasi-sdk/bin/clang" , "--target=wasm32" ]
124
126
)
125
- self . assertDictEqual ( { "__wasm__" : "1" }, defines3 )
126
- self . assertEqual ( "wasm" , flavor3 )
127
+ assert { "__wasm__" : "1" } == defines3
128
+ assert flavor3 == "wasm"
127
129
128
130
[defines4 , flavor4 ] = mock_run (
129
131
{ "CC_target" : "/emsdk/upstream/emscripten/emcc" },
130
- "#define __EMSCRIPTEN__ 1\n "
132
+ "#define __EMSCRIPTEN__ 1\n " ,
133
+ ["/emsdk/upstream/emscripten/emcc" ]
134
+ )
135
+ assert { "__EMSCRIPTEN__" : "1" } == defines4
136
+ assert flavor4 == "emscripten"
137
+
138
+ # Test path which include white space
139
+ [defines5 , flavor5 ] = mock_run (
140
+ {
141
+ "CC_target" : "\" /Users/Toyo Li/wasi-sdk/bin/clang\" -O3" ,
142
+ "CFLAGS" : "--target=wasm32-wasi-threads -pthread"
143
+ },
144
+ "#define __wasm__ 1\n #define __wasi__ 1\n #define _REENTRANT 1\n " ,
145
+ [
146
+ "/Users/Toyo Li/wasi-sdk/bin/clang" ,
147
+ "-O3" ,
148
+ "--target=wasm32-wasi-threads" ,
149
+ "-pthread"
150
+ ]
151
+ )
152
+ assert {
153
+ "__wasm__" : "1" ,
154
+ "__wasi__" : "1" ,
155
+ "_REENTRANT" : "1"
156
+ } == defines5
157
+ assert flavor5 == "wasi"
158
+
159
+ original_sep = os .sep
160
+ os .sep = "\\ "
161
+ [defines6 , flavor6 ] = mock_run (
162
+ { "CC_target" : "\" C:\\ Program Files\\ wasi-sdk\\ clang.exe\" " },
163
+ "#define __wasm__ 1\n #define __wasi__ 1\n " ,
164
+ ["C:/Program Files/wasi-sdk/clang.exe" ]
131
165
)
132
- self .assertDictEqual ({ "__EMSCRIPTEN__" : "1" }, defines4 )
133
- self .assertEqual ("emscripten" , flavor4 )
166
+ os .sep = original_sep
167
+ assert { "__wasm__" : "1" , "__wasi__" : "1" } == defines6
168
+ assert flavor6 == "wasi"
134
169
135
170
if __name__ == "__main__" :
136
171
unittest .main ()
0 commit comments