Thursday, March 31, 2011

DQuest 0.2 is released

Hi all,

 I would like to announce that the DQuest 0.2 is released! The API is
more powerful now!

The changes:

Feature enhancements:
 * Supported to create index
 * Supported to query for more complex rules
 * New utility class to create data model initial field

Critial Changes:
 * The usage of DQWhere class is changed to adapt a faster way of
usage. It is incompatible with 0.1.

Detailed Changes:

 * Deprecated &,| operator overloading and removed from code. It is
replaced by && and ||
 * Changed the definition of constructor. The left operand pass to
constructor is restricted to data model field only. It is not
compatible with old code
 * Improved the operator overloading mechanism. It become a more
powerful class
 * Supported to query by compare the value on different field. The
following query become possible:
 - select * from table where field1 = field2
 * New supported operators: &&,||,+,-,*,/,

 * Supported private field

 * A new class for sqlite indexing

 * Supported bool and QStringList as the template type T
 * Added operator T() casting. It can be casted to T automatically.

 DQBaseField::get() / DQModelMetaInfo::value() - Added a new argument
 * It is true if the QVariant return should be converted to a type
which is suitable for saving. It is designed for type like QStringList
which is not supported by SQLite backend by default.

 * Change this connection to be the default connection
 * operator == / !- compare is two connection share the same database

 * Added new function select()  - Construct a new query object with
only the fields assigned in result
 * Added new function orderBy() - Construct a new query object with
required sorting order
 * Added new function setConnection() - Set the database connection

 * A new class, it provides a stream interface for reading and writing
data model field

 * A new class, it is a utility class to create the content for DQList
object with predefined field

 * Added new function save() - Save all the contained item to database


Project page:

Monday, March 28, 2011

A tiny utility - QTestLib application runner

The QTestLib framework, provided by Nokia, is a tool for unit testing Qt based applications and libraries. The framework is very easy to use and sutiable for TDD like development approach.

To make a test program, you just have to create the an unit test project in Qt Creator.

However, when the no. of test case growth, you may break down the test case into few different classes. But the code template generated by Qt Creator combined everything into a single  source file. And it do not support to run multiple test classes.

There have no a direct way to run all the test program in your project. You may have to spend extra time to reorganize the source file for this purpose. It is quite troublesome.

In order to simplify the process, I have made a tiny utility class called TestRunner. It provides a mechanism to exeucte multiple test program without any change of the program's source code. The result for each test program will be recorded and combined to a  summary report.

Example code: 

#include <QtCore/QCoreApplication>
#include "testrunner.h"

int main(int argc, char *argv[])
    QCoreApplication a(argc, argv);

    TestRunner runner;"../testa/tst_testa");"../testb/tst_testb");"../testc/tst_testc"); // not existed test program;

    return 0;
Example output:
********* Start testing of TestA *********
Config: Using QTest library 4.7.2, Qt 4.7.2
PASS : TestA::initTestCase()
PASS : TestA::simple()
FAIL! : TestA::fail() 'false' returned FALSE. ()
Loc: [../../testrunner/testa/tst_testa.cpp(26)]
PASS : TestA::cleanupTestCase()
Totals: 3 passed, 1 failed, 0 skipped
********* Finished testing of TestA *********
********* Start testing of TestB *********
Config: Using QTest library 4.7.2, Qt 4.7.2
PASS : TestB::initTestCase()
PASS : TestB::complex()
PASS : TestB::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of TestB *********
FAIL! : Can not start "../testc/tst_testc"
Totals: 6 passed, 2 failed, 0 skipped
********* Finished testing *********
The TestRunner is a C++ class with only very simple interface to execute the binary built with QTestLib , but it will save your time for running all the test program developed.  

The code is licensed under new BSD.(Well.. It is almost meaningless as I don't think you will bundle the class with your binary application)

The source code and example can be found at GitHub:

Sunday, March 20, 2011

Qt Keyring

My Qt keyring ;)