55import os
66import re
77import shutil
8+ import sys
89import unittest
910
1011import gyp
1112
1213fixture_dir = os .path .join (os .path .dirname (__file__ ), "fixtures" )
1314gyp_file = os .path .join (os .path .dirname (__file__ ), "fixtures/integration.gyp" )
1415
15- supported_sysnames = {"darwin" , "linux" }
16- sysname = os .uname ().sysname .lower ()
16+ if sys .platform == "win32" :
17+ sysname = sys .platform
18+ else :
19+ sysname = os .uname ().sysname .lower ()
1720expected_dir = os .path .join (fixture_dir , f"expected-{ sysname } " )
1821
1922
20- class TestGyp (unittest .TestCase ):
21- def setUp (self ) -> None :
22- if sysname not in supported_sysnames :
23- self .skipTest (f"Unsupported system: { sysname } " )
24- shutil .rmtree (os .path .join (fixture_dir , "out" ), ignore_errors = True )
23+ def assert_file (test , actual , expected ) -> None :
24+ actual_filepath = os .path .join (fixture_dir , actual )
25+ expected_filepath = os .path .join (expected_dir , expected )
2526
26- def assert_file (self , actual , expected ) -> None :
27- actual_filepath = os .path .join (fixture_dir , actual )
28- expected_filepath = os .path .join (expected_dir , expected )
27+ with open (expected_filepath ) as in_file :
28+ expected_bytes = re .escape (in_file .read ())
29+ expected_bytes = expected_bytes .replace ("\\ *" , ".*" )
30+ expected_re = re .compile (expected_bytes )
2931
30- with open (expected_filepath ) as in_file :
31- expected_bytes = re .escape (in_file .read ())
32- expected_bytes = expected_bytes .replace ("\\ *" , ".*" )
33- expected_re = re .compile (expected_bytes )
32+ with open (actual_filepath ) as in_file :
33+ actual_bytes = in_file .read ()
3434
35- with open (actual_filepath ) as in_file :
36- actual_bytes = in_file .read ()
35+ try :
36+ test .assertRegex (actual_bytes , expected_re )
37+ except Exception :
38+ shutil .copyfile (actual_filepath , f"{ expected_filepath } .actual" )
39+ raise
3740
38- try :
39- self .assertRegex (actual_bytes , expected_re )
40- except Exception :
41- shutil .copyfile (actual_filepath , f"{ expected_filepath } .actual" )
42- raise
41+
42+ class TestGypUnix (unittest .TestCase ):
43+ supported_sysnames = {"darwin" , "linux" }
44+
45+ def setUp (self ) -> None :
46+ if sysname not in TestGypUnix .supported_sysnames :
47+ self .skipTest (f"Unsupported system: { sysname } " )
48+ shutil .rmtree (os .path .join (fixture_dir , "out" ), ignore_errors = True )
4349
4450 def test_ninja (self ) -> None :
4551 rc = gyp .main (["-f" , "ninja" , "--depth" , fixture_dir , gyp_file ])
4652 assert rc == 0
4753
48- self . assert_file ("out/Default/obj/test.ninja" , "ninja/test.ninja" )
54+ assert_file (self , "out/Default/obj/test.ninja" , "ninja/test.ninja" )
4955
5056 def test_make (self ) -> None :
5157 rc = gyp .main (
@@ -61,10 +67,34 @@ def test_make(self) -> None:
6167 )
6268 assert rc == 0
6369
64- self . assert_file ("out/test.target.mk" , "make/test.target.mk" )
70+ assert_file (self , "out/test.target.mk" , "make/test.target.mk" )
6571
6672 def test_cmake (self ) -> None :
6773 rc = gyp .main (["-f" , "cmake" , "--depth" , fixture_dir , gyp_file ])
6874 assert rc == 0
6975
70- self .assert_file ("out/Default/CMakeLists.txt" , "cmake/CMakeLists.txt" )
76+ assert_file (self , "out/Default/CMakeLists.txt" , "cmake/CMakeLists.txt" )
77+
78+
79+ class TestGypWindows (unittest .TestCase ):
80+ def setUp (self ) -> None :
81+ if sys .platform != "win32" :
82+ self .skipTest ("Windows-only test" )
83+ shutil .rmtree (os .path .join (fixture_dir , "out" ), ignore_errors = True )
84+
85+ def test_msvs (self ) -> None :
86+ rc = gyp .main (
87+ [
88+ "-f" ,
89+ "msvs" ,
90+ "--depth" ,
91+ fixture_dir ,
92+ "--generator-output" ,
93+ "out" ,
94+ gyp_file
95+ ]
96+ )
97+ assert rc == 0
98+
99+ assert_file (self , "test.vcproj" , "msvs/test.vcproj" )
100+ assert_file (self , "integration.sln" , "msvs/integration.sln" )
0 commit comments