@@ -171,3 +171,55 @@ def test_inheritance_chain(self, builder: Builder, tmp_path: Path) -> None:
171171 assert 'class TestProjectPackage(CPPythonBase):' in user_content
172172 assert 'super().requirements()' in user_content
173173 assert 'super().build_requirements()' in user_content
174+
175+ def test_cmake_binary_configure (self , builder : Builder , tmp_path : Path ) -> None :
176+ """Test that cmake_binary generates configure() with forward slashes."""
177+ base_file = tmp_path / 'conanfile_base.py'
178+ cmake_path = Path ('C:/Program Files/CMake/bin/cmake.exe' )
179+
180+ builder ._create_base_conanfile (base_file , [], {}, cmake_binary = cmake_path )
181+
182+ content = base_file .read_text (encoding = 'utf-8' )
183+ assert 'def configure(self):' in content
184+ assert 'self.conf.define("tools.cmake:cmake_program"' in content
185+ assert 'C:/Program Files/CMake/bin/cmake.exe' in content
186+ assert '\\ ' not in content .split ('tools.cmake:cmake_program' )[1 ].split ('"' )[1 ]
187+
188+ def test_no_cmake_binary (self , builder : Builder , tmp_path : Path ) -> None :
189+ """Test that no cmake_binary means no configure() method."""
190+ base_file = tmp_path / 'conanfile_base.py'
191+
192+ builder ._create_base_conanfile (base_file , [], {}, cmake_binary = None )
193+
194+ content = base_file .read_text (encoding = 'utf-8' )
195+ assert 'def configure(self):' not in content
196+
197+ @pytest .mark .parametrize (
198+ ('venv_cmake' , 'expect_configure' ),
199+ [
200+ ('/path/to/venv/bin/cmake' , True ),
201+ (None , False ),
202+ ],
203+ )
204+ def test_cmake_binary_venv_fallback (
205+ self ,
206+ builder : Builder ,
207+ tmp_path : Path ,
208+ monkeypatch : pytest .MonkeyPatch ,
209+ venv_cmake : str | None ,
210+ expect_configure : bool ,
211+ ) -> None :
212+ """Test venv cmake fallback when cmake_binary is default."""
213+ monkeypatch .setattr ('cppython.plugins.conan.builder.shutil.which' , lambda _ : venv_cmake )
214+
215+ data = ConanfileGenerationData (
216+ dependencies = [],
217+ dependency_groups = {},
218+ name = 'test-project' ,
219+ version = '1.0.0' ,
220+ cmake_binary = 'cmake' ,
221+ )
222+ builder .generate_conanfile (directory = tmp_path , data = data )
223+
224+ content = (tmp_path / 'conanfile_base.py' ).read_text (encoding = 'utf-8' )
225+ assert ('def configure(self):' in content ) == expect_configure
0 commit comments