• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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