[cxx]: simple spi master class
* spi cxx unit test (CATCH-based, on host) * added portmacro.h to driver mocking * added simple testing app to write/read SPI, using an MPU9250
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
set(COMPONENTS main)
|
||||
|
||||
idf_component_set_property(driver USE_MOCK 1)
|
||||
|
||||
# Overriding components which should be mocked
|
||||
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/driver/")
|
||||
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/mocks/freertos/")
|
||||
|
||||
# Including experimental component here because it's outside IDF's main component directory
|
||||
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/examples/cxx/experimental/experimental_cpp_component/")
|
||||
project(test_system_cxx_host)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build/coverage.info"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build"
|
||||
COMMAND lcov --capture --directory . --output-file coverage.info
|
||||
COMMENT "Create coverage report"
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build/coverage_report/"
|
||||
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build/coverage.info"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build"
|
||||
COMMAND genhtml coverage.info --output-directory coverage_report/
|
||||
COMMENT "Turn coverage report into html-based visualization"
|
||||
)
|
||||
|
||||
add_custom_target(coverage
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build"
|
||||
DEPENDS "coverage_report/"
|
||||
)
|
||||
@@ -0,0 +1,8 @@
|
||||
| Supported Targets | Linux |
|
||||
| ----------------- | ----- |
|
||||
|
||||
# Build
|
||||
`idf.py build` (sdkconfig.defaults sets the linux target by default)
|
||||
|
||||
# Run
|
||||
`build/system_cxx_host_test.elf`
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
idf_component_get_property(cpp_component experimental_cpp_component COMPONENT_DIR)
|
||||
|
||||
idf_component_register(SRCS "system_cxx_test.cpp"
|
||||
"${cpp_component}/esp_exception.cpp"
|
||||
INCLUDE_DIRS
|
||||
"."
|
||||
"${cpp_component}/include"
|
||||
$ENV{IDF_PATH}/tools/catch
|
||||
REQUIRES driver)
|
||||
|
||||
target_compile_options(${COMPONENT_LIB} PUBLIC --coverage)
|
||||
target_link_libraries(${COMPONENT_LIB} --coverage)
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: CC0
|
||||
*
|
||||
* This test code is in the Public Domain (or CC0 licensed, at your option.)
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, this
|
||||
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
* CONDITIONS OF ANY KIND, either express or implied.
|
||||
*/
|
||||
|
||||
#define CATCH_CONFIG_MAIN
|
||||
|
||||
#include "catch.hpp"
|
||||
#include "system_cxx.hpp"
|
||||
|
||||
// TODO: IDF-2693, function definition just to satisfy linker, mock esp_common instead
|
||||
const char *esp_err_to_name(esp_err_t code) {
|
||||
return "test";
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
using namespace idf;
|
||||
|
||||
TEST_CASE("Frequency invalid")
|
||||
{
|
||||
CHECK_THROWS_AS(Frequency(0), ESPException&);
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency constructors correct")
|
||||
{
|
||||
Frequency f0(440);
|
||||
CHECK(440 == f0.get_value());
|
||||
Frequency f1 = Frequency::Hz(440);
|
||||
CHECK(440 == f1.get_value());
|
||||
Frequency f2 = Frequency::KHz(440);
|
||||
CHECK(440000 == f2.get_value());
|
||||
Frequency f3 = Frequency::MHz(440);
|
||||
CHECK(440000000 == f3.get_value());
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency op ==")
|
||||
{
|
||||
Frequency f0(440);
|
||||
Frequency f1(440);
|
||||
CHECK(f1 == f0);
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency op !=")
|
||||
{
|
||||
Frequency f0(440);
|
||||
Frequency f1(441);
|
||||
CHECK(f1 != f0);
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency op >")
|
||||
{
|
||||
Frequency f0(440);
|
||||
Frequency f1(441);
|
||||
Frequency f2(440);
|
||||
CHECK(f1 > f0);
|
||||
CHECK(!(f0 > f1));
|
||||
CHECK(!(f0 > f2));
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency op <")
|
||||
{
|
||||
Frequency f0(440);
|
||||
Frequency f1(441);
|
||||
Frequency f2(440);
|
||||
CHECK(f0 < f1);
|
||||
CHECK(!(f1 < f0));
|
||||
CHECK(!(f0 < f2));
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency op >=")
|
||||
{
|
||||
Frequency f0(440);
|
||||
Frequency f1(441);
|
||||
Frequency f2(440);
|
||||
CHECK (f1 >= f0);
|
||||
CHECK(!(f0 >= f1));
|
||||
CHECK (f0 >= f2);
|
||||
}
|
||||
|
||||
TEST_CASE("Frequency op <=")
|
||||
{
|
||||
Frequency f0(440);
|
||||
Frequency f1(441);
|
||||
Frequency f2(440);
|
||||
CHECK (f0 <= f1);
|
||||
CHECK(!(f1 <= f0));
|
||||
CHECK (f0 <= f2);
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=n
|
||||
CONFIG_IDF_TARGET="linux"
|
||||
CONFIG_CXX_EXCEPTIONS=y
|
||||
Reference in New Issue
Block a user