OpenDocument specification meets unit test…
Pierre
pinaraf at pinaraf.info
Sat Apr 2 17:22:22 BST 2011
Hi
The problem is simple :
1) Writing unit test is boring
2) We do not have enough test of our style support
3) Writing unit test doesn't make you look great
4) Our current testing for OpenDocument support is quite poor
5) Unit tests aren't fancy
6) It's hard to have complete unit tests for something like OpenDocument.
So instead of writing unit tests, I decide to have something write them for me.
Since slavery isn't allowed in most countries, that is not a valid solution.
Hence the solution I thought about : parse the OpenDocument scheme (available as
RelaxNG), extract from it each possible style attribute, and dynamically
generate and save style elements and see if they are loading and saving the
right way.
During my travel tonight, I started sketching on my netbook a basic parser for
Relax NG (using Python) and writing some stuff…
I just finished implementing the first version, using C++ of course (I don't
want to bring yet another complicated beast in Calligra).
So far, it works perfectly on KoTableColumnStyle (which means it complains quite
a lot with the current implementation…)
Here is the code specific to table column in my unit test :
void TestOpenDocumentStyle::testTableColumnStyle_data()
{
QList<Attribute*> attributes = listAttributesFromRNGName
("style-table-column-properties-attlist");
QTest::addColumn<Attribute*>("attribute");
QTest::addColumn<QString>("value");
foreach (Attribute *attribute, attributes) {
foreach (QString value, attribute->listValues()) {
QTest::newRow(attribute->name().toLatin1()) << attribute << value;
}
}
}
void TestOpenDocumentStyle::testTableColumnStyle()
{
QFETCH(Attribute*, attribute);
QFETCH(QString, value);
basicTestFunction<KoTableColumnStyle>(KoGenStyle::TableColumnStyle,
"table-column",
attribute,
value);
}
And that's all. Every thing else (generating the style, testing it, parsing the
RNG mess…) is generic. If the parser was a bit better, I could easily add
support for other styles with just a few lines of code.
To make things more clear : this does not replace any current unit test. This
does not control the document parsing.
I'm gonna commit this to master after I merge my words table style branch (it's
fully functionnal, but still not complete, and I am tired of not being able to
track my progress).
Pierre
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/calligra-devel/attachments/20110402/46fa7c1a/attachment.sig>
More information about the calligra-devel
mailing list