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