diff --git a/ipython.spec b/ipython.spec index 7b74ad1..a49bc6e 100644 --- a/ipython.spec +++ b/ipython.spec @@ -3,7 +3,7 @@ Name: ipython Version: 7.14.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: An enhanced interactive Python shell # See bug #603178 for a quick overview for the choice of licenses @@ -16,6 +16,8 @@ Source0: %pypi_source # test_embed_svg_url needs internet connection # https://github.com/ipython/ipython/issues/12281 Patch0: remove-a-part-of-a-test-which-needs-internet.patch +# Temporarily remove tests not compatible with the latest Python 3.9.0a6 +Patch1: remove-tests-not-compatible-with-Python-3.9.0a6.patch BuildArch: noarch BuildRequires: python3-devel @@ -235,6 +237,9 @@ popd %changelog +* Tue May 05 2020 Lumír Balhar - 7.14.0-2 +- Remove tests not compatible with Python 3.9.0a6 (#1831182) + * Mon May 04 2020 Lumír Balhar - 7.14.0-1 - Update to 7.14.0 (#1830483) diff --git a/remove-tests-not-compatible-with-Python-3.9.0a6.patch b/remove-tests-not-compatible-with-Python-3.9.0a6.patch new file mode 100644 index 0000000..0dfc3d8 --- /dev/null +++ b/remove-tests-not-compatible-with-Python-3.9.0a6.patch @@ -0,0 +1,365 @@ +From 78cf4e41560ba35e1fcc24150aaf6fc3d0cac203 Mon Sep 17 00:00:00 2001 +From: Lumir Balhar +Date: Tue, 5 May 2020 16:38:43 +0200 +Subject: [PATCH] Remove tests not compatible with Python 3.9.0a6 + +--- + IPython/core/tests/test_async_helpers.py | 7 +- + IPython/core/tests/test_debugger.py | 98 ++---------------------- + IPython/core/tests/test_oinspect.py | 44 +++-------- + IPython/core/tests/test_ultratb.py | 33 ++++---- + 4 files changed, 29 insertions(+), 153 deletions(-) + +diff --git a/IPython/core/tests/test_async_helpers.py b/IPython/core/tests/test_async_helpers.py +index 86a516c..a7c7963 100644 +--- a/IPython/core/tests/test_async_helpers.py ++++ b/IPython/core/tests/test_async_helpers.py +@@ -1,5 +1,5 @@ + """ +-Test for async helpers. ++Test for async helpers. + + Should only trigger on python 3.5+ or will have syntax errors. + """ +@@ -275,11 +275,6 @@ class AsyncTest(TestCase): + await sleep(0.1) + """ + ) +- +- def test_memory_error(self): +- with self.assertRaises(MemoryError): +- iprc("(" * 200 + ")" * 200) +- + @skip_without('curio') + def test_autoawait_curio(self): + iprc("%autoawait curio") +diff --git a/IPython/core/tests/test_debugger.py b/IPython/core/tests/test_debugger.py +index 7f3720a..338fe12 100644 +--- a/IPython/core/tests/test_debugger.py ++++ b/IPython/core/tests/test_debugger.py +@@ -60,7 +60,7 @@ def test_longer_repr(): + from reprlib import repr as trepr # Py 3 + except ImportError: + from repr import repr as trepr # Py 2 +- ++ + a = '1234567890'* 7 + ar = "'1234567890123456789012345678901234567890123456789012345678901234567890'" + a_trunc = "'123456789012...8901234567890'" +@@ -72,97 +72,9 @@ def test_longer_repr(): + debugger.Tracer() + nt.assert_equal(trepr(a), ar) + +-def test_ipdb_magics(): +- '''Test calling some IPython magics from ipdb. +- +- First, set up some test functions and classes which we can inspect. +- +- >>> class ExampleClass(object): +- ... """Docstring for ExampleClass.""" +- ... def __init__(self): +- ... """Docstring for ExampleClass.__init__""" +- ... pass +- ... def __str__(self): +- ... return "ExampleClass()" +- +- >>> def example_function(x, y, z="hello"): +- ... """Docstring for example_function.""" +- ... pass +- +- >>> old_trace = sys.gettrace() +- +- Create a function which triggers ipdb. +- +- >>> def trigger_ipdb(): +- ... a = ExampleClass() +- ... debugger.Pdb().set_trace() +- +- >>> with PdbTestInput([ +- ... 'pdef example_function', +- ... 'pdoc ExampleClass', +- ... 'up', +- ... 'down', +- ... 'list', +- ... 'pinfo a', +- ... 'll', +- ... 'continue', +- ... ]): +- ... trigger_ipdb() +- --Return-- +- None +- > (3)trigger_ipdb() +- 1 def trigger_ipdb(): +- 2 a = ExampleClass() +- ----> 3 debugger.Pdb().set_trace() +- +- ipdb> pdef example_function +- example_function(x, y, z='hello') +- ipdb> pdoc ExampleClass +- Class docstring: +- Docstring for ExampleClass. +- Init docstring: +- Docstring for ExampleClass.__init__ +- ipdb> up +- > (11)() +- 7 'pinfo a', +- 8 'll', +- 9 'continue', +- 10 ]): +- ---> 11 trigger_ipdb() +- +- ipdb> down +- None +- > (3)trigger_ipdb() +- 1 def trigger_ipdb(): +- 2 a = ExampleClass() +- ----> 3 debugger.Pdb().set_trace() +- +- ipdb> list +- 1 def trigger_ipdb(): +- 2 a = ExampleClass() +- ----> 3 debugger.Pdb().set_trace() +- +- ipdb> pinfo a +- Type: ExampleClass +- String form: ExampleClass() +- Namespace: Local... +- Docstring: Docstring for ExampleClass. +- Init docstring: Docstring for ExampleClass.__init__ +- ipdb> ll +- 1 def trigger_ipdb(): +- 2 a = ExampleClass() +- ----> 3 debugger.Pdb().set_trace() +- +- ipdb> continue +- +- Restore previous trace function, e.g. for coverage.py +- +- >>> sys.settrace(old_trace) +- ''' +- + def test_ipdb_magics2(): + '''Test ipdb with a very short function. +- ++ + >>> old_trace = sys.gettrace() + + >>> def bar(): +@@ -179,9 +91,9 @@ def test_ipdb_magics2(): + ----> 2 pass + + ipdb> continue +- +- Restore previous trace function, e.g. for coverage.py +- ++ ++ Restore previous trace function, e.g. for coverage.py ++ + >>> sys.settrace(old_trace) + ''' + +diff --git a/IPython/core/tests/test_oinspect.py b/IPython/core/tests/test_oinspect.py +index 8bdcfad..eba51fd 100644 +--- a/IPython/core/tests/test_oinspect.py ++++ b/IPython/core/tests/test_oinspect.py +@@ -74,7 +74,7 @@ def test_find_file_decorated1(): + @noop1 + def f(x): + "My docstring" +- ++ + match_pyfiles(oinspect.find_file(f), os.path.abspath(__file__)) + nt.assert_equal(f.__doc__, "My docstring") + +@@ -90,10 +90,10 @@ def test_find_file_decorated2(): + @noop2 + def f(x): + "My docstring 2" +- ++ + match_pyfiles(oinspect.find_file(f), os.path.abspath(__file__)) + nt.assert_equal(f.__doc__, "My docstring 2") +- ++ + + def test_find_file_magic(): + run = ip.find_line_magic('run') +@@ -234,43 +234,19 @@ def test_definition_kwonlyargs(): + i = inspector.info(f_kwarg, oname='f_kwarg') # analysis:ignore + nt.assert_equal(i['definition'], "f_kwarg(pos, *, kwonly)") + +-def test_getdoc(): +- class A(object): +- """standard docstring""" +- pass +- +- class B(object): +- """standard docstring""" +- def getdoc(self): +- return "custom docstring" +- +- class C(object): +- """standard docstring""" +- def getdoc(self): +- return None +- +- a = A() +- b = B() +- c = C() +- +- nt.assert_equal(oinspect.getdoc(a), "standard docstring") +- nt.assert_equal(oinspect.getdoc(b), "custom docstring") +- nt.assert_equal(oinspect.getdoc(c), "standard docstring") +- +- + def test_empty_property_has_no_source(): + i = inspector.info(property(), detail_level=1) + nt.assert_is(i['source'], None) + + + def test_property_sources(): +- import posixpath ++ import posixpath + # A simple adder whose source and signature stays + # the same across Python distributions + def simple_add(a, b): + "Adds two numbers" + return a + b +- ++ + class A(object): + @property + def foo(self): +@@ -279,7 +255,7 @@ def test_property_sources(): + foo = foo.setter(lambda self, v: setattr(self, 'bar', v)) + + dname = property(posixpath.dirname) +- adder = property(simple_add) ++ adder = property(simple_add) + + i = inspector.info(A.foo, detail_level=1) + nt.assert_in('def foo(self):', i['source']) +@@ -287,7 +263,7 @@ def test_property_sources(): + + i = inspector.info(A.dname, detail_level=1) + nt.assert_in('def dirname(p)', i['source']) +- ++ + i = inspector.info(A.adder, detail_level=1) + nt.assert_in('def simple_add(a, b)', i['source']) + +@@ -359,11 +335,11 @@ def test_pinfo_docstring_if_detail_and_no_source(): + def bar(self): + """ This is a docstring for Foo.bar """ + pass +- ''' +- ++ ''' ++ + ip.run_cell(obj_def) + ip.run_cell('foo = Foo()') +- ++ + with AssertNotPrints("Source:"): + with AssertPrints('Docstring:'): + ip._inspect('pinfo', 'foo', detail_level=0) +diff --git a/IPython/core/tests/test_ultratb.py b/IPython/core/tests/test_ultratb.py +index 3ab0ce3..c7139ef 100644 +--- a/IPython/core/tests/test_ultratb.py ++++ b/IPython/core/tests/test_ultratb.py +@@ -57,24 +57,24 @@ def recursionlimit(frames): + class ChangedPyFileTest(unittest.TestCase): + def test_changing_py_file(self): + """Traceback produced if the line where the error occurred is missing? +- ++ + https://github.com/ipython/ipython/issues/1456 + """ + with TemporaryDirectory() as td: + fname = os.path.join(td, "foo.py") + with open(fname, "w") as f: + f.write(file_1) +- ++ + with prepended_to_syspath(td): + ip.run_cell("import foo") +- ++ + with tt.AssertPrints("ZeroDivisionError"): + ip.run_cell("foo.f()") +- ++ + # Make the file shorter, so the line of the error is missing. + with open(fname, "w") as f: + f.write(file_2) +- ++ + # For some reason, this was failing on the *second* call after + # changing the file, so we call f() twice. + with tt.AssertNotPrints("Internal Python error", channel='stderr'): +@@ -98,27 +98,27 @@ class NonAsciiTest(unittest.TestCase): + fname = os.path.join(td, u"fooé.py") + with open(fname, "w") as f: + f.write(file_1) +- ++ + with prepended_to_syspath(td): + ip.run_cell("import foo") +- ++ + with tt.AssertPrints("ZeroDivisionError"): + ip.run_cell("foo.f()") +- ++ + def test_iso8859_5(self): + with TemporaryDirectory() as td: + fname = os.path.join(td, 'dfghjkl.py') + + with io.open(fname, 'w', encoding='iso-8859-5') as f: + f.write(iso_8859_5_file) +- ++ + with prepended_to_syspath(td): + ip.run_cell("from dfghjkl import fail") +- ++ + with tt.AssertPrints("ZeroDivisionError"): + with tt.AssertPrints(u'дбИЖ', suppress=False): + ip.run_cell('fail()') +- ++ + def test_nonascii_msg(self): + cell = u"raise Exception('é')" + expected = u"Exception('é')" +@@ -173,12 +173,12 @@ class IndentationErrorTest(unittest.TestCase): + with tt.AssertPrints("IndentationError"): + with tt.AssertPrints("zoon()", suppress=False): + ip.run_cell(indentationerror_file) +- ++ + with TemporaryDirectory() as td: + fname = os.path.join(td, "foo.py") + with open(fname, "w") as f: + f.write(indentationerror_file) +- ++ + with tt.AssertPrints("IndentationError"): + with tt.AssertPrints("zoon()", suppress=False): + ip.magic('run %s' % fname) +@@ -253,13 +253,6 @@ bar() + ip.showsyntaxerror() + + +-class MemoryErrorTest(unittest.TestCase): +- def test_memoryerror(self): +- memoryerror_code = "(" * 200 + ")" * 200 +- with tt.AssertPrints("MemoryError"): +- ip.run_cell(memoryerror_code) +- +- + class Python3ChainedExceptionsTest(unittest.TestCase): + DIRECT_CAUSE_ERROR_CODE = """ + try: +-- +2.26.2 +