pytest-embedded 2.0.0a1__tar.gz → 2.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytest-embedded
3
- Version: 2.0.0a1
3
+ Version: 2.1.1
4
4
  Summary: A pytest plugin that designed for embedded testing.
5
5
  Author-email: Fu Hanxi <fuhanxi@espressif.com>
6
6
  Requires-Python: >=3.10
@@ -6,4 +6,4 @@ from .dut_factory import DutFactory
6
6
 
7
7
  __all__ = ['App', 'Dut', 'DutFactory']
8
8
 
9
- __version__ = '2.0.0a1'
9
+ __version__ = '2.1.1'
@@ -138,6 +138,7 @@ def _fixture_classes_and_options_fn(
138
138
  qemu_prog_path,
139
139
  qemu_cli_args,
140
140
  qemu_extra_args,
141
+ qemu_efuse_path,
141
142
  wokwi_diagram,
142
143
  skip_regenerate_image,
143
144
  encrypt,
@@ -172,6 +173,7 @@ def _fixture_classes_and_options_fn(
172
173
  'encrypt': encrypt,
173
174
  'keyfile': keyfile,
174
175
  'qemu_prog_path': qemu_prog_path,
176
+ 'qemu_efuse_path': qemu_efuse_path,
175
177
  }
176
178
  )
177
179
  else:
@@ -303,6 +305,7 @@ def _fixture_classes_and_options_fn(
303
305
  'qemu_prog_path': qemu_prog_path,
304
306
  'qemu_cli_args': qemu_cli_args,
305
307
  'qemu_extra_args': qemu_extra_args,
308
+ 'qemu_efuse_path': qemu_efuse_path,
306
309
  'app': None,
307
310
  'meta': _meta,
308
311
  'dut_index': dut_index,
@@ -674,6 +677,7 @@ class DutFactory:
674
677
  qemu_prog_path: str | None = None,
675
678
  qemu_cli_args: str | None = None,
676
679
  qemu_extra_args: str | None = None,
680
+ qemu_efuse_path: str | None = None,
677
681
  wokwi_diagram: str | None = None,
678
682
  skip_regenerate_image: bool | None = None,
679
683
  encrypt: bool | None = None,
@@ -720,6 +724,7 @@ class DutFactory:
720
724
  qemu_prog_path: QEMU program path.
721
725
  qemu_cli_args: QEMU CLI arguments.
722
726
  qemu_extra_args: Additional QEMU arguments.
727
+ qemu_efuse_path: Efuse binary path.
723
728
  wokwi_diagram: Wokwi diagram path.
724
729
  skip_regenerate_image: Skip image regeneration flag.
725
730
  encrypt: Encryption flag.
@@ -787,6 +792,7 @@ class DutFactory:
787
792
  'qemu_prog_path': qemu_prog_path,
788
793
  'qemu_cli_args': qemu_cli_args,
789
794
  'qemu_extra_args': qemu_extra_args,
795
+ 'qemu_efuse_path': qemu_efuse_path,
790
796
  'wokwi_diagram': wokwi_diagram,
791
797
  'skip_regenerate_image': skip_regenerate_image,
792
798
  'encrypt': encrypt,
@@ -274,6 +274,10 @@ def pytest_addoption(parser):
274
274
  '--qemu-extra-args',
275
275
  help='QEMU cli extra arguments, will append to the argument list. (Default: None)',
276
276
  )
277
+ qemu_group.addoption(
278
+ '--qemu-efuse-path',
279
+ help='This option makes it possible to use efuse in QEMU when it is set up.',
280
+ )
277
281
  qemu_group.addoption(
278
282
  '--skip-regenerate-image',
279
283
  help='y/yes/true for True and n/no/false for False. '
@@ -963,6 +967,13 @@ def qemu_extra_args(request: FixtureRequest) -> str | None:
963
967
  return _request_param_or_config_option_or_default(request, 'qemu_extra_args', None)
964
968
 
965
969
 
970
+ @pytest.fixture
971
+ @multi_dut_argument
972
+ def qemu_efuse_path(request: FixtureRequest) -> str | None:
973
+ """Enable parametrization for the same cli option"""
974
+ return _request_param_or_config_option_or_default(request, 'qemu_efuse_path', None)
975
+
976
+
966
977
  @pytest.fixture
967
978
  @multi_dut_argument
968
979
  def skip_regenerate_image(request: FixtureRequest) -> str | None:
@@ -1050,6 +1061,7 @@ def parametrize_fixtures(
1050
1061
  qemu_prog_path,
1051
1062
  qemu_cli_args,
1052
1063
  qemu_extra_args,
1064
+ qemu_efuse_path,
1053
1065
  wokwi_diagram,
1054
1066
  skip_regenerate_image,
1055
1067
  encrypt,
@@ -283,11 +283,51 @@ def test_expect(testdir):
283
283
  dut.expect(pattern_list, expect_all=True, timeout=1)
284
284
 
285
285
  assert e.value.value.startswith('Not found "[\'foobar\']"')
286
+
287
+ def test_expect_no_matching_list(dut): # fail
288
+ dut.write('Hello world!')
289
+ dut.write('Restarting')
290
+ dut.expect('world!', not_matching=[re.compile("Hell"), "Hello"])
291
+
292
+ def test_expect_no_matching_word(dut): # fail
293
+ dut.write('Hello world!')
294
+ dut.write('Restarting')
295
+ dut.expect('Restarting', not_matching="Hello world!")
296
+
297
+ def test_expect_no_matching_word_pass(dut):
298
+ dut.write('Hello world!')
299
+ dut.write('Restarting')
300
+ dut.expect('Restarting', not_matching="Hello world!333")
301
+
302
+ def test_expect_no_matching_word_pass_rest(dut):
303
+ dut.write('Hello world!')
304
+ dut.write('Restarting')
305
+ dut.expect('Hello world', not_matching="Restarting")
306
+
307
+ def test_expect_exact_no_matching_list(dut): # fail
308
+ dut.write('Hello world!')
309
+ dut.write('Restarting')
310
+ dut.expect_exact('world!', not_matching=["Hell1", "Hello"])
311
+
312
+ def test_expect_exact_no_matching_word(dut): # fail
313
+ dut.write('Hello world!')
314
+ dut.write('Restarting')
315
+ dut.expect_exact('Restarting', not_matching="Hello world!")
316
+
317
+ def test_expect_exact_no_matching_word_pass(dut):
318
+ dut.write('Hello world!')
319
+ dut.write('Restarting')
320
+ dut.expect_exact('Restarting', not_matching="Hello world!333")
321
+
322
+ def test_expect_exact_no_matching_word_pass_rest(dut):
323
+ dut.write('Hello world!')
324
+ dut.write('Restarting')
325
+ dut.expect_exact('Hello world', not_matching="Restarting")
286
326
  """)
287
327
 
288
328
  result = testdir.runpytest()
289
329
 
290
- result.assert_outcomes(passed=10)
330
+ result.assert_outcomes(failed=4, passed=14)
291
331
 
292
332
 
293
333
  def test_expect_from_timeout(testdir):