@@ -1176,3 +1176,188 @@ def test_from_args():
11761176
11771177 for result , expected in results :
11781178 result .assert_outcomes (** expected )
1179+
1180+
1181+ def test_expand_target_values_supported_targets (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1182+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1183+
1184+ from esp_bool_parser import SUPPORTED_TARGETS
1185+ from pytest_embedded_idf .utils import _expand_target_values
1186+
1187+ values = [['param_1' , 'supported_targets' , 'param_2' ]]
1188+ result = _expand_target_values (values , 1 )
1189+ assert len (result ) == len (SUPPORTED_TARGETS )
1190+ for target , expanded in zip (SUPPORTED_TARGETS , result ):
1191+ assert expanded == ['param_1' , target , 'param_2' ]
1192+
1193+
1194+ def test_expand_target_values_preview_targets (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1195+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1196+
1197+ from esp_bool_parser import PREVIEW_TARGETS
1198+ from pytest_embedded_idf .utils import _expand_target_values
1199+
1200+ """Test expansion of preview_targets"""
1201+ values = [['param_1' , 'preview_targets' , 'param_2' ]]
1202+ result = _expand_target_values (values , 1 )
1203+
1204+ assert len (result ) == len (PREVIEW_TARGETS )
1205+ for target , expanded in zip (PREVIEW_TARGETS , result ):
1206+ assert expanded == ['param_1' , target , 'param_2' ]
1207+
1208+
1209+ def test_expand_target_values_specific_target (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1210+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1211+
1212+ from esp_bool_parser import SUPPORTED_TARGETS
1213+ from pytest_embedded_idf .utils import _expand_target_values
1214+
1215+ """Test handling of specific target"""
1216+ values = [['param_1' , 'esp32' , 'param_2' ], ['param_3' , 'supported_targets' , 'param_4' ]]
1217+ result = _expand_target_values (values , 1 )
1218+
1219+ assert len (result ) == 1 + len (SUPPORTED_TARGETS )
1220+ assert result == [['param_1' , 'esp32' , 'param_2' ]] + [['param_3' , _t , 'param_4' ] for _t in SUPPORTED_TARGETS ]
1221+
1222+
1223+ def test_process_pytest_value_simple (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1224+ """Test processing of simple parameter values"""
1225+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1226+
1227+ from pytest_embedded_idf .utils import _process_pytest_value
1228+
1229+ value = 'simple_value'
1230+ result = _process_pytest_value (value , - 1 )
1231+ assert result == 'simple_value'
1232+
1233+
1234+ def test_process_pytest_value_with_single_mark (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1235+ """Test processing value with a single pytest mark"""
1236+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1237+ from pytest_embedded_idf .utils import _process_pytest_value
1238+
1239+ mark = pytest .mark .skip (reason = 'test' )
1240+ value = ['param1' , 'param2' , (mark ,)]
1241+ result = _process_pytest_value (value , 2 )
1242+
1243+ assert result == pytest .param (* ('param1' , 'param2' ), marks = (mark ))
1244+ assert result .marks == (mark ,)
1245+ assert result .values == ('param1' , 'param2' )
1246+
1247+
1248+ def test_process_pytest_value_with_multiple_marks (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1249+ """Test processing value with multiple pytest marks"""
1250+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1251+ from pytest_embedded_idf .utils import _process_pytest_value
1252+
1253+ marks = (pytest .mark .skip (reason = 'test' ), pytest .mark .xfail ())
1254+ value = ['param1' , 'param2' , marks ]
1255+ result = _process_pytest_value (value , 2 )
1256+
1257+ assert result == pytest .param (* ('param1' , 'param2' ), marks = marks )
1258+ assert result .marks == marks
1259+ assert result .values == ('param1' , 'param2' )
1260+
1261+
1262+ def test_idf_parametrize_basic (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1263+ """Test basic parametrize functionality"""
1264+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1265+ from pytest_embedded_idf .utils import idf_parametrize
1266+
1267+ @idf_parametrize ('param' , ['value1' , 'value2' ], indirect = True )
1268+ def test_func ():
1269+ pass
1270+
1271+ markers = [mark for mark in test_func .pytestmark if mark .name == 'parametrize' ]
1272+ assert len (markers ) == 1
1273+ assert markers == [
1274+ (
1275+ pytest .mark .parametrize (
1276+ 'param' ,
1277+ [pytest .param (* ('value1' ,), marks = (), id = None ), pytest .param (* ('value2' ,), marks = (), id = None )],
1278+ indirect = True ,
1279+ )
1280+ ).mark
1281+ ] # Changed to indirect=True
1282+ assert markers [0 ].args [0 ] == 'param'
1283+ assert markers [0 ].args [1 ] == [
1284+ pytest .param (* ('value1' ,), marks = (), id = None ),
1285+ pytest .param (* ('value2' ,), marks = (), id = None ),
1286+ ]
1287+
1288+
1289+ def test_idf_parametrize_with_target (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1290+ """Test parametrize with target expansion"""
1291+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1292+ from esp_bool_parser import SUPPORTED_TARGETS
1293+ from pytest_embedded_idf .utils import idf_parametrize
1294+
1295+ @idf_parametrize ('target,param' , [('supported_targets' , 'something' )], indirect = True )
1296+ def test_func ():
1297+ pass
1298+
1299+ markers = [mark for mark in test_func .pytestmark if mark .name == 'parametrize' ]
1300+ assert len (markers ) == 1
1301+
1302+ expected_params = [pytest .param (* (target , 'something' ), marks = (), id = None ) for target in SUPPORTED_TARGETS ]
1303+
1304+ assert markers == [(pytest .mark .parametrize ('target,param' , expected_params , indirect = True )).mark ]
1305+
1306+ assert markers [0 ].args [0 ] == 'target,param'
1307+ assert markers [0 ].args [1 ] == expected_params
1308+
1309+
1310+ def test_idf_parametrize_with_marker (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1311+ """Test parametrize with pytest markers"""
1312+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1313+ from pytest_embedded_idf .utils import idf_parametrize
1314+
1315+ mark = pytest .mark .skip (reason = 'test' )
1316+
1317+ @idf_parametrize ('param,markers' , [('something' , mark )], indirect = True )
1318+ def test_func ():
1319+ pass
1320+
1321+ markers = [mark for mark in test_func .pytestmark if mark .name == 'parametrize' ]
1322+ assert len (markers ) == 1
1323+
1324+ expected_params = [pytest .param (* ('something' ,), marks = (mark ,), id = None )]
1325+
1326+ assert markers == [(pytest .mark .parametrize ('param' , expected_params , indirect = True )).mark ]
1327+
1328+ assert markers [0 ].args [0 ] == 'param'
1329+ assert markers [0 ].args [1 ] == expected_params
1330+
1331+
1332+ def test_idf_parametrize_with_markers (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1333+ """Test parametrize with pytest markers"""
1334+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1335+ from pytest_embedded_idf .utils import idf_parametrize
1336+
1337+ marks = (pytest .mark .skip (reason = 'test' ), pytest .mark .skip (reason = 'wait for fix' ))
1338+
1339+ @idf_parametrize ('param,markers' , [('something' , marks )], indirect = True )
1340+ def test_func ():
1341+ pass
1342+
1343+ markers = [mark for mark in test_func .pytestmark if mark .name == 'parametrize' ]
1344+ assert len (markers ) == 1
1345+
1346+ expected_params = [pytest .param (* ('something' ,), marks = marks , id = None )]
1347+
1348+ assert markers == [(pytest .mark .parametrize ('param' , expected_params , indirect = True )).mark ]
1349+
1350+ assert markers [0 ].args [0 ] == 'param'
1351+ assert markers [0 ].args [1 ] == expected_params
1352+
1353+
1354+ def test_idf_parametrize_invalid_params (testdir , copy_mock_esp_idf , monkeypatch ): # noqa: ARG001
1355+ """Test parametrize with invalid parameters"""
1356+ monkeypatch .setenv ('IDF_PATH' , str (testdir ))
1357+ from pytest_embedded_idf .utils import idf_parametrize
1358+
1359+ with pytest .raises (ValueError ):
1360+
1361+ @idf_parametrize ('' , [])
1362+ def test_func ():
1363+ pass
0 commit comments