1# Copyright (c) 2024 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14project(ets_debugger_tests) 15 16find_package(Python3 COMPONENTS Interpreter REQUIRED) 17 18add_custom_command( 19 OUTPUT .venv 20 COMMAND ${Python3_EXECUTABLE} -m venv .venv 21 COMMAND .venv/bin/pip install -U pip poetry 22 USES_TERMINAL 23) 24 25add_custom_target(${PROJECT_NAME}_venv 26 DEPENDS .venv 27 COMMENT "${PROJECT_NAME}: create venv" 28) 29set_property(TARGET ${PROJECT_NAME}_venv 30 APPEND PROPERTY ADDITIONAL_CLEAN_FILES 31 .venv 32) 33 34add_custom_command( 35 OUTPUT poetry.lock pyproject.toml 36 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/pyproject.toml pyproject.toml 37 COMMAND .venv/bin/poetry install --no-root --no-interaction 38 COMMAND .venv/bin/poetry show --why --no-interaction 39 DEPENDS .venv ${CMAKE_CURRENT_SOURCE_DIR}/pyproject.toml 40 USES_TERMINAL 41) 42 43add_custom_target(${PROJECT_NAME}_deps 44 DEPENDS poetry.lock pyproject.toml 45 COMMENT "${PROJECT_NAME}: install dependinces" 46 SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/pyproject.toml 47) 48 49add_custom_target(${PROJECT_NAME}_mypy 50 COMMAND .venv/bin/mypy ${CMAKE_CURRENT_SOURCE_DIR}/src 51 DEPENDS ${PROJECT_NAME}_deps 52 BYPRODUCTS .mypy_cache 53 COMMENT "${PROJECT_NAME}: mypy" 54 USES_TERMINAL 55) 56set_property(TARGET ${PROJECT_NAME}_mypy 57 APPEND PROPERTY ADDITIONAL_CLEAN_FILES 58 .mypy_cache 59) 60 61 62add_custom_target(${PROJECT_NAME}_flake8 63 COMMAND .venv/bin/flake8 --config ${CMAKE_CURRENT_SOURCE_DIR}/.flake8 ${CMAKE_CURRENT_SOURCE_DIR}/src 64 DEPENDS ${PROJECT_NAME}_deps 65 COMMENT "${PROJECT_NAME}: flake8" 66 USES_TERMINAL 67) 68 69add_custom_target(${PROJECT_NAME}_black 70 COMMAND .venv/bin/black --check --diff --config pyproject.toml ${CMAKE_CURRENT_SOURCE_DIR}/src 71 DEPENDS ${PROJECT_NAME}_deps 72 COMMENT "${PROJECT_NAME}: black" 73 USES_TERMINAL 74) 75 76add_custom_target(${PROJECT_NAME}_check 77 DEPENDS 78 ${PROJECT_NAME}_mypy 79 ${PROJECT_NAME}_flake8 80 ${PROJECT_NAME}_black 81) 82 83add_custom_target(${PROJECT_NAME} 84 COMMAND 85 ${CMAKE_CURRENT_BINARY_DIR}/.venv/bin/python3 86 -X pycache_prefix=${CMAKE_CURRENT_BINARY_DIR}/.pycache 87 -m pytest 88 -o cache_dir=${CMAKE_CURRENT_BINARY_DIR}/.pytest_cache 89 -o testpaths=${CMAKE_CURRENT_SOURCE_DIR}/src 90 --ark-build-path=${CMAKE_BINARY_DIR} 91 --rootdir=${CMAKE_CURRENT_SOURCE_DIR}/src 92 -vv 93 ${CMAKE_CURRENT_SOURCE_DIR}/src 94 DEPENDS 95 ${PROJECT_NAME}_deps 96 ${PROJECT_NAME}_check 97 panda_bins 98 arkinspector 99 BYPRODUCTS 100 ${CMAKE_CURRENT_BINARY_DIR}/.pycache 101 ${CMAKE_CURRENT_BINARY_DIR}/.pytest_cache 102 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 103 COMMENT "${PROJECT_NAME}: Running tests" 104 USES_TERMINAL 105) 106 107set_property(TARGET ${PROJECT_NAME} 108 APPEND PROPERTY ADDITIONAL_CLEAN_FILES 109 .pycache 110 .pytest_cache 111) 112