forked from platformio/platformio-core
Add basic test for CLion integration
This commit is contained in:
@ -16,6 +16,10 @@ import json
|
|||||||
from os import getcwd, makedirs
|
from os import getcwd, makedirs
|
||||||
from os.path import getsize, isdir, isfile, join
|
from os.path import getsize, isdir, isfile, join
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from platformio import proc
|
||||||
|
from platformio.commands import platform as cli_platform
|
||||||
from platformio.commands.boards import cli as cmd_boards
|
from platformio.commands.boards import cli as cmd_boards
|
||||||
from platformio.commands.project import project_init as cmd_init
|
from platformio.commands.project import project_init as cmd_init
|
||||||
from platformio.project.config import ProjectConfig
|
from platformio.project.config import ProjectConfig
|
||||||
@ -177,3 +181,83 @@ def test_init_incorrect_board(clirunner):
|
|||||||
assert result.exit_code == 2
|
assert result.exit_code == 2
|
||||||
assert "Error: Invalid value for" in result.output
|
assert "Error: Invalid value for" in result.output
|
||||||
assert isinstance(result.exception, SystemExit)
|
assert isinstance(result.exception, SystemExit)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(not proc.is_ci(), reason="runs on CI")
|
||||||
|
def test_init_ide_clion(clirunner, isolated_pio_core, validate_cliresult, tmpdir):
|
||||||
|
result = clirunner.invoke(
|
||||||
|
cli_platform.platform_install,
|
||||||
|
[
|
||||||
|
"ststm32",
|
||||||
|
"--skip-default-package",
|
||||||
|
"--with-package",
|
||||||
|
"tool-cmake",
|
||||||
|
"--with-package",
|
||||||
|
"tool-ninja",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add extra libraries to cover cases with possible unwanted backslashes
|
||||||
|
lib_extra_dirs = isolated_pio_core.join("extra_libs").mkdir()
|
||||||
|
extra_lib = lib_extra_dirs.join("extra_lib").mkdir()
|
||||||
|
extra_lib.join("extra_lib.h").write(" ")
|
||||||
|
extra_lib.join("extra_lib.cpp").write(" ")
|
||||||
|
|
||||||
|
with tmpdir.as_cwd():
|
||||||
|
result = clirunner.invoke(
|
||||||
|
cmd_init,
|
||||||
|
[
|
||||||
|
"-b",
|
||||||
|
"nucleo_f401re",
|
||||||
|
"--ide",
|
||||||
|
"clion",
|
||||||
|
"--project-option",
|
||||||
|
"framework=arduino",
|
||||||
|
"--project-option",
|
||||||
|
"lib_extra_dirs=%s" % str(lib_extra_dirs),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
validate_cliresult(result)
|
||||||
|
assert all(isfile(f) for f in ("CMakeLists.txt", "CMakeListsPrivate.txt"))
|
||||||
|
|
||||||
|
tmpdir.join("src").join("main.cpp").write(
|
||||||
|
"""#include <Arduino.h>
|
||||||
|
#include "extra_lib.h"
|
||||||
|
void setup(){}
|
||||||
|
void loop(){}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
cmake_path = str(
|
||||||
|
isolated_pio_core.join("packages")
|
||||||
|
.join("tool-cmake")
|
||||||
|
.join("bin")
|
||||||
|
.join("cmake")
|
||||||
|
)
|
||||||
|
tmpdir.join("build_dir").mkdir()
|
||||||
|
result = proc.exec_command(
|
||||||
|
[
|
||||||
|
cmake_path,
|
||||||
|
"-DCMAKE_BUILD_TYPE=nucleo_f401re",
|
||||||
|
"-DCMAKE_MAKE_PROGRAM=%s"
|
||||||
|
% str(
|
||||||
|
isolated_pio_core.join("packages").join("tool-ninja").join("ninja")
|
||||||
|
),
|
||||||
|
"-G",
|
||||||
|
"Ninja",
|
||||||
|
"-S",
|
||||||
|
str(tmpdir),
|
||||||
|
"-B",
|
||||||
|
"build_dir",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check if CMake was able to generate a native project for Ninja
|
||||||
|
assert result["returncode"] == 0, result["out"]
|
||||||
|
|
||||||
|
result = proc.exec_command(
|
||||||
|
[cmake_path, "--build", "build_dir", "--target", "Debug"]
|
||||||
|
)
|
||||||
|
|
||||||
|
assert result["returncode"] == 0
|
||||||
|
assert "[SUCCESS]" in str(result["out"])
|
||||||
|
Reference in New Issue
Block a user