1
0
Fork 0

[Test] Reset timer for every unit test and provide timestamps for log messages (#17028)

This commit is contained in:
Stefan Kerkmann 2022-12-14 16:31:08 +01:00 committed by GitHub
parent e2ab98f960
commit 962e4c0e18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 1011 additions and 41 deletions

View file

@ -12,6 +12,7 @@
#include "test_logger.hpp"
#include "test_matrix.h"
#include "test_keymap_key.hpp"
#include "timer.h"
extern "C" {
#include "action.h"
@ -41,7 +42,7 @@ extern "C" uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t position) {
}
void TestFixture::SetUpTestCase() {
test_logger.info() << "TestFixture setup-up start." << std::endl;
test_logger.info() << "test fixture setup-up start." << std::endl;
// The following is enough to bootstrap the values set in main
eeconfig_init_quantum();
@ -50,17 +51,19 @@ void TestFixture::SetUpTestCase() {
TestDriver driver;
keyboard_init();
test_logger.info() << "TestFixture setup-up end." << std::endl;
test_logger.info() << "test fixture setup-up end." << std::endl;
}
void TestFixture::TearDownTestCase() {}
TestFixture::TestFixture() {
m_this = this;
timer_clear();
test_logger.info() << "tapping term is " << +GET_TAPPING_TERM(KC_TRANSPARENT, &(keyrecord_t){}) << "ms" << std::endl;
}
TestFixture::~TestFixture() {
test_logger.info() << "TestFixture clean-up start." << std::endl;
test_logger.info() << "test fixture clean-up start." << std::endl;
TestDriver driver;
/* Reset keyboard state. */
@ -85,17 +88,15 @@ TestFixture::~TestFixture() {
EXPECT_NO_REPORT(driver);
idle_for(TAPPING_TERM * 10);
testing::Mock::VerifyAndClearExpectations(&driver);
m_this = nullptr;
test_logger.info() << "TestFixture clean-up end." << std::endl;
test_logger.info() << "test fixture clean-up end." << std::endl;
print_test_log();
}
void TestFixture::add_key(KeymapKey key) {
if (this->find_key(key.layer, key.position)) {
FAIL() << "Key is already mapped for layer " << +key.layer << " and (column,row) (" << +key.position.col << "," << +key.position.row << ")";
FAIL() << "key is already mapped for layer " << +key.layer << " and (column,row) (" << +key.position.col << "," << +key.position.row << ")";
}
this->keymap.push_back(key);
@ -149,7 +150,7 @@ void TestFixture::get_keycode(const layer_t layer, const keypos_t position, uint
/* See if this is done in hardware as well, because this is 100% out of bounds reads on all QMK keebs out there. */
auto msg = [&]() {
std::stringstream msg;
msg << "Keycode for position (" << +position.col << "," << +position.row << ") requested! This is out of bounds." << std::endl;
msg << "keycode for position (" << +position.col << "," << +position.row << ") requested! This is out of bounds." << std::endl;
return msg.str();
}();
@ -164,17 +165,18 @@ void TestFixture::get_keycode(const layer_t layer, const keypos_t position, uint
return;
}
FAIL() << "No key is mapped for layer " << +layer << " and (column,row) " << +position.col << "," << +position.row << ")";
FAIL() << "no key is mapped for layer " << +layer << " and (column,row) " << +position.col << "," << +position.row << ")";
}
void TestFixture::run_one_scan_loop() {
keyboard_task();
advance_time(1);
this->idle_for(1);
}
void TestFixture::idle_for(unsigned time) {
test_logger.trace() << +time << " keyboard task " << (time > 1 ? "loops" : "loop") << std::endl;
for (unsigned i = 0; i < time; i++) {
run_one_scan_loop();
keyboard_task();
advance_time(1);
}
}
@ -182,12 +184,13 @@ void TestFixture::print_test_log() const {
const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
if (HasFailure()) {
std::cerr << test_info->test_case_name() << "." << test_info->name() << " failed!" << std::endl;
test_logger.print_header();
test_logger.print_log();
}
test_logger.reset();
}
void TestFixture::expect_layer_state(layer_t layer_state) const {
test_logger.trace() << "Layer state: (" << +layer_state << ") Highest layer bit: (" << +get_highest_layer(layer_state) << ")" << std::endl;
test_logger.trace() << "layer state: (" << +layer_state << ") highest layer bit: (" << +get_highest_layer(layer_state) << ")" << std::endl;
EXPECT_TRUE(layer_state_is(layer_state));
}