[pypy-commit] pypy default: Move app-level tests from test_generator.py to apptest_generator.py

rlamy pypy.commits at gmail.com
Wed Dec 4 21:16:59 EST 2019


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: 
Changeset: r98234:72f3423c43e5
Date: 2019-12-05 02:13 +0000
http://bitbucket.org/pypy/pypy/changeset/72f3423c43e5/

Log:	Move app-level tests from test_generator.py to apptest_generator.py

diff --git a/pypy/interpreter/test/test_generator.py b/pypy/interpreter/test/apptest_generator.py
copy from pypy/interpreter/test/test_generator.py
copy to pypy/interpreter/test/apptest_generator.py
--- a/pypy/interpreter/test/test_generator.py
+++ b/pypy/interpreter/test/apptest_generator.py
@@ -1,339 +1,311 @@
-class AppTestGenerator:
+from pytest import raises, skip
 
-    def test_generator(self):
-        def f():
+def test_generator():
+    def f():
+        yield 1
+    assert f().next() == 1
+
+def test_generator2():
+    def f():
+        yield 1
+    g = f()
+    assert g.next() == 1
+    with raises(StopIteration):
+        g.next()
+
+def test_attributes():
+    def f():
+        yield 1
+        assert g.gi_running
+    g = f()
+    assert g.gi_code is f.__code__
+    assert g.__name__ == 'f'
+    assert g.gi_frame is not None
+    assert not g.gi_running
+    g.next()
+    assert not g.gi_running
+    with raises(StopIteration):
+        g.next()
+    assert not g.gi_running
+    assert g.gi_frame is None
+    assert g.gi_code is f.__code__
+    assert g.__name__ == 'f'
+
+def test_generator3():
+    def f():
+        yield 1
+    g = f()
+    assert list(g) == [1]
+
+def test_generator4():
+    def f():
+        yield 1
+    g = f()
+    assert [x for x in g] == [1]
+
+def test_generator5():
+    def f():
+        v = (yield)
+        yield v
+    g = f()
+    g.next()
+    assert g.send(42) == 42
+
+def test_throw1():
+    def f():
+        yield 2
+    g = f()
+    # two arguments version
+    with raises(NameError):
+        g.throw(NameError, "Error")
+
+def test_throw2():
+    def f():
+        yield 2
+    g = f()
+    # single argument version
+    with raises(NameError):
+        g.throw(NameError("Error"))
+
+def test_throw3():
+    def f():
+        try:
             yield 1
-        assert f().next() == 1
+            yield 2
+        except NameError:
+            yield 3
+    g = f()
+    assert g.next() == 1
+    assert g.throw(NameError("Error")) == 3
+    with raises(StopIteration):
+        g.next()
 
-    def test_generator2(self):
-        def f():
+def test_throw4():
+    def f():
+        try:
             yield 1
-        g = f()
-        assert g.next() == 1
-        with raises(StopIteration):
-            g.next()
+            v = (yield 2)
+        except NameError:
+            yield 3
+    g = f()
+    assert g.next() == 1
+    assert g.next() == 2
+    assert g.throw(NameError("Error")) == 3
+    with raises(StopIteration):
+        g.next()
 
-    def test_attributes(self):
-        def f():
+def test_throw5():
+    def f():
+        try:
             yield 1
-            assert g.gi_running
-        g = f()
-        assert g.gi_code is f.__code__
-        assert g.__name__ == 'f'
-        assert g.gi_frame is not None
-        assert not g.gi_running
+        except Exception:
+            x = 3
+        try:
+            yield x
+        except Exception:
+            pass
+    g = f()
+    g.next()
+    # String exceptions are not allowed anymore
+    with raises(TypeError):
+        g.throw("Error")
+    assert g.throw(Exception) == 3
+    with raises(StopIteration):
+        g.throw(Exception)
+
+def test_throw6():
+    def f():
+        yield 2
+    g = f()
+    with raises(NameError):
+        g.throw(NameError, "Error", None)
+
+
+def test_throw_fail():
+    def f():
+        yield 1
+    g = f()
+    with raises(TypeError):
+        g.throw(NameError("Error"), "error")
+
+def test_throw_fail2():
+    def f():
+        yield 1
+    g = f()
+    with raises(TypeError):
+        g.throw(list())
+
+def test_throw_fail3():
+    def f():
+        yield 1
+    g = f()
+    with raises(TypeError):
+        g.throw(NameError("Error"), None, "not tb object")
+
+def test_throw_finishes_generator():
+    def f():
+        yield 1
+    g = f()
+    assert g.gi_frame is not None
+    with raises(ValueError):
+        g.throw(ValueError)
+    assert g.gi_frame is None
+
+def test_throw_bug():
+    def f():
+        try:
+            x.throw(IndexError)     # => "generator already executing"
+        except ValueError:
+            yield 1
+    x = f()
+    res = list(x)
+    assert res == [1]
+
+def test_throw_on_finished_generator():
+    def f():
+        yield 1
+    g = f()
+    res = g.next()
+    assert res == 1
+    with raises(StopIteration):
         g.next()
-        assert not g.gi_running
-        with raises(StopIteration):
-            g.next()
-        assert not g.gi_running
-        assert g.gi_frame is None
-        assert g.gi_code is f.__code__
-        assert g.__name__ == 'f'
+    with raises(NameError):
+        g.throw(NameError)
 
-    def test_generator3(self):
-        def f():
+def test_close():
+    def f():
+        yield 1
+    g = f()
+    assert g.close() is None
+
+def test_close2():
+    def f():
+        try:
             yield 1
-        g = f()
-        assert list(g) == [1]
+        except GeneratorExit:
+            raise StopIteration
+    g = f()
+    g.next()
+    assert g.close() is None
 
-    def test_generator4(self):
-        def f():
+def test_close3():
+    def f():
+        try:
             yield 1
-        g = f()
-        assert [x for x in g] == [1]
+        except GeneratorExit:
+            raise NameError
+    g = f()
+    g.next()
+    with raises(NameError):
+        g.close()
 
-    def test_generator5(self):
-        d = {}
-        exec """if 1:
-        def f():
-            v = (yield )
-            yield v
-        g = f()
-        g.next()
-        """ in d
-        g = d['g']
-        assert g.send(42) == 42
+def test_close_fail():
+    def f():
+        try:
+            yield 1
+        except GeneratorExit:
+            yield 2
+    g = f()
+    g.next()
+    with raises(RuntimeError):
+        g.close()
 
-    def test_throw1(self):
-        def f():
-            yield 2
-        g = f()
-        # two arguments version
-        with raises(NameError):
-            g.throw(NameError, "Error")
+def test_close_on_collect():
+    import gc
+    def f():
+        try:
+            yield
+        finally:
+            f.x = 42
+    g = f()
+    g.next()
+    del g
+    gc.collect()
+    assert f.x == 42
 
-    def test_throw2(self):
-        def f():
-            yield 2
-        g = f()
-        # single argument version
-        with raises(NameError):
-            g.throw(NameError("Error"))
+def test_generator_raises_typeerror():
+    def f():
+        yield 1
+    g = f()
+    with raises(TypeError):
+        g.send()     # one argument required
+    with raises(TypeError):
+        g.send(1)  # not started, must send None
 
-    def test_throw3(self):
-        def f():
-            try:
-                yield 1
-                yield 2
-            except:
-                yield 3
-        g = f()
-        assert g.next() == 1
-        assert g.throw(NameError("Error")) == 3
-        with raises(StopIteration):
-            g.next()
+def test_generator_explicit_stopiteration():
+    def f():
+        yield 1
+        raise StopIteration
+    g = f()
+    assert [x for x in g] == [1]
 
-    def test_throw4(self):
-        d = {}
-        exec """if 1:
-        def f():
-            try:
-                yield 1
-                v = (yield 2)
-            except:
-                yield 3
-        g = f()
-        """ in d
-        g = d['g']
-        assert g.next() == 1
-        assert g.next() == 2
-        assert g.throw(NameError("Error")) == 3
-        with raises(StopIteration):
-            g.next()
+def test_generator_propagate_stopiteration():
+    def f():
+        it = iter([1])
+        while 1:
+            yield it.next()
+    g = f()
+    assert [x for x in g] == [1]
 
-    def test_throw5(self):
-        def f():
-            try:
-                yield 1
-            except:
-                x = 3
-            try:
-                yield x
-            except:
-                pass
-        g = f()
-        g.next()
-        # String exceptions are not allowed anymore
-        with raises(TypeError):
-            g.throw("Error")
-        assert g.throw(Exception) == 3
-        with raises(StopIteration):
-            g.throw(Exception)
+def test_generator_restart():
+    def g():
+        i = me.next()
+        yield i
+    me = g()
+    with raises(ValueError):
+        me.next()
 
-    def test_throw6(self):
-        def f():
-            yield 2
-        g = f()
-        with raises(NameError):
-            g.throw(NameError, "Error", None)
+def test_generator_expression():
+    exec "res = sum(i*i for i in range(5))"
+    assert res == 30
 
+def test_generator_expression_2():
+    def f():
+        total = sum(i for i in [x for x in z])
+        return total, x
+    z = [1, 2, 7]
+    assert f() == (10, 7)
 
-    def test_throw_fail(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.throw(NameError("Error"), "error")
+def test_repr():
+    def myFunc():
+        yield 1
+    g = myFunc()
+    r = repr(g)
+    assert r.startswith("<generator object myFunc at 0x")
+    assert list(g) == [1]
+    assert repr(g) == r
 
-    def test_throw_fail2(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.throw(list())
+def test_unpackiterable_gen():
+    g = (i * i for i in range(-5, 3))
+    assert set(g) == set([0, 1, 4, 9, 16, 25])
+    assert set(g) == set()
+    assert set(i for i in range(0)) == set()
 
-    def test_throw_fail3(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.throw(NameError("Error"), None, "not tb object")
+def test_explicit_stop_iteration_unpackiterable():
+    def f():
+        yield 1
+        raise StopIteration
+    assert tuple(f()) == (1,)
 
-    def test_throw_finishes_generator(self):
-        def f():
-            yield 1
-        g = f()
-        assert g.gi_frame is not None
-        with raises(ValueError):
-            g.throw(ValueError)
-        assert g.gi_frame is None
+def test_exception_is_cleared_by_yield():
+    def f():
+        try:
+            foobar
+        except NameError:
+            yield 5
+            raise    # should raise "no active exception to re-raise"
+    gen = f()
+    next(gen)  # --> 5
+    try:
+        next(gen)
+    except TypeError:
+        pass
 
-    def test_throw_bug(self):
-        def f():
-            try:
-                x.throw(IndexError)     # => "generator already executing"
-            except ValueError:
-                yield 1
-        x = f()
-        res = list(x)
-        assert res == [1]
-
-    def test_throw_on_finished_generator(self):
-        def f():
-            yield 1
-        g = f()
-        res = g.next()
-        assert res == 1
-        with raises(StopIteration):
-            g.next()
-        with raises(NameError):
-            g.throw(NameError)
-
-    def test_close(self):
-        def f():
-            yield 1
-        g = f()
-        assert g.close() is None
-
-    def test_close2(self):
-        def f():
-            try:
-                yield 1
-            except GeneratorExit:
-                raise StopIteration
-        g = f()
-        g.next()
-        assert g.close() is None
-
-    def test_close3(self):
-        def f():
-            try:
-                yield 1
-            except GeneratorExit:
-                raise NameError
-        g = f()
-        g.next()
-        with raises(NameError):
-            g.close()
-
-    def test_close_fail(self):
-        def f():
-            try:
-                yield 1
-            except GeneratorExit:
-                yield 2
-        g = f()
-        g.next()
-        with raises(RuntimeError):
-            g.close()
-
-    def test_close_on_collect(self):
-        import gc
-        def f():
-            try:
-                yield
-            finally:
-                f.x = 42
-        g = f()
-        g.next()
-        del g
-        gc.collect()
-        assert f.x == 42
-
-    def test_generator_raises_typeerror(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.send()     # one argument required
-        with raises(TypeError):
-            g.send(1)  # not started, must send None
-
-    def test_generator_explicit_stopiteration(self):
-        def f():
-            yield 1
-            raise StopIteration
-        g = f()
-        assert [x for x in g] == [1]
-
-    def test_generator_propagate_stopiteration(self):
-        def f():
-            it = iter([1])
-            while 1: yield it.next()
-        g = f()
-        assert [x for x in g] == [1]
-
-    def test_generator_restart(self):
-        def g():
-            i = me.next()
-            yield i
-        me = g()
-        with raises(ValueError):
-            me.next()
-
-    def test_generator_expression(self):
-        exec "res = sum(i*i for i in range(5))"
-        assert res == 30
-
-    def test_generator_expression_2(self):
-        d = {}
-        exec """
-def f():
-    total = sum(i for i in [x for x in z])
-    return total, x
-z = [1, 2, 7]
-res = f()
-""" in d
-        assert d['res'] == (10, 7)
-
-    def test_repr(self):
-        def myFunc():
-            yield 1
-        g = myFunc()
-        r = repr(g)
-        assert r.startswith("<generator object myFunc at 0x")
-        assert list(g) == [1]
-        assert repr(g) == r
-
-    def test_unpackiterable_gen(self):
-        g = (i*i for i in range(-5, 3))
-        assert set(g) == set([0, 1, 4, 9, 16, 25])
-        assert set(g) == set()
-        assert set(i for i in range(0)) == set()
-
-    def test_explicit_stop_iteration_unpackiterable(self):
-        def f():
-            yield 1
-            raise StopIteration
-        assert tuple(f()) == (1,)
-
-    def test_exception_is_cleared_by_yield(self):
-        def f():
-            try:
-                foobar
-            except NameError:
-                yield 5
-                raise    # should raise "no active exception to re-raise"
-        gen = f()
-        next(gen)  # --> 5
-        try:
-            next(gen)
-        except TypeError:
-            pass
-
-    def test_multiple_invalid_sends(self):
-        def mygen():
-            yield 42
-        g = mygen()
-        with raises(TypeError):
-            g.send(2)
-        with raises(TypeError):
-            g.send(2)
-
-
-def test_should_not_inline(space):
-    from pypy.interpreter.generator import should_not_inline
-    w_co = space.appexec([], '''():
-        def g(x):
-            yield x + 5
-        return g.__code__
-    ''')
-    assert should_not_inline(w_co) == False
-    w_co = space.appexec([], '''():
-        def g(x):
-            yield x + 5
-            yield x + 6
-        return g.__code__
-    ''')
-    assert should_not_inline(w_co) == True
+def test_multiple_invalid_sends():
+    def mygen():
+        yield 42
+    g = mygen()
+    with raises(TypeError):
+        g.send(2)
+    with raises(TypeError):
+        g.send(2)
diff --git a/pypy/interpreter/test/test_generator.py b/pypy/interpreter/test/test_generator.py
--- a/pypy/interpreter/test/test_generator.py
+++ b/pypy/interpreter/test/test_generator.py
@@ -1,327 +1,3 @@
-class AppTestGenerator:
-
-    def test_generator(self):
-        def f():
-            yield 1
-        assert f().next() == 1
-
-    def test_generator2(self):
-        def f():
-            yield 1
-        g = f()
-        assert g.next() == 1
-        with raises(StopIteration):
-            g.next()
-
-    def test_attributes(self):
-        def f():
-            yield 1
-            assert g.gi_running
-        g = f()
-        assert g.gi_code is f.__code__
-        assert g.__name__ == 'f'
-        assert g.gi_frame is not None
-        assert not g.gi_running
-        g.next()
-        assert not g.gi_running
-        with raises(StopIteration):
-            g.next()
-        assert not g.gi_running
-        assert g.gi_frame is None
-        assert g.gi_code is f.__code__
-        assert g.__name__ == 'f'
-
-    def test_generator3(self):
-        def f():
-            yield 1
-        g = f()
-        assert list(g) == [1]
-
-    def test_generator4(self):
-        def f():
-            yield 1
-        g = f()
-        assert [x for x in g] == [1]
-
-    def test_generator5(self):
-        d = {}
-        exec """if 1:
-        def f():
-            v = (yield )
-            yield v
-        g = f()
-        g.next()
-        """ in d
-        g = d['g']
-        assert g.send(42) == 42
-
-    def test_throw1(self):
-        def f():
-            yield 2
-        g = f()
-        # two arguments version
-        with raises(NameError):
-            g.throw(NameError, "Error")
-
-    def test_throw2(self):
-        def f():
-            yield 2
-        g = f()
-        # single argument version
-        with raises(NameError):
-            g.throw(NameError("Error"))
-
-    def test_throw3(self):
-        def f():
-            try:
-                yield 1
-                yield 2
-            except:
-                yield 3
-        g = f()
-        assert g.next() == 1
-        assert g.throw(NameError("Error")) == 3
-        with raises(StopIteration):
-            g.next()
-
-    def test_throw4(self):
-        d = {}
-        exec """if 1:
-        def f():
-            try:
-                yield 1
-                v = (yield 2)
-            except:
-                yield 3
-        g = f()
-        """ in d
-        g = d['g']
-        assert g.next() == 1
-        assert g.next() == 2
-        assert g.throw(NameError("Error")) == 3
-        with raises(StopIteration):
-            g.next()
-
-    def test_throw5(self):
-        def f():
-            try:
-                yield 1
-            except:
-                x = 3
-            try:
-                yield x
-            except:
-                pass
-        g = f()
-        g.next()
-        # String exceptions are not allowed anymore
-        with raises(TypeError):
-            g.throw("Error")
-        assert g.throw(Exception) == 3
-        with raises(StopIteration):
-            g.throw(Exception)
-
-    def test_throw6(self):
-        def f():
-            yield 2
-        g = f()
-        with raises(NameError):
-            g.throw(NameError, "Error", None)
-
-
-    def test_throw_fail(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.throw(NameError("Error"), "error")
-
-    def test_throw_fail2(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.throw(list())
-
-    def test_throw_fail3(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.throw(NameError("Error"), None, "not tb object")
-
-    def test_throw_finishes_generator(self):
-        def f():
-            yield 1
-        g = f()
-        assert g.gi_frame is not None
-        with raises(ValueError):
-            g.throw(ValueError)
-        assert g.gi_frame is None
-
-    def test_throw_bug(self):
-        def f():
-            try:
-                x.throw(IndexError)     # => "generator already executing"
-            except ValueError:
-                yield 1
-        x = f()
-        res = list(x)
-        assert res == [1]
-
-    def test_throw_on_finished_generator(self):
-        def f():
-            yield 1
-        g = f()
-        res = g.next()
-        assert res == 1
-        with raises(StopIteration):
-            g.next()
-        with raises(NameError):
-            g.throw(NameError)
-
-    def test_close(self):
-        def f():
-            yield 1
-        g = f()
-        assert g.close() is None
-
-    def test_close2(self):
-        def f():
-            try:
-                yield 1
-            except GeneratorExit:
-                raise StopIteration
-        g = f()
-        g.next()
-        assert g.close() is None
-
-    def test_close3(self):
-        def f():
-            try:
-                yield 1
-            except GeneratorExit:
-                raise NameError
-        g = f()
-        g.next()
-        with raises(NameError):
-            g.close()
-
-    def test_close_fail(self):
-        def f():
-            try:
-                yield 1
-            except GeneratorExit:
-                yield 2
-        g = f()
-        g.next()
-        with raises(RuntimeError):
-            g.close()
-
-    def test_close_on_collect(self):
-        import gc
-        def f():
-            try:
-                yield
-            finally:
-                f.x = 42
-        g = f()
-        g.next()
-        del g
-        gc.collect()
-        assert f.x == 42
-
-    def test_generator_raises_typeerror(self):
-        def f():
-            yield 1
-        g = f()
-        with raises(TypeError):
-            g.send()     # one argument required
-        with raises(TypeError):
-            g.send(1)  # not started, must send None
-
-    def test_generator_explicit_stopiteration(self):
-        def f():
-            yield 1
-            raise StopIteration
-        g = f()
-        assert [x for x in g] == [1]
-
-    def test_generator_propagate_stopiteration(self):
-        def f():
-            it = iter([1])
-            while 1: yield it.next()
-        g = f()
-        assert [x for x in g] == [1]
-
-    def test_generator_restart(self):
-        def g():
-            i = me.next()
-            yield i
-        me = g()
-        with raises(ValueError):
-            me.next()
-
-    def test_generator_expression(self):
-        exec "res = sum(i*i for i in range(5))"
-        assert res == 30
-
-    def test_generator_expression_2(self):
-        d = {}
-        exec """
-def f():
-    total = sum(i for i in [x for x in z])
-    return total, x
-z = [1, 2, 7]
-res = f()
-""" in d
-        assert d['res'] == (10, 7)
-
-    def test_repr(self):
-        def myFunc():
-            yield 1
-        g = myFunc()
-        r = repr(g)
-        assert r.startswith("<generator object myFunc at 0x")
-        assert list(g) == [1]
-        assert repr(g) == r
-
-    def test_unpackiterable_gen(self):
-        g = (i*i for i in range(-5, 3))
-        assert set(g) == set([0, 1, 4, 9, 16, 25])
-        assert set(g) == set()
-        assert set(i for i in range(0)) == set()
-
-    def test_explicit_stop_iteration_unpackiterable(self):
-        def f():
-            yield 1
-            raise StopIteration
-        assert tuple(f()) == (1,)
-
-    def test_exception_is_cleared_by_yield(self):
-        def f():
-            try:
-                foobar
-            except NameError:
-                yield 5
-                raise    # should raise "no active exception to re-raise"
-        gen = f()
-        next(gen)  # --> 5
-        try:
-            next(gen)
-        except TypeError:
-            pass
-
-    def test_multiple_invalid_sends(self):
-        def mygen():
-            yield 42
-        g = mygen()
-        with raises(TypeError):
-            g.send(2)
-        with raises(TypeError):
-            g.send(2)
-
-
 def test_should_not_inline(space):
     from pypy.interpreter.generator import should_not_inline
     w_co = space.appexec([], '''():


More information about the pypy-commit mailing list