Hi,

So if I understand all this correctly there are two things going on:

1) There's a bug with re-interpret which does not respect the
unicode_literals from the original source.

2) re-interpret is being used instead of rewrite because an assert
occurs in a file which is not a test module itself.

The second here is basically the same as
https://bitbucket.org/hpk42/pytest/issue/612/syntax-error-on-assertion-reinterpretation
IIUC.

To be perfectly honest my personal reaction to this is and has always
been (before I was aware that this is a way to trigger re-interpret)
that one should not have assertions in fixtures.  Now experience seems
to indicate I might be rather lonely in that opinion so maybe that's
not a too useful stance.  I've been trying to think about this a few
times but haven't really found a useful answer to this problem yet.

As for the former issue here: I'm not sure if anyone is going to have
a lot of enthusiasm to fix this given that I think we would kind of
like to drop re-interpret at some point.  I suspect some features have
been sneaking in which do not properly work in re-interpret by now and
it's generally not been getting much love since rewrite came about.
So I think it's much more important to try and find a solution for
problem of re-write being avoided.  But obviously a pull request with
a fix would still be gratefully accepted.



Regards,
Floris


On 25 November 2014 at 12:49, Bruno Oliveira <nicodde...@gmail.com> wrote:
> Hi everyone,
>
> Besides the problem that reinterpret is executing code in a context without
> unicode_literals enabled, this also showcases that when moving a fixture
> with has asserts on it from a test file to a conftest file, asserts will not
> be rewritten anymore and reinterpretation will be used instead, which might
> cause unexpected issues, as illustrated by Gustavo.
>
> The first issue looks like a bug to me, not sure what to do about this
> second point. Any thoughts?
>
> Cheers,
>
> On Mon, Nov 24, 2014 at 1:51 PM, Edison Gustavo Muenz
> <edisongust...@gmail.com> wrote:
>>
>> TL;DR;
>>
>> The eval() method of the Frame object is not “inheriting” the __future__
>> imports from the frame.
>>
>> Long explanation
>>
>> Suppose I have a fixture in which I write my assert statements. If this
>> fixture has strings on the assert statement then when the assert fails I get
>> the wrong kind of errors.
>>
>> The problem is that the pytest assertion rewrite mechanism is calling
>> eval() on the code that contains the frame
>>
>> To better illustrate what happens, see this gist
>>
>> The tests have the following output:
>>
>> test_plugin_fixture - fail
>> test_conftest_fixture - fail
>> test_inline_fixture - pass
>> test_no_fixture - pass
>>
>> The output of test_plugin_fixture (omitted some output for brevity):
>>
>> $ pytest -k test_plugin_fixture
>>
>>         msg = e.value.msg
>> >       assert msg.startswith('assert <classes.ValueAndString object'),
>> > msg
>> E       AssertionError: ValueError: ValueAndString(2, 'lkajflaskjfalskf')
>> << Error!
>>
>> While debugging I found out that the ValueAndString constructor was being
>> called 3 times, instead of 2. The 3rd call happened in code.py:100, which is
>> part of the py lib library. The “wrong” behaviour can be seen on the
>> run_pyframe_eval.py.
>>
>> I’ve tested this code on Pytest 2.6.4 with Python 2.7.8 in Windows 7 -
>> 64bits.
>>
>>
>> _______________________________________________
>> pytest-dev mailing list
>> pytest-dev@python.org
>> https://mail.python.org/mailman/listinfo/pytest-dev
>>
>
>
> _______________________________________________
> pytest-dev mailing list
> pytest-dev@python.org
> https://mail.python.org/mailman/listinfo/pytest-dev
>
_______________________________________________
pytest-dev mailing list
pytest-dev@python.org
https://mail.python.org/mailman/listinfo/pytest-dev

Reply via email to