mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-09 12:35:28 +00:00
Tools: Improve the Python package system
Introduce features into the Python package management system & manage package versions outside of ESP-IDF repo.
This commit is contained in:
71
tools/test_idf_tools/test_idf_tools_python_env.py
Normal file
71
tools/test_idf_tools/test_idf_tools_python_env.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import unittest
|
||||
from typing import List
|
||||
|
||||
try:
|
||||
import idf_tools
|
||||
except ImportError:
|
||||
sys.path.append('..')
|
||||
import idf_tools
|
||||
|
||||
IDF_PATH = os.environ.get('IDF_PATH', '../..')
|
||||
TOOLS_DIR = os.environ.get('IDF_TOOLS_PATH') or os.path.expanduser(idf_tools.IDF_TOOLS_PATH_DEFAULT)
|
||||
PYTHON_DIR = os.path.join(TOOLS_DIR, 'python_env')
|
||||
REQ_SATISFIED = 'Python requirements are satisfied'
|
||||
REQ_CORE = '- {}/requirements.core.txt'.format(IDF_PATH)
|
||||
REQ_GDBGUI = '- {}/requirements.gdbgui.txt'.format(IDF_PATH)
|
||||
CONSTR = 'Constraint file: {}/espidf.constraints'.format(TOOLS_DIR)
|
||||
|
||||
|
||||
class TestPythonInstall(unittest.TestCase):
|
||||
|
||||
def setUp(self): # type: () -> None
|
||||
if os.path.isdir(PYTHON_DIR):
|
||||
shutil.rmtree(PYTHON_DIR)
|
||||
if os.path.isfile(os.path.join(TOOLS_DIR, 'idf-env.json')):
|
||||
os.remove(os.path.join(TOOLS_DIR, 'idf-env.json'))
|
||||
|
||||
def run_idf_tools(self, extra_args): # type: (List[str]) -> str
|
||||
args = [sys.executable, '../idf_tools.py'] + extra_args
|
||||
ret = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=120)
|
||||
return ret.stdout.decode('utf-8', 'ignore')
|
||||
|
||||
def test_default_arguments(self): # type: () -> None
|
||||
output = self.run_idf_tools(['check-python-dependencies'])
|
||||
self.assertNotIn(REQ_SATISFIED, output)
|
||||
self.assertIn('bin/python doesn\'t exist', output)
|
||||
|
||||
output = self.run_idf_tools(['install-python-env'])
|
||||
self.assertIn(CONSTR, output)
|
||||
self.assertIn(REQ_CORE, output)
|
||||
self.assertNotIn(REQ_GDBGUI, output)
|
||||
|
||||
output = self.run_idf_tools(['check-python-dependencies'])
|
||||
self.assertIn(REQ_SATISFIED, output)
|
||||
|
||||
def test_opt_argument(self): # type: () -> None
|
||||
output = self.run_idf_tools(['install-python-env', '--features', 'gdbgui'])
|
||||
self.assertIn(CONSTR, output)
|
||||
self.assertIn(REQ_CORE, output)
|
||||
self.assertIn(REQ_GDBGUI, output)
|
||||
|
||||
output = self.run_idf_tools(['install-python-env'])
|
||||
# The gdbgui should be installed as well because the feature is is stored in the JSON file
|
||||
self.assertIn(CONSTR, output)
|
||||
self.assertIn(REQ_CORE, output)
|
||||
self.assertIn(REQ_GDBGUI, output)
|
||||
|
||||
def test_no_constraints(self): # type: () -> None
|
||||
output = self.run_idf_tools(['install-python-env', '--no-constraints'])
|
||||
self.assertNotIn(CONSTR, output)
|
||||
self.assertIn(REQ_CORE, output)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Reference in New Issue
Block a user