Working test runner!!!

custom
jacqueline 2 years ago
parent e219925fac
commit 9f572cb927
  1. 6
      CMakeLists.txt
  2. 6
      common.cmake
  3. 5
      lib/catch2/CMakeLists.txt
  4. 28
      lib/catch2/catch_runner.cpp
  5. 6
      lib/catch2/include/catch_runner.hpp
  6. 5
      test/CMakeLists.txt
  7. 5
      test/main/CMakeLists.txt
  8. 40
      test/main/main.cpp

@ -1,4 +1,10 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
include(common.cmake) include(common.cmake)
# No exceptions in app builds (this is different in test builds).
idf_build_set_property(COMPILE_OPTIONS "-DRESULT_DISABLE_EXCEPTIONS" APPEND)
# Include all app components.
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/src")
project(gay-ipod-fw) project(gay-ipod-fw)

@ -14,9 +14,6 @@ list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/result")
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/lvgl") list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/lvgl")
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/catch2") list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/lib/catch2")
# Project components
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/src")
include($ENV{IDF_PATH}/tools/cmake/project.cmake) include($ENV{IDF_PATH}/tools/cmake/project.cmake)
# Additional warnings used when compiling our components. # Additional warnings used when compiling our components.
@ -30,5 +27,4 @@ set(EXTRA_WARNINGS "-Wshadow" "-Wnon-virtual-dtor" "-Wunused"
# Extra build flags that should apply to the entire build. This should mostly # Extra build flags that should apply to the entire build. This should mostly
# just be used to setting flags that our external dependencies requires. # just be used to setting flags that our external dependencies requires.
# Otherwise, prefer adding per-component build flags to keep things neat. # Otherwise, prefer adding per-component build flags to keep things neat.
idf_build_set_property( idf_build_set_property(COMPILE_OPTIONS "-DLV_CONF_INCLUDE_SIMPLE" APPEND)
COMPILE_OPTIONS "-DRESULT_DISABLE_EXCEPTIONS -DLV_CONF_INCLUDE_SIMPLE" APPEND)

@ -1 +1,4 @@
idf_component_register(SRCS "catch_runner.cpp" INCLUDE_DIRS "include") idf_component_register(
SRCS "catch_runner.cpp"
INCLUDE_DIRS "include"
REQUIRES "console")

@ -3,8 +3,28 @@
#define CATCH_CONFIG_RUNNER #define CATCH_CONFIG_RUNNER
#include "catch2/catch.hpp" #include "catch2/catch.hpp"
void run_catch(void) { #include <stdio.h>
int argc = 1; #include <string.h>
char *argv = "catch2"; #include "esp_console.h"
Catch::Session().run( argc, &argv ); #include "esp_log.h"
#include "esp_system.h"
// There must be exactly on Session instance at all times; attempting to destroy
// this will result in memory corruption.
static Catch::Session sCatchSession;
int exec_catch2(int argc, char** argv) {
// Reset the existing configuration before applying a new one. Otherwise we
// will get the combination of all configs.
sCatchSession.configData() = Catch::ConfigData();
int result = sCatchSession.applyCommandLine(argc, argv);
if (result != 0) {
return result;
}
// Returns number of failures.
int failures = sCatchSession.run();
return failures > 0;
} }

@ -1,3 +1,7 @@
#pragma once #pragma once
void run_catch(void); /*
* Executes the Catch2 test runner as if called from the commandline on a
* standard unix-y system.
*/
int exec_catch2(int argc, char **argv);

@ -1,9 +1,14 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
include(../common.cmake) include(../common.cmake)
idf_build_set_property(
COMPILE_OPTIONS "-DCATCH_CONFIG_NO_POSIX_SIGNALS -DCATCH_CONFIG_FAST_COMPILE" APPEND)
# Treat warnings as errors for test purposes. # Treat warnings as errors for test purposes.
list(APPEND EXTRA_WARNINGS "-Werror") list(APPEND EXTRA_WARNINGS "-Werror")
list(APPEND EXTRA_COMPONENT_DIRS "$ENV{PROJ_PATH}/src/drivers")
# List all components that include tests here. # List all components that include tests here.
set(TEST_COMPONENTS "drivers") set(TEST_COMPONENTS "drivers")

@ -1 +1,4 @@
idf_component_register(SRCS "main.cpp" INCLUDE_DIRS "." REQUIRE "catch2") idf_component_register(
SRCS "main.cpp"
INCLUDE_DIRS "."
REQUIRES "catch2")

@ -1,17 +1,37 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
static void print_banner(const char* text); #include "esp_console.h"
#include "esp_log.h"
#include "esp_system.h"
extern "C" { #include "catch_runner.hpp"
void app_main(void)
{
print_banner("Running tests without [ignore] tag");
}
}
static void print_banner(const char* text) void register_catch2() {
{ esp_console_cmd_t cmd{
printf("\n#### %s #####\n\n", text); .command = "catch",
.help = "Execute the catch2 test runner. Use -? for options.",
.hint = NULL,
.func = &exec_catch2,
.argtable = NULL};
esp_console_cmd_register(&cmd);
} }
extern "C" void app_main(void) {
esp_console_repl_t* repl = nullptr;
esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
repl_config.max_history_len = 16;
repl_config.prompt = "";
repl_config.max_cmdline_length = 256;
// Catch2 needs a huge stack, since it does a lot of pretty string formatting.
repl_config.task_stack_size = 1024 * 24;
esp_console_dev_uart_config_t hw_config =
ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_console_new_repl_uart(&hw_config, &repl_config, &repl));
esp_console_register_help_command();
register_catch2();
ESP_ERROR_CHECK(esp_console_start_repl(repl));
}

Loading…
Cancel
Save