More unit tests and unified target for all tests (#6661)

* added general settings tests

* fixed pre-219 switchUnlockState (CPN)

* X7 radio settings tests

* updated X10 model

* patched TESTS_PATH to point directly at the complete tests path

* fixed horus general settings switch conversion

* cpn x10 general settings tests

* fixed horus cpn import

* use x10 model from otx file to ease editing with companion

* added make targets "gtests" and "tests"

gtests builds all the tests (radio & companion)
tests builds and executes all the tests (radio & companion)

* fixed companion tests cmake

* fixed gtests-radio target

* fixed commit tests

* fixed converting LS & RS on X10

* fixed converting global functions on X10

* fixed source conversion on X10

* fixed throttle source on X10

* fixed throttle source on radio and companion

* more checks and re-enabled Horus screenData copy

* more tests (X10)

* [X10] restore correct direction for RS & LS

* [horus] convert "Value" widget source

* fixed conversion of ModelHeader::bitmap length

* added missing X10 radio tests to companion tests

* fixed conversion of telemetry sources in logical switches

* [horus] fixed potential crash

* fixed "AND switch" conversion in logical switches
This commit is contained in:
Raphael Coeffic
2019-08-26 08:36:31 +02:00
committed by Bertrand Songis
parent 274528ee1d
commit 5db30ea7bc
19 changed files with 340 additions and 105 deletions
+3 -2
View File
@@ -748,7 +748,8 @@ bool menuModelSetup(event_t event)
case ITEM_MODEL_SETUP_THROTTLE_TRACE:
{
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_TTRACE);
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.thrTraceSrc, NUM_POTS+NUM_SLIDERS+MAX_OUTPUT_CHANNELS);
// check if source is available (EXT1 & EXT2 on X10)
if (attr) CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, g_model.thrTraceSrc, NUM_POTS+NUM_SLIDERS+MAX_OUTPUT_CHANNELS, isThrottleSourceAvailable);
uint8_t idx = g_model.thrTraceSrc + MIXSRC_Thr;
if (idx > MIXSRC_Thr)
idx += 1;
@@ -1666,4 +1667,4 @@ bool menuModelSetup(event_t event)
}
return true;
}
}
@@ -58,6 +58,11 @@ int convertSource_218_to_219(int source)
source += 2;
#endif
#if defined(PCBX10)
if ((source == MIXSRC_EXT1) || (source == MIXSRC_EXT2))
source += 2;
#endif
return source;
}
@@ -111,6 +116,12 @@ void convertModelData_218_to_219(ModelData &model)
memcpy(&oldModel, &model, sizeof(ModelData_v218));
ModelData_v219 & newModel = (ModelData_v219 &) model;
#if defined(PCBHORUS)
// 4 bytes more for the ModelHeader::bitmap
memclear(&newModel.header.bitmap[10], 4);
memcpy(newModel.timers, oldModel.timers, offsetof(ModelData_v218, mixData) - offsetof(ModelData_v218, timers));
#endif
memclear(newModel.mixData, sizeof(ModelData_v219) - offsetof(ModelData_v219, mixData));
char name[LEN_MODEL_NAME+1];
@@ -147,9 +158,9 @@ void convertModelData_218_to_219(ModelData &model)
uint8_t cstate = lswFamily(sw.func);
if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) {
LogicalSwitchData & sw = newModel.logicalSw[i];
sw.v1 = convertSource_218_to_219((uint8_t)sw.v1);
sw.v1 = convertSource_218_to_219(sw.v1);
if (cstate == LS_FAMILY_COMP) {
sw.v2 = convertSource_218_to_219((uint8_t)sw.v2);
sw.v2 = convertSource_218_to_219(sw.v2);
}
}
else if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
@@ -159,6 +170,7 @@ void convertModelData_218_to_219(ModelData &model)
else if (cstate == LS_FAMILY_EDGE) {
sw.v1 = convertSwitch_218_to_219(sw.v1);
}
sw.andsw = convertSwitch_218_to_219(sw.andsw);
}
for (uint8_t i=0; i<MAX_SPECIAL_FUNCTIONS_218; i++) {
@@ -179,6 +191,10 @@ void convertModelData_218_to_219(ModelData &model)
}
newModel.thrTraceSrc = oldModel.thrTraceSrc;
#if defined(PCBX10)
if (newModel.thrTraceSrc > 3) // 0=Thr, 1/2/3=Old 3 Pots, then Sliders
newModel.thrTraceSrc += 2;
#endif
newModel.switchWarningState = oldModel.switchWarningState;
#if !defined(COLORLCD)
newModel.switchWarningEnable = oldModel.switchWarningEnable;
@@ -279,9 +295,33 @@ void convertModelData_218_to_219(ModelData &model)
#endif
#if defined(PCBHORUS)
// memcpy(newModel.screenData, oldModel.screenData,
// sizeof(newModel.screenData) +
// sizeof(newModel.topbarData))
memcpy(newModel.screenData, oldModel.screenData,
sizeof(newModel.screenData) +
sizeof(newModel.topbarData));
for (int screen=0; screen<MAX_CUSTOM_SCREENS; screen++) {
CustomScreenData& screenData = g_model.screenData[screen];
if (screenData.layoutName[0] == '\0')
continue;
for (int zone=0; zone<MAX_LAYOUT_ZONES; zone++) {
Layout::ZonePersistentData& zoneData = screenData.layoutData.zones[zone];
if (strcmp("Value",zoneData.widgetName))
continue;
ZoneOptionValue& option = zoneData.widgetData.options[0];
option.unsignedValue = convertSource_218_to_219(option.unsignedValue);
}
}
for (int zone=0; zone<MAX_LAYOUT_ZONES; zone++) {
Topbar::ZonePersistentData& zoneData = g_model.topbarData.zones[zone];
if (strcmp("Value",zoneData.widgetName))
continue;
ZoneOptionValue& option = zoneData.widgetData.options[0];
option.unsignedValue = convertSource_218_to_219(option.unsignedValue);
}
#else
newModel.screensType = oldModel.frsky.screensType;
memmove(&newModel.screens, &oldModel.frsky.screens, sizeof(newModel.screens));
@@ -320,13 +360,6 @@ void convertRadioData_218_to_219(RadioData & settings)
memcpy(&oldSettings, &settings, sizeof(RadioData_v218));
#endif
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX7) || defined(PCBXLITE)
for (uint8_t i=0; i<MAX_SPECIAL_FUNCTIONS_218; i++) {
CustomFunctionData & cf = settings.customFn[i];
cf.swtch = convertSwitch_218_to_219(cf.swtch);
}
#endif
#if defined(PCBX9D) || defined(PCBX9DP)
// no bluetooth before PCBREV 2019
settings.auxSerialMode = oldSettings.auxSerialMode;
@@ -376,6 +409,16 @@ void convertRadioData_218_to_219(RadioData & settings)
g_eeGeneral.potsConfig = bfSet<uint32_t>(g_eeGeneral.potsConfig, POT_WITHOUT_DETENT, 2, 2); // T12 comes with wrongly defined pot2
#endif
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX7) || defined(PCBXLITE) || defined(PCBHORUS)
for (uint8_t i=0; i<MAX_SPECIAL_FUNCTIONS_218; i++) {
CustomFunctionData & cf = settings.customFn[i];
cf.swtch = convertSwitch_218_to_219(cf.swtch);
if (cf.func == FUNC_PLAY_VALUE || cf.func == FUNC_VOLUME || (IS_ADJUST_GV_FUNC(cf.func) && cf.all.mode == FUNC_ADJUST_GVAR_SOURCE)) {
cf.all.val = convertSource_218_to_219(cf.all.val);
}
}
#endif
#if defined(PCBX9DP) && PCBREV >= 2019
// force re-calibration
settings.chkSum = 0xFFFF;
+7 -8
View File
@@ -80,11 +80,6 @@ void ModelCell::loadBitmap()
}) partialmodel;
const char * error = NULL;
buffer = new BitmapBuffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT);
if (buffer == NULL) {
return;
}
if (strncmp(modelFilename, g_eeGeneral.currModelFilename, LEN_MODEL_FILENAME) == 0) {
memcpy(&partialmodel.header, &g_model.header, sizeof(partialmodel));
}
@@ -92,6 +87,13 @@ void ModelCell::loadBitmap()
error = readModel(modelFilename, (uint8_t *)&partialmodel.header, sizeof(partialmodel), &version);
}
if ((modelName[0] == 0) && ! error)
setModelName(partialmodel.header.name); // resets buffer!!!
buffer = new BitmapBuffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT);
if (buffer == NULL) {
return;
}
buffer->clear(TEXT_BGCOLOR);
if (error) {
@@ -99,9 +101,6 @@ void ModelCell::loadBitmap()
buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR);
}
else {
if (modelName[0] == 0)
setModelName(partialmodel.header.name);
char timer[LEN_TIMER_STRING];
buffer->drawSizedText(5, 2, modelName, LEN_MODEL_NAME, SMLSIZE|TEXT_COLOR);
getTimerString(timer, 0);
@@ -23,7 +23,7 @@
#if defined(SIMU)
// not needed
#elif defined(PCBX10)
const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, -1,1,-1, 1,1, -1, 1};
const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, -1,1,-1, 1,1, 1, -1};
#elif defined(PCBX9E)
#if defined(HORUS_STICKS)
const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, -1,-1,-1,1, -1,1,-1, -1,-1,-1};
+25 -10
View File
@@ -4,23 +4,35 @@ find_path(GTEST_INCDIR gtest/gtest.h HINTS "${GTEST_ROOT}/include" DOC "Path to
find_path(GTEST_SRCDIR src/gtest-all.cc HINTS "${GTEST_ROOT}" "${GTEST_ROOT}/src/gtest" DOC "Path of Google Test 'src' folder.")
if(GTEST_INCDIR AND GTEST_SRCDIR AND Qt5Widgets_FOUND)
add_library(gtests-lib STATIC EXCLUDE_FROM_ALL ${GTEST_SRCDIR}/src/gtest-all.cc )
target_include_directories(gtests-lib PUBLIC ${GTEST_INCDIR} ${GTEST_INCDIR}/gtest ${GTEST_SRCDIR})
add_library(gtests-radio-lib STATIC EXCLUDE_FROM_ALL ${GTEST_SRCDIR}/src/gtest-all.cc )
target_include_directories(gtests-radio-lib PUBLIC ${GTEST_INCDIR} ${GTEST_INCDIR}/gtest ${GTEST_SRCDIR})
add_definitions(-DSIMU)
add_definitions(-DGTESTS)
remove_definitions(-DCLI)
set(TESTS_PATH ${RADIO_SRC_DIRECTORY})
set(TESTS_PATH ${RADIO_SRC_DIRECTORY}/tests)
configure_file(${RADIO_SRC_DIRECTORY}/tests/location.h.in ${CMAKE_CURRENT_BINARY_DIR}/location.h @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
add_custom_command(
MAIN_DEPENDENCY ${TESTS_PATH}/model_22_x10.otx
OUTPUT ${TESTS_PATH}/model_22_x10/RADIO/radio.bin ${TESTS_PATH}/model_22_x10/RADIO/models.txt ${TESTS_PATH}/model_22_x10/MODELS/model1.bin
COMMAND mkdir -p model_22_x10 && cd model_22_x10 && unzip -o -DD ../model_22_x10.otx
WORKING_DIRECTORY ${TESTS_PATH}
)
add_custom_target(x10-model-test-files
DEPENDS ${TESTS_PATH}/model_22_x10/RADIO/radio.bin ${TESTS_PATH}/model_22_x10/RADIO/models.txt ${TESTS_PATH}/model_22_x10/MODELS/model1.bin
)
endif()
if(WIN32)
target_include_directories(gtests-lib PUBLIC ${WIN_INCLUDE_DIRS})
target_link_libraries(gtests-lib PRIVATE ${WIN_LINK_LIBRARIES})
target_include_directories(gtests-radio-lib PUBLIC ${WIN_INCLUDE_DIRS})
target_link_libraries(gtests-radio-lib PRIVATE ${WIN_LINK_LIBRARIES})
endif(WIN32)
if(SDL_FOUND AND SIMU_AUDIO)
target_include_directories(gtests-lib PUBLIC ${SDL_INCLUDE_DIR})
target_link_libraries(gtests-lib PRIVATE ${SDL_LIBRARY})
target_include_directories(gtests-radio-lib PUBLIC ${SDL_INCLUDE_DIR})
target_link_libraries(gtests-radio-lib PRIVATE ${SDL_LIBRARY})
endif()
foreach(FILE ${SRC})
@@ -38,9 +50,12 @@ if(GTEST_INCDIR AND GTEST_SRCDIR AND Qt5Widgets_FOUND)
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp ../targets/simu/simueeprom.cpp ../targets/simu/simufatfs.cpp)
add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib)
target_link_libraries(gtests gtests-lib pthread Qt5::Core Qt5::Widgets)
add_executable(gtests-radio EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp ../targets/simu/simueeprom.cpp ../targets/simu/simufatfs.cpp)
add_dependencies(gtests-radio ${FIRMWARE_DEPENDENCIES} gtests-radio-lib)
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
add_dependencies(gtests-radio x10-model-test-files)
endif()
target_link_libraries(gtests-radio gtests-radio-lib pthread Qt5::Core Qt5::Widgets)
message(STATUS "Added optional gtests target")
else()
message(WARNING "WARNING: gtests target will not be available (check that GTEST_INCDIR, GTEST_SRCDIR, and Qt5Widgets are configured).")
Binary file not shown.
+78 -12
View File
@@ -33,12 +33,26 @@ void loadEEPROMFile(const char * filename)
#if defined(PCBX9DP)
TEST(Conversions, ConversionX9DPFrom22)
{
loadEEPROMFile(TESTS_PATH "/tests/eeprom_22_x9d+.bin");
loadEEPROMFile(TESTS_PATH "/eeprom_22_x9d+.bin");
eepromOpen();
eeLoadGeneralSettingsData();
convertRadioData_218_to_219(g_eeGeneral);
eeConvertModel(0, 218);
eeLoadModel(0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_ZSTREQ("Test", g_model.header.name);
EXPECT_EQ(TMRMODE_COUNT - 1 + SWSRC_SA0, g_model.timers[0].mode);
EXPECT_EQ(80, g_model.mixData[0].weight);
@@ -60,12 +74,26 @@ TEST(Conversions, ConversionX9DPFrom22)
#if defined(PCBX7)
TEST(Conversions, ConversionX7From22)
{
loadEEPROMFile(TESTS_PATH "/tests/eeprom_22_x7.bin");
loadEEPROMFile(TESTS_PATH "/eeprom_22_x7.bin");
eepromOpen();
eeLoadGeneralSettingsData();
convertRadioData_218_to_219(g_eeGeneral);
eeConvertModel(0, 218);
eeLoadModel(0);
EXPECT_EQ(-30, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_EQ('e', g_eeGeneral.ttsLanguage[0]);
EXPECT_EQ('n', g_eeGeneral.ttsLanguage[1]);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_ZSTREQ("Test", g_model.header.name);
EXPECT_EQ(MODULE_TYPE_R9M_PXX1, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
@@ -97,30 +125,61 @@ TEST(Conversions, ConversionX7From22)
#endif
#if defined(PCBX10)
TEST(X10Conversions, ConversionRadioFrom22)
TEST(Conversions, ConversionX10From22)
{
simuFatfsSetPaths(TESTS_PATH "/tests/", TESTS_PATH "/tests/");
loadRadioSettings("/radio_22_x10.bin");
simuFatfsSetPaths(TESTS_PATH "/model_22_x10/", TESTS_PATH "/model_22_x10/");
loadRadioSettings("/RADIO/radio.bin");
loadModel("model1.bin");
EXPECT_EQ(219, g_eeGeneral.version);
EXPECT_EQ(100, g_eeGeneral.calib[9].spanNeg);
EXPECT_EQ(500, g_eeGeneral.calib[9].mid);
EXPECT_EQ(900, g_eeGeneral.calib[9].spanPos);
EXPECT_EQ(200, g_eeGeneral.calib[10].spanNeg);
EXPECT_EQ(400, g_eeGeneral.calib[10].mid);
EXPECT_EQ(600, g_eeGeneral.calib[10].spanPos);
EXPECT_EQ(-23, g_eeGeneral.vBatMin);
EXPECT_EQ(8, g_eeGeneral.speakerVolume);
EXPECT_STRNEQ("en", g_eeGeneral.ttsLanguage);
EXPECT_STRNEQ("model1.bin", g_eeGeneral.currModelFilename);
}
TEST(X10Conversions, ConversionModelFrom22)
{
simuFatfsSetPaths(TESTS_PATH "/tests/", TESTS_PATH "/tests/");
loadModel("model_22_x10.bin");
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_eeGeneral.customFn[0].swtch);
EXPECT_EQ(FUNC_LOGS, g_eeGeneral.customFn[0].func);
EXPECT_EQ(20, g_eeGeneral.customFn[0].all.val);
EXPECT_EQ(SWSRC_ON, g_eeGeneral.customFn[1].swtch);
EXPECT_EQ(FUNC_VOLUME, g_eeGeneral.customFn[1].func);
EXPECT_EQ(MIXSRC_RS, g_eeGeneral.customFn[1].all.val);
EXPECT_ZSTREQ("Tes", g_eeGeneral.switchNames[0]);
EXPECT_EQ(SWITCH_3POS, SWITCH_CONFIG(0));
EXPECT_ZSTREQ("BT_X10", g_eeGeneral.bluetoothName);
EXPECT_STREQ("Default", g_eeGeneral.themeName);
EXPECT_EQ(WHITE, g_eeGeneral.themeData.options[0].unsignedValue);
EXPECT_EQ(RED, g_eeGeneral.themeData.options[1].unsignedValue);
EXPECT_ZSTREQ("Test", g_model.header.name);
EXPECT_EQ(0, g_model.noGlobalFunctions);
EXPECT_EQ(0, g_model.beepANACenter);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[4].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[4].swtch);
EXPECT_EQ(MIXSRC_MAX, g_model.mixData[2].srcRaw); // MAX
EXPECT_EQ(MIXSRC_LS, g_model.mixData[3].srcRaw); // LS
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.mixData[5].srcRaw);
EXPECT_EQ(SWSRC_TELEMETRY_STREAMING, g_model.mixData[5].swtch);
EXPECT_EQ(-100, g_model.limitData[0].max);
EXPECT_EQ(80, g_model.expoData[0].weight);
EXPECT_EQ(LS_FUNC_VPOS, g_model.logicalSw[0].func);
EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.logicalSw[0].v1);
EXPECT_EQ(0, g_model.logicalSw[0].v2);
EXPECT_EQ(MIXSRC_FIRST_TELEM+19*3, g_model.logicalSw[1].v1); // TELE:20
EXPECT_EQ(20, g_model.logicalSw[1].v2);
EXPECT_EQ(SWSRC_FIRST_LOGICAL_SWITCH, g_model.logicalSw[1].andsw);
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_ZSTREQ("Tes", g_model.flightModeData[0].name);
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
@@ -131,6 +190,13 @@ TEST(X10Conversions, ConversionModelFrom22)
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
EXPECT_EQ(10, g_model.telemetrySensors[0].id);
EXPECT_EQ(9, g_model.telemetrySensors[0].frskyInstance.physID);
EXPECT_EQ((NUM_POTS + NUM_SLIDERS + 3), g_model.thrTraceSrc); // CH3
EXPECT_STREQ("Layout2P1", g_model.screenData[0].layoutName);
EXPECT_STREQ("ModelBmp", g_model.screenData[0].layoutData.zones[0].widgetName);
EXPECT_STREQ("Value", g_model.topbarData.zones[0].widgetName);
EXPECT_EQ(MIXSRC_FIRST_TELEM, g_model.topbarData.zones[0].widgetData.options[0].unsignedValue);
EXPECT_EQ(MIXSRC_RS, g_model.screenData[0].layoutData.zones[2].widgetData.options[0].unsignedValue);
}
#endif
Binary file not shown.
Binary file not shown.
+8 -8
View File
@@ -84,7 +84,7 @@ bool checkScreenshot(const QString & test)
QPainter p(&buffer);
doPaint(p);
QString filename(QString("%1_%2x%3.png").arg(test).arg(LCD_W).arg(LCD_H));
QImage reference(TESTS_PATH "/tests/" + filename);
QImage reference(TESTS_PATH "/" + filename);
if (buffer == reference) {
return true;
@@ -272,7 +272,7 @@ TEST(Lcd, BMPWrapping)
{
lcdClear();
uint8_t bitmap[2+40*40/2];
lcdLoadBitmap(bitmap, TESTS_PATH "/tests/plane.bmp", 40, 40);
lcdLoadBitmap(bitmap, TESTS_PATH "/plane.bmp", 40, 40);
lcdDrawBitmap(200, 0, bitmap);
lcdDrawBitmap(200, 60, bitmap);
lcdDrawBitmap(240, 60, bitmap); // x too big
@@ -341,31 +341,31 @@ TEST(Lcd, lcdDrawBitmapLoadAndDisplay)
// Test proper BMP files, they should display correctly
{
TestBuffer<1000> bitmap(BITMAP_BUFFER_SIZE(7, 32));
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/tests/4b_7x32.bmp", 7, 32) != NULL);
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/4b_7x32.bmp", 7, 32) != NULL);
bitmap.leakCheck();
lcdDrawBitmap(10, 2, bitmap.buffer());
}
{
TestBuffer<1000> bitmap(BITMAP_BUFFER_SIZE(6, 32));
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/tests/1b_6x32.bmp", 6, 32) != NULL);
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/1b_6x32.bmp", 6, 32) != NULL);
bitmap.leakCheck();
lcdDrawBitmap(20, 2, bitmap.buffer());
}
{
TestBuffer<1000> bitmap(BITMAP_BUFFER_SIZE(31, 31));
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/tests/4b_31x31.bmp", 31, 31) != NULL);
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/4b_31x31.bmp", 31, 31) != NULL);
bitmap.leakCheck();
lcdDrawBitmap(30, 2, bitmap.buffer());
}
{
TestBuffer<1000> bitmap(BITMAP_BUFFER_SIZE(39, 32));
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/tests/1b_39x32.bmp", 39, 32) != NULL);
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/1b_39x32.bmp", 39, 32) != NULL);
bitmap.leakCheck();
lcdDrawBitmap(70, 2, bitmap.buffer());
}
{
TestBuffer<1000> bitmap(BITMAP_BUFFER_SIZE(20, 20));
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/tests/4b_20x20.bmp", 20, 20) != NULL);
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/4b_20x20.bmp", 20, 20) != NULL);
bitmap.leakCheck();
lcdDrawBitmap(120, 2, bitmap.buffer());
}
@@ -379,7 +379,7 @@ TEST(Lcd, lcdDrawBitmapLoadAndDisplay)
}
{
TestBuffer<1000> bitmap(BITMAP_BUFFER_SIZE(10, 10));
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/tests/1b_39x32.bmp", 10, 10) == NULL) << "to small buffer";
EXPECT_TRUE(lcdLoadBitmap(bitmap.buffer(), TESTS_PATH "/1b_39x32.bmp", 10, 10) == NULL) << "to small buffer";
bitmap.leakCheck();
}
}
+1 -1
View File
@@ -67,7 +67,7 @@ bool checkScreenshot_480x272(const QString & test)
QPainter p(&buffer);
doPaint_480x272(p);
QString filename(QString("%1_%2x%3.png").arg(test).arg(LCD_W).arg(LCD_H));
QImage reference(TESTS_PATH "/tests/" + filename);
QImage reference(TESTS_PATH "/" + filename);
if (buffer == reference) {
return true;
Binary file not shown.
Binary file not shown.