Index: sources/gui/qml/components/TouchArea.qml =================================================================== diff -u -r7edbf109108511ddf6066758bdb7aa29f9d8fad3 -rae97f70129df818530bcb70c934c42fa28eb6034 --- sources/gui/qml/components/TouchArea.qml (.../TouchArea.qml) (revision 7edbf109108511ddf6066758bdb7aa29f9d8fad3) +++ sources/gui/qml/components/TouchArea.qml (.../TouchArea.qml) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -26,7 +26,7 @@ * if set to be touchable will show an arrow right side of the title * next to the right edge of the component. */ -Item { id : _root +Rectangle { id : _root enum Orientation { Horizontal, Vertical @@ -45,6 +45,7 @@ signal clicked() + color: "transparent" width : _column.width + arrowSpacing height: _column.height clip : false Index: sources/storage/logger.cpp =================================================================== diff -u -r057d3ef4e29c63235040c5cfe8c6421ef7787d6a -rae97f70129df818530bcb70c934c42fa28eb6034 --- sources/storage/logger.cpp (.../logger.cpp) (revision 057d3ef4e29c63235040c5cfe8c6421ef7787d6a) +++ sources/storage/logger.cpp (.../logger.cpp) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -65,10 +65,13 @@ */ bool Logger::init(QThread &vThread) { + // coco begin validated: Application is not running in multi-threaded mode for testing + // it has been tested and works perfectly fine in normal run. if ( ! init() ) return false; initThread(vThread); return true; } +// coco end /*! * \brief Logger quit @@ -79,6 +82,7 @@ { // coco begin validated: Application termination is not correctly done in coco!!! // it has been tested and works perfectly fine in normal run. + qDebug() << "void Logger::quit()"; quitThread(); } // coco end @@ -112,6 +116,8 @@ */ void Logger::initThread(QThread &vThread) { + // coco begin validated: Application is not running in multi-threaded mode for testing + // it has been tested and works perfectly fine in normal run. // runs in main thread Q_ASSERT_X(QThread::currentThread() == qApp->thread() , __func__, "The Class initialization must be done in Main Thread" ); _thread = &vThread; @@ -120,7 +126,7 @@ _thread->start(); moveToThread(_thread); } - +// coco end /*! * \brief Logger::quitThread * \details Moves this object to main thread to be handled by QApplicaiton @@ -130,7 +136,6 @@ { // coco begin validated: Application termination is not correctly done in coco!!! // it has been tested and works perfectly fine in normal run. - if (! _thread) return; // runs in thread @@ -145,7 +150,10 @@ void Logger::checkLogPath() { setLogBasePath(); // try to use /media/sd_card on device + // coco begin validated: It can only happen if the file system is readonly for any reson. + // it has been tested and works perfectly fine in normal run. if (! setLogPath()) { // check and create log folders & if unsuccessful then + // coco end setLogBasePath(true); // try to use application folder setLogPath ( ); // check and create log folders // Note: it may require to check for write access regarding device setup } @@ -176,9 +184,9 @@ bool Logger::setLogPath() { bool ok = true; - ok = ok && setLogPath(LogType::eLogEvent); - ok = ok && setLogPath(LogType::eLogError); - ok = ok && setLogPath(LogType::eLogDatum); + if ( ! setLogPath(LogType::eLogEvent) ) ok = false; + if ( ! setLogPath(LogType::eLogError) ) ok = false; + if ( ! setLogPath(LogType::eLogDatum) ) ok = false; return ok; } @@ -227,12 +235,17 @@ LOG_ERROR(tr("Incorrect type of logging").arg(vLogType)); } - mContent += _logPrefix[vLogType]; + QString logPrefix = _logPrefix[vLogType]; + if (logPrefix.isEmpty()) logPrefix = _logPrefix[LogType::eLogError]; + mContent += logPrefix; mContent += _prefixSeparator; mContent += QTime::currentTime().toString(_timeFormat); mContent += _timeSeparator + vContent; QString fileName = date + _dateSeparator + Log_File_Name; - _logFileName = _logPathNames[vLogType] + fileName; + QString logPathName = _logPathNames[vLogType]; + if (logPathName.isEmpty()) + logPathName = _logPathNames[LogType::eLogError]; + _logFileName = logPathName + fileName; FileHandler::write(_logFileName, mContent + "\r\n", true); if (vLogType == eLogError) { #ifdef QT_DEBUG Index: sources/utility/format.cpp =================================================================== diff -u -r8f6f7c11390e3ed6d918f1717d8e8b7ae5b7e5c6 -rae97f70129df818530bcb70c934c42fa28eb6034 --- sources/utility/format.cpp (.../format.cpp) (revision 8f6f7c11390e3ed6d918f1717d8e8b7ae5b7e5c6) +++ sources/utility/format.cpp (.../format.cpp) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -52,44 +52,27 @@ return mData; } - if ( vData.type() == static_cast(QMetaType::Float) ) { + if ( vData.type() == static_cast(QMetaType::Float) || + vData.type() == QVariant::Double ) { Types::F32 f32; - float value; bool ok = false; - value = vData.toFloat(&ok); - if (ok) { - f32.value = value; - } else { - f32.value = 0; - } + f32.value = vData.toFloat(&ok); Types::setValue(f32, mData); return mData; } if ( vData.type() == QVariant::UInt ) { Types::U32 u32; - quint32 value; bool ok = false; - value = vData.toUInt(&ok); - if (ok) { - u32.value = value; - } else { - u32.value = 0; - } + u32.value = vData.toUInt(&ok); Types::setValue(u32, mData); return mData; } if ( vData.type() == QVariant::Int ) { Types::S32 s32; - qint32 value; bool ok = false; - value = vData.toInt(&ok); - if (ok) { - s32.value = value; - } else { - s32.value = 0; - } + s32.value = vData.toInt(&ok); Types::setValue(s32, mData); return mData; } Index: sources/utility/types.h =================================================================== diff -u -rfef563aa317eb3e025e2dab0264e854f05a216d6 -rae97f70129df818530bcb70c934c42fa28eb6034 --- sources/utility/types.h (.../types.h) (revision fef563aa317eb3e025e2dab0264e854f05a216d6) +++ sources/utility/types.h (.../types.h) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -117,10 +117,10 @@ if (!vStep) vStep = 1; T mMax = (T)(pow(2, sizeof(T) * 8) - 1); - if ( vValue <= mMax ) { + if ( vValue + vStep <= mMax ) { vValue += vStep; } else { - vValue = vStep - (mMax - vStep); + vValue = vValue + vStep - mMax - 1; } return vValue; } Index: unittests/tst_logging.cpp =================================================================== diff -u -r805119c460b4a266d6401c8705f4427e7fbe270f -rae97f70129df818530bcb70c934c42fa28eb6034 --- unittests/tst_logging.cpp (.../tst_logging.cpp) (revision 805119c460b4a266d6401c8705f4427e7fbe270f) +++ unittests/tst_logging.cpp (.../tst_logging.cpp) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -35,6 +35,7 @@ Threads::registerTypes(); _Logger._timeFormat = ""; _Logger.init(); + _Logger.init(); QString mContent; FileHandler::read(_Logger._logFileName, mContent); QCOMPARE(mContent, "Event: , Storage::Logger Initialized\n"); @@ -54,6 +55,16 @@ "Event: , 1 - Event log has been created\n"); } +void tst_logging::logDatum() +{ + LOG_DATUM("3 - Datum log has been created"); + QString mContent; + FileHandler::read(_Logger._logFileName, mContent); + QCOMPARE(mContent, "Event: , Storage::Logger Initialized\n" + "Event: , 1 - Event log has been created\n" + "Datum: , 3 - Datum log has been created\n"); +} + void tst_logging::logError() { LOG_ERROR("2 - Error log has been created"); @@ -62,13 +73,26 @@ QCOMPARE(mContent, "Error: , 2 - Error log has been created\n"); } -void tst_logging::logDatum() +void tst_logging::logUnknown() { - LOG_DATUM("3 - Datum log has been created"); + emit Storage::Logger::I().didLog("4 - Datum log has been created", Storage::Logger::LogType::eLogType_Count); QString mContent; FileHandler::read(_Logger._logFileName, mContent); - QCOMPARE(mContent, "Event: , Storage::Logger Initialized\n" - "Event: , 1 - Event log has been created\n" - "Datum: , 3 - Datum log has been created\n"); + QCOMPARE(mContent, "Error: , 2 - Error log has been created\n" + "Error: , Incorrect type of logging\n" + "Error: , 4 - Datum log has been created\n"); } +void tst_logging::setLogPath_F() +{ + _Logger._dir = "/"; + bool b = _Logger.setLogPath(); + QCOMPARE(b , false); +} + +void tst_logging::setLogPath_T() +{ + _Logger._dir = "/home/denali"; + bool b = _Logger.setLogPath(); + QCOMPARE(b , true); +} Index: unittests/tst_logging.h =================================================================== diff -u -ra5c6a0d81d94961d9035799a898422785079d6ad -rae97f70129df818530bcb70c934c42fa28eb6034 --- unittests/tst_logging.h (.../tst_logging.h) (revision a5c6a0d81d94961d9035799a898422785079d6ad) +++ unittests/tst_logging.h (.../tst_logging.h) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -40,5 +40,9 @@ void logEvent(); void logError(); void logDatum(); + void logUnknown(); + + void setLogPath_F(); + void setLogPath_T(); }; Index: unittests/tst_utilities.cpp =================================================================== diff -u -r710b55a51c2f10c639d33034282960c190eb24ef -rae97f70129df818530bcb70c934c42fa28eb6034 --- unittests/tst_utilities.cpp (.../tst_utilities.cpp) (revision 710b55a51c2f10c639d33034282960c190eb24ef) +++ unittests/tst_utilities.cpp (.../tst_utilities.cpp) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -68,6 +68,106 @@ QCOMPARE(Format::fromVariant("@"), "@"); } +void tst_utilities::tst_fromvariant_ByteArray() +{ + QByteArray ba; + ba += '@'; + ba += '\0'; + ba += '\0'; + ba += '\0'; + QVariant var(ba); + QCOMPARE(Format::fromVariant(var), ba); +} + +void tst_utilities::tst_fromvariant_Float() +{ + float f = 12.5; + QByteArray ba; + ba += '\0'; + ba += '\0'; + ba += 0x48; + ba += 0x41; + QCOMPARE(Format::fromVariant(f).toHex(), ba.toHex()); +} + +void tst_utilities::tst_fromvariant_UInt() +{ + quint32 ui = 65500; + QByteArray ba; + ba += 0xDC; + ba += 0xFF; + ba += '\0'; + ba += '\0'; + QCOMPARE(Format::fromVariant(ui).toHex(), ba.toHex()); +} + +void tst_utilities::tst_fromvariant_Int_Pos() +{ + qint32 pi = 32700; + QByteArray ba; + ba += 0xBC; + ba += 0x7F; + ba += '\0'; + ba += '\0'; + QCOMPARE(Format::fromVariant(pi).toHex(), ba.toHex()); +} + +void tst_utilities::tst_fromvariant_Int_Neg() +{ + qint32 ni = -32700; + QByteArray ba; + ba += 0x44; + ba += 0x80; + ba += 0xFF; + ba += 0xFF; + QCOMPARE(Format::fromVariant(ni).toHex(), ba.toHex()); +} + +void tst_utilities::tst_fromvariant_List() +{ + quint32 ui = 65500 ; + float f = 12.5 ; + qint32 pi = 32700 ; + qint32 ni = -32700 ; + QVariantList vl; + vl += 12.5; // float with no type is double in QVariant + vl += f; + vl += ui; + vl += pi; + vl += ni; + + QByteArray ba; + ba += '\0'; + ba += '\0'; + ba += 0x48; + ba += 0x41; + ba += '\0'; + ba += '\0'; + ba += 0x48; + ba += 0x41; + ba += 0xDC; + ba += 0xFF; + ba += '\0'; + ba += '\0'; + ba += 0xBC; + ba += 0x7F; + ba += '\0'; + ba += '\0'; + ba += 0x44; + ba += 0x80; + ba += 0xFF; + ba += 0xFF; + QCOMPARE(Format::fromVariant(vl).toHex(), ba.toHex()); +} + +void tst_utilities::tst_fromvariant_Else() +{ + bool b = true; + QByteArray ba; + ba += 0x01; + QCOMPARE(Format::fromVariant(b).toHex(), ba.toHex()); +} + void tst_utilities::tst_getValue_len() { Types::S32 vFlowSetPoint; @@ -77,4 +177,25 @@ QVERIFY( ! Types::getValue<>( data, index, vFlowSetPoint ) ); } +void tst_utilities::tst_safeIncrement_StepZero() +{ + uchar c = 0; + Types::safeIncrement(c, 0); + QCOMPARE(c, 1); +} +void tst_utilities::tst_safeIncrement_GtMaxValue_Step10() +{ + uchar c = 250; + Types::safeIncrement(c, 10); + QCOMPARE(c, 4); +} + +void tst_utilities::tst_safeIncrement_GtMaxValue_Step1() +{ + uchar c = 255; + Types::safeIncrement(c); + QCOMPARE(c, 0); +} + + Index: unittests/tst_utilities.h =================================================================== diff -u -r805119c460b4a266d6401c8705f4427e7fbe270f -rae97f70129df818530bcb70c934c42fa28eb6034 --- unittests/tst_utilities.h (.../tst_utilities.h) (revision 805119c460b4a266d6401c8705f4427e7fbe270f) +++ unittests/tst_utilities.h (.../tst_utilities.h) (revision ae97f70129df818530bcb70c934c42fa28eb6034) @@ -37,6 +37,17 @@ void tst_getbits_IsError(); void tst_fromvariant_NoString(); void tst_fromvariant_IsString(); + void tst_fromvariant_ByteArray(); + void tst_fromvariant_Float(); + void tst_fromvariant_UInt(); + void tst_fromvariant_Int_Pos(); + void tst_fromvariant_Int_Neg(); + void tst_fromvariant_List(); + void tst_fromvariant_Else(); + void tst_safeIncrement_StepZero(); + void tst_safeIncrement_GtMaxValue_Step1 (); + void tst_safeIncrement_GtMaxValue_Step10(); + };