<div dir="ltr">I have been doing a ton of work with pyuno at work and am interested in anything to improve the code quality there.<div>mike</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Feb 19, 2014 at 5:02 AM, Stephan Bergmann <span dir="ltr"><<a href="mailto:sbergman@redhat.com" target="_blank">sbergman@redhat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[putting the dev list on CC, quoting the original mail in full below for reference]<br>
<br>
Hi Kevin,<br>
<br>
First of all: great that you want to improve the PyUNO situation!  This is a part of the code that could indeed benefit from lots of love.<br>
<br>
Regarding the Python tests, I see both sides' points:<br>
<br>
On the one hand, a test in Python indeed does not only serve as a test for the immediate subject of the test, but also---somewhat indirectly---as a test of the PyUNO infrastructure and as part of a corpus of PyUNO example code.  This is not much different from how our well-hated so-called "unoapi" and "complex" tests test URP (and Java) interaction as a side effect (though they're so ugly that nobody in their right mind would claim that they are valuable additions to any corpus of example code).<br>

<br>
On the other hand, a test is intended to fail (as soon as you introduce an error), and should make it easy for the developer to find the underlying error.  For that, any extra layers between the test code and the code under test are detrimental, in that they make it harder to debug the problem and introduce the likelihood that a reported error is not actually in the code under test but rather somewhere else in the infrastructure (which remains an error that needs to be fixed after all, but less likely by the person who changed the code under test).<br>

<br>
So, what can we do here?  How about an additional code module dedicated to subsequentchecks written in Python, which, while serving the useful purpose of testing specific application functionality (and in which role they may deliberately duplicate existing "native" tests), are meant more as a means to improve the PyUNO situation.<br>

<br>
The idea would be that Kevin (and others) would fill this with PyUNO coding scenarios that cross their mind, discover errors in the PyUNO infrastructure, ideally distill tests for those specific errors out of the more general tests (that could then even go into more specific code modules like pyuno or testtools), and eventually prune test snippets again that are no longer useful.<br>

<br>
What I would like to avoid though is a sort of code dump, filled with random one-off stuff of little value to anybody.  We have <<a href="https://gerrit.libreoffice.org/#/admin/projects/sdk-examples" target="_blank">https://gerrit.libreoffice.<u></u>org/#/admin/projects/sdk-<u></u>examples</a>> already, and it lies virtually dormant.<br>

<br>
How does that sound?<br>
<br>
Stephan<br>
<br>
<br>
On 02/17/2014 08:53 PM, Kevin Hunter Kesling wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Stephan,<br>
<br>
Markus (moggi) suggested over IRC that I talk to you about how to test<br>
PyUNO interactions with Calc.  The long-winded email below is just<br>
background for this question: I claim the LibO/Python bindings are weak<br>
and poorly tested.  As my work often presents opportunities that could<br>
be brilliantly addressed by easier Python scripting of LibO, I'd like to<br>
improve the Python bindings situation.  How best can I accomplish this?<br>
<br>
I recently submitted a patch to gerrit that adds a test nominally for a<br>
recently closed bug:<br>
<br>
     <a href="https://gerrit.libreoffice.org/#/c/8078/" target="_blank">https://gerrit.libreoffice.<u></u>org/#/c/8078/</a><br>
<br>
This test is a functional test of a specific Calc interaction (inserting<br>
cells).  As noted in the commit message, the bug was already quashed,<br>
and Kohei said in the IRC conversation[1] that the offending library<br>
(mdds) already has a test for it's role in the related fdo bug. However,<br>
that still says to me that the actual part that an end-user cares about<br>
-- in this case the inserting of cells -- is not directly tested.<br>
<br>
Through interaction with Kohei and Markus, it's clear that writing the<br>
tests for the internal workings of a C++ project in Python is not<br>
acceptable (not the right "tool for the job"), and I can see the<br>
perspective that not one, but two core maintainers have.<br>
<br>
However, this leads me to the larger observation (the one for which I<br>
originally decided to write the test in Python over C++) is that I see<br>
hardly any tests of LibO's Python bindings of Calc (sc/).  Ideally, I'd<br>
like to be able to do more Python scripting of LibO, and the quality of<br>
the bindings is what holds me back.  This snippet from the attached<br>
larger IRC conversation may help elucidate where I'm coming from:<br>
<br>
     (01:57:35 PM) kohei: and I'm generally not in favor of python<br>
        unit tests. it's not very useful for the maintainers to<br>
        debug failures.<br>
     (01:58:48 PM) frothnicator: kohei: okay, I hear that I don't<br>
        get it.  I'm trying to.  The only way I know to test and<br>
        learn something is to use it.  My main interaction would be<br>
        through UNO, unless I learn of a better way.  Thus, when I<br>
        try to introspect an item through Python's REPL, and get<br>
        back an exception for merely calling repr(some_object), or<br>
        my remote connection is broken because of a recoverable<br>
        exception, I don't know what else to call that unstable.<br>
<br>
The point being that though I wrote it in Python, the test is actually<br>
testing multiple things, both of which are important to me: the<br>
interaction between Python and LibO, and the core functionality that<br>
motivated the now-abandoned patch.<br>
<br>
The more important observation, however, is that while writing this<br>
test, I encountered many niggles: poor REPL-accessible documentation,<br>
broken remote connections despite recoverable exceptions, useless<br>
attempts to introspect object details, undiscoverable imports, other<br>
crasher bugs, a lack of easily discoverable (read: Googlable)<br>
Python-based examples from which to learn, and so on.  I would not mind<br>
addressing these as I have time as well.  But I need a place to put<br>
these Python based tests.<br>
<br>
The question that was still on my mind after the above interaction was<br>
"Should I infer that LibO/Python bindings are not a high priority for<br>
LibO devs?"  or "Is using Python with LibO a foolhardy wish on my part?"<br>
  Markus assured me that no one said that, and directed me to ask you.<br>
<br>
So, upon articulating my thoughts in this email to you, what I'm really<br>
looking for is an "in" such that I can help the situation that most<br>
directly affects me.  (The logic being that with luck, I'm not the only<br>
one who would like to use LibO in this fashion!)  I don't expect that<br>
I'll write perfect code or tests, but that by at least getting the ball<br>
rolling, iteration -- by me or others -- will fix any issues.  (After<br>
all, that's why we developed revision control systems, yes?!)  I, for<br>
one, would appreciate a more robust Python scripting experience with LibO.<br>
<br>
Do you have any suggestions for how I can help improve the PyUNO<br>
scripter's experience?<br>
<br>
Thanks,<br>
<br>
Kevin<br>
<br>
P.S.  I was told to ask you, so I opted to email you directly.  If you<br>
think the -dev list is a more appropriate place for this thread, please<br>
CC: there as appropriate.<br>
<br>
[1] Attached is an IRC conversation from earlier today.<br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
LibreOffice mailing list<br>
<a href="mailto:LibreOffice@lists.freedesktop.org" target="_blank">LibreOffice@lists.freedesktop.<u></u>org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/libreoffice" target="_blank">http://lists.freedesktop.org/<u></u>mailman/listinfo/libreoffice</a><br>
</blockquote></div><br></div>