mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 22:51:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | |
| # SPDX-License-Identifier: Unlicense OR CC0-1.0
 | |
| 
 | |
| import os
 | |
| import shutil
 | |
| import tempfile
 | |
| import typing as t
 | |
| from itertools import zip_longest
 | |
| 
 | |
| import pytest
 | |
| from pytest_embedded_idf import IdfDut
 | |
| 
 | |
| TEMP_DIR = tempfile.mkdtemp()
 | |
| HOST_FILE_NAME = 'host_file.txt'
 | |
| HOST_FILE_PATH = os.path.join(os.path.dirname(__file__), 'data', HOST_FILE_NAME)
 | |
| 
 | |
| 
 | |
| @pytest.fixture(autouse=True)
 | |
| def prepare() -> t.Generator[None, None, None]:
 | |
|     shutil.copyfile(HOST_FILE_PATH, os.path.join(TEMP_DIR, HOST_FILE_NAME))
 | |
| 
 | |
|     yield
 | |
| 
 | |
|     shutil.rmtree(TEMP_DIR, ignore_errors=True)
 | |
| 
 | |
| 
 | |
| @pytest.mark.esp32
 | |
| @pytest.mark.jtag
 | |
| @pytest.mark.parametrize(
 | |
|     'embedded_services, no_gdb, openocd_cli_args',
 | |
|     [
 | |
|         pytest.param(
 | |
|             'esp,idf,jtag',
 | |
|             'y',
 | |
|             f'-c \'set ESP_SEMIHOST_BASEDIR "{TEMP_DIR}"\' -f board/esp32-wrover-kit-3.3v.cfg',
 | |
|             marks=[pytest.mark.esp32],
 | |
|         ),
 | |
|     ],
 | |
|     indirect=True,
 | |
| )
 | |
| def test_semihost_vfs(dut: IdfDut) -> None:
 | |
|     dut.expect_exact('example: Switch to semihosted stdout')
 | |
|     dut.expect_exact('example: Switched back to UART stdout')
 | |
|     dut.expect_exact('example: Wrote 2798 bytes')
 | |
|     dut.expect_exact('====================== HOST DATA START =========================')
 | |
| 
 | |
|     with open(HOST_FILE_PATH) as f:
 | |
|         for line in f:
 | |
|             if line.strip():
 | |
|                 dut.expect_exact(line.strip())
 | |
| 
 | |
|     dut.expect_exact('====================== HOST DATA END =========================')
 | |
|     dut.expect_exact('example: Read 6121 bytes')
 | |
| 
 | |
|     with open(os.path.join(TEMP_DIR, 'esp32_stdout.txt')) as f:
 | |
| 
 | |
|         def expected_content() -> t.Iterator[str]:
 | |
|             yield 'example: Switched to semihosted stdout'
 | |
|             for i in range(100):
 | |
|                 yield 'Semihosted stdout write {}'.format(i)
 | |
|             yield 'example: Switch to UART stdout'
 | |
| 
 | |
|         for actual, expected in zip_longest(f, expected_content(), fillvalue='-'):
 | |
|             if expected not in actual:  # "in" used because of the printed ASCII color codes
 | |
|                 raise RuntimeError('"{}" != "{}"'.format(expected, actual.strip()))
 |