converting _XFootnote.java to cpp
Jens Carl
j.carl43 at gmx.de
Thu Aug 9 05:15:20 UTC 2018
Hello,
On 08/08/2018 07:03 AM, Rahul Gurung wrote:
> Hi,
>
> I have almost converted ifc/text/_XFootnote.java into cpp but I am
> confused with the sc/qa/extra part which file should be changed or
> created and why? I checked old commits and think it depends on the test
> but what should it be, in the case of _XFootnote.java?
Here is my step-by-step approach to convert Java UnitTest to C++. From
what I read you are currently at step 3.
As mentioned in this comment
https://bugs.documentfoundation.org/show_bug.cgi?id=45904#c4 the code is
divided in two parts:
One parts set ups the test and you will find them under
qadevOOo/tests/java/mod/ (e.g for calc/sheet they're here
qadevOOo/tests/java/mod/_sc/). They mostly called *Obj.java. (I will
referrer to them as obj in the rest of the email).
The second part are the actual tests and they're under
qadevOOo/tests/java/ifc/ (e.g. for calc/sheet/ you will find them here
qadevOOo/tests/java/ifc/sheet).
You also will find two types of tests in the interface directory
(.../ifc). One tests services and their properties and the other one
tests interfaces and the function they provide. The later ones start
with an X and the first one don't start with a X in their file name (you
can ignore the underscore "_").
The obj and the tests are tied together by CSV files, you will find them
under qadevOOo/objdsc/ (e.g qadevOOo/objdsc/sc/).
The service/property tests are special kind of tests. All the logic is
moved to this file
https://opengrok.libreoffice.org/xref/core/qadevOOo/runner/lib/MultiPropertyTest.java.
This class extracts the information from the corresponding CSV file and
the information of the interface.
Then decides what kind of type the property has and runs the test
against it by getting the property value and the changing the property
value (that's done in
https://opengrok.libreoffice.org/xref/core/qadevOOo/runner/util/ValueChanger.java).
To every test file you can find an IDL file. That file contains
information about the functions or the properties. You can look at them
under https://opengrok.libreoffice.org/xref/core/offapi/com/sun/star/ or
https://api.libreoffice.org/docs/idl/ref/index.html.
Next I will describe how I transformed the tests from Java to C++ with
an example of SheetFilterDescriptor:
https://cgit.freedesktop.org/libreoffice/core/commit/?id=5a0acced8988a54d8aaf0328d2696dae21727c6a
I do all my coding under Linux, so some of the steps include CLI commands.
1. I looked at the Java code of
qadevOOo/tests/java/ifc/sheet/_SheetFilterDescriptor.java
Because the class was empty I knew the tests of the properties is done
with
https://opengrok.libreoffice.org/xref/core/qadevOOo/runner/lib/MultiPropertyTest.java
and I don't have to create special cases.
2. Next I looked at the IDL file
(https://opengrok.libreoffice.org/xref/core/offapi/com/sun/star/sheet/SheetFilterDescriptor.idl)
to understand, what properties the services has, what type they are, and
if some of them are read-only.
3. Now I searched for the obj which is used to test the interface.
I normally use grep like # grep "sheet::SheetFilterDescriptor"
core/qadevOOo/objdsc/sc/*. This will list the file or files which uses
the tests. From the file name I can extract the obj. It's the last part
of the filename before the file extension. The filename was
"com.sun.star.comp.office.ScFilterDescriptorBase.csv" so the obj is
"ScFilterDescriptorBase".
4. Now I looked at the Java code for the obj
(https://opengrok.libreoffice.org/xref/core/qadevOOo/tests/java/mod/_sc/ScFilterDescriptorBase.java)
just to get feel what is created to run the test.
5. Now I look at the C++ code for the obj, if it exists. It did
https://opengrok.libreoffice.org/xref/core/sc/qa/extras/scfilterdescriptorbaseobj.cxx.
If not you have to create the object from the Java code.
6. Now I started coding.
This included creating a new header file, adding the test to the C++
obj file, creating the source file and enabling it in the Makefile.
You can run only the specific tests of the obj by make
CppunitTest_sc_filterdescriptorbaseobj
7. Clean up the old Java stuff.
8. Check that everything is still working with "make check"
9. Push changes to gerrit and wait for the tests to finish.
I hope that will help you to get started. Should you have more question
try to get a hold off me in IRC (it's not always possible to answer
right away, because I'm working) or send an email.
Cheers,
Jens
P.S. All the remaining tests under qadevOOo/tests/java/ifc/sheet/ are
the hardest to transfer, because some of them have bugs. You can find a
list in
https://opengrok.libreoffice.org/xref/core/sc/qa/unoapi/knownissues.xcl.
More information about the LibreOffice
mailing list