diff --git a/34187968a67151f02db491a56a0037b55319931d.patch b/34187968a67151f02db491a56a0037b55319931d.patch new file mode 100644 index 0000000..9a153b6 --- /dev/null +++ b/34187968a67151f02db491a56a0037b55319931d.patch @@ -0,0 +1,482 @@ +From 34187968a67151f02db491a56a0037b55319931d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Mon, 30 Oct 2023 20:21:55 +0100 +Subject: [PATCH] Avoid usage of unittest.makeSuite(), removed from Python 3.13 + (GH-385) + +Patch generated by: + + sed -i 's/unittest.makeSuite/unittest.defaultTestLoader.loadTestsFromTestCase/g' $(grep -rl makeSuite) +--- + src/lxml/html/tests/test_clean.py | 2 +- + src/lxml/html/tests/test_elementsoup.py | 2 +- + src/lxml/tests/test_builder.py | 2 +- + src/lxml/tests/test_classlookup.py | 4 ++-- + src/lxml/tests/test_css.py | 2 +- + src/lxml/tests/test_doctestcompare.py | 2 +- + src/lxml/tests/test_dtd.py | 2 +- + src/lxml/tests/test_elementpath.py | 4 ++-- + src/lxml/tests/test_elementtree.py | 24 +++++++++++----------- + src/lxml/tests/test_errors.py | 2 +- + src/lxml/tests/test_etree.py | 14 ++++++------- + src/lxml/tests/test_external_document.py | 2 +- + src/lxml/tests/test_htmlparser.py | 2 +- + src/lxml/tests/test_http_io.py | 2 +- + src/lxml/tests/test_incremental_xmlfile.py | 12 +++++------ + src/lxml/tests/test_io.py | 4 ++-- + src/lxml/tests/test_isoschematron.py | 2 +- + src/lxml/tests/test_nsclasses.py | 2 +- + src/lxml/tests/test_objectify.py | 2 +- + src/lxml/tests/test_pyclasslookup.py | 2 +- + src/lxml/tests/test_relaxng.py | 4 ++-- + src/lxml/tests/test_sax.py | 4 ++-- + src/lxml/tests/test_schematron.py | 2 +- + src/lxml/tests/test_threading.py | 4 ++-- + src/lxml/tests/test_unicode.py | 4 ++-- + src/lxml/tests/test_xmlschema.py | 4 ++-- + src/lxml/tests/test_xpathevaluator.py | 8 ++++---- + src/lxml/tests/test_xslt.py | 10 ++++----- + 28 files changed, 65 insertions(+), 65 deletions(-) + +diff --git a/src/lxml/html/tests/test_clean.py b/src/lxml/html/tests/test_clean.py +index ada0969bc..fe79f6d5b 100644 +--- a/src/lxml/html/tests/test_clean.py ++++ b/src/lxml/html/tests/test_clean.py +@@ -296,5 +296,5 @@ def test_suite(): + suite = unittest.TestSuite() + suite.addTests([make_doctest('test_clean.txt')]) + suite.addTests([make_doctest('test_clean_embed.txt')]) +- suite.addTests(unittest.makeSuite(CleanerTest)) ++ suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(CleanerTest)) + return suite +diff --git a/src/lxml/html/tests/test_elementsoup.py b/src/lxml/html/tests/test_elementsoup.py +index 553586b9f..1fd9127a4 100644 +--- a/src/lxml/html/tests/test_elementsoup.py ++++ b/src/lxml/html/tests/test_elementsoup.py +@@ -118,7 +118,7 @@ def test_doctype_html5(self): + def test_suite(): + suite = unittest.TestSuite() + if BS_INSTALLED: +- suite.addTests([unittest.makeSuite(SoupParserTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(SoupParserTestCase)]) + if sys.version_info[0] < 3: + suite.addTests([make_doctest('../../../../doc/elementsoup.txt')]) + return suite +diff --git a/src/lxml/tests/test_builder.py b/src/lxml/tests/test_builder.py +index b1ad4ebf6..15f17dfd5 100644 +--- a/src/lxml/tests/test_builder.py ++++ b/src/lxml/tests/test_builder.py +@@ -62,7 +62,7 @@ def test_qname_tag_default_namespace(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(BuilderTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(BuilderTestCase)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_classlookup.py b/src/lxml/tests/test_classlookup.py +index 7c871d511..c88ce2879 100644 +--- a/src/lxml/tests/test_classlookup.py ++++ b/src/lxml/tests/test_classlookup.py +@@ -394,8 +394,8 @@ def custom(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ProxyTestCase)]) +- suite.addTests([unittest.makeSuite(ClassLookupTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ProxyTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ClassLookupTestCase)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_css.py b/src/lxml/tests/test_css.py +index e2afa65c7..3f1ca8787 100644 +--- a/src/lxml/tests/test_css.py ++++ b/src/lxml/tests/test_css.py +@@ -64,5 +64,5 @@ def test_suite(): + + import lxml.cssselect + suite.addTests(doctest.DocTestSuite(lxml.cssselect)) +- suite.addTests([unittest.makeSuite(CSSTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(CSSTestCase)]) + return suite +diff --git a/src/lxml/tests/test_doctestcompare.py b/src/lxml/tests/test_doctestcompare.py +index 366328124..636e6b5f6 100644 +--- a/src/lxml/tests/test_doctestcompare.py ++++ b/src/lxml/tests/test_doctestcompare.py +@@ -125,7 +125,7 @@ def test_missing_attributes(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(DoctestCompareTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(DoctestCompareTest)]) + return suite + + +diff --git a/src/lxml/tests/test_dtd.py b/src/lxml/tests/test_dtd.py +index 5c9b1c024..cbb1b402e 100644 +--- a/src/lxml/tests/test_dtd.py ++++ b/src/lxml/tests/test_dtd.py +@@ -422,7 +422,7 @@ def test_entity_system_url_none(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeDtdTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeDtdTestCase)]) + suite.addTests( + [make_doctest('../../../doc/validation.txt')]) + return suite +diff --git a/src/lxml/tests/test_elementpath.py b/src/lxml/tests/test_elementpath.py +index 1793ff821..0bb481c87 100644 +--- a/src/lxml/tests/test_elementpath.py ++++ b/src/lxml/tests/test_elementpath.py +@@ -293,8 +293,8 @@ def test_find(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(EtreeElementPathTestCase)]) +- #suite.addTests([unittest.makeSuite(ElementTreeElementPathTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(EtreeElementPathTestCase)]) ++ #suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementTreeElementPathTestCase)]) + return suite + + +diff --git a/src/lxml/tests/test_elementtree.py b/src/lxml/tests/test_elementtree.py +index 96426cba5..19c77a879 100644 +--- a/src/lxml/tests/test_elementtree.py ++++ b/src/lxml/tests/test_elementtree.py +@@ -4992,22 +4992,22 @@ class CElementTreeElementSlicingTest(_ElementSlicingTest): + def test_suite(): + suite = unittest.TestSuite() + if etree: +- suite.addTests([unittest.makeSuite(ETreeTestCase)]) +- suite.addTests([unittest.makeSuite(ETreePullTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeElementSlicingTest)]) +- suite.addTests([unittest.makeSuite(ETreeC14NTest)]) +- suite.addTests([unittest.makeSuite(ETreeC14N2WriteTest)]) +- suite.addTests([unittest.makeSuite(ETreeC14N2TostringTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreePullTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeElementSlicingTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeC14NTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeC14N2WriteTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeC14N2TostringTest)]) + if ElementTree: +- suite.addTests([unittest.makeSuite(ElementTreeTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementTreeTestCase)]) + if ElementTreePullTestCase: +- suite.addTests([unittest.makeSuite(ElementTreePullTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementTreePullTestCase)]) + if ElementTreeC14NTest: +- suite.addTests([unittest.makeSuite(ElementTreeC14NTest)]) +- suite.addTests([unittest.makeSuite(ElementTreeElementSlicingTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementTreeC14NTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementTreeElementSlicingTest)]) + if cElementTree: +- suite.addTests([unittest.makeSuite(CElementTreeTestCase)]) +- suite.addTests([unittest.makeSuite(CElementTreeElementSlicingTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(CElementTreeTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(CElementTreeElementSlicingTest)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_errors.py b/src/lxml/tests/test_errors.py +index c0aee7449..7b0ad7126 100644 +--- a/src/lxml/tests/test_errors.py ++++ b/src/lxml/tests/test_errors.py +@@ -70,7 +70,7 @@ def test_xmlsyntaxerror_has_info(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ErrorTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ErrorTestCase)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py +index 0118d0fc3..f01f04fcd 100644 +--- a/src/lxml/tests/test_etree.py ++++ b/src/lxml/tests/test_etree.py +@@ -5580,13 +5580,13 @@ def end(self, tag): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeOnlyTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeXIncludeTestCase)]) +- suite.addTests([unittest.makeSuite(ElementIncludeTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeC14NTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeWriteTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeErrorLogTest)]) +- suite.addTests([unittest.makeSuite(XMLPullParserTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeOnlyTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXIncludeTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementIncludeTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeC14NTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeWriteTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeErrorLogTest)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(XMLPullParserTest)]) + + # add original doctests from ElementTree selftest modules + from . import selftest, selftest2 +diff --git a/src/lxml/tests/test_external_document.py b/src/lxml/tests/test_external_document.py +index 0d1d0639b..9826a2781 100644 +--- a/src/lxml/tests/test_external_document.py ++++ b/src/lxml/tests/test_external_document.py +@@ -98,7 +98,7 @@ def test_external_document_adoption(self): + def test_suite(): + suite = unittest.TestSuite() + if sys.platform != 'win32': +- suite.addTests([unittest.makeSuite(ExternalDocumentTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ExternalDocumentTestCase)]) + return suite + + +diff --git a/src/lxml/tests/test_htmlparser.py b/src/lxml/tests/test_htmlparser.py +index 2f3186ff1..53bb8f9d4 100644 +--- a/src/lxml/tests/test_htmlparser.py ++++ b/src/lxml/tests/test_htmlparser.py +@@ -679,7 +679,7 @@ def test_xhtml_as_html_as_xml(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(HtmlParserTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(HtmlParserTestCase)]) + return suite + + +diff --git a/src/lxml/tests/test_http_io.py b/src/lxml/tests/test_http_io.py +index 07f274231..652261391 100644 +--- a/src/lxml/tests/test_http_io.py ++++ b/src/lxml/tests/test_http_io.py +@@ -117,7 +117,7 @@ def handler(environ, start_response): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(HttpIOTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(HttpIOTestCase)]) + return suite + + +diff --git a/src/lxml/tests/test_incremental_xmlfile.py b/src/lxml/tests/test_incremental_xmlfile.py +index ddf81652a..f2cca7d6b 100644 +--- a/src/lxml/tests/test_incremental_xmlfile.py ++++ b/src/lxml/tests/test_incremental_xmlfile.py +@@ -660,12 +660,12 @@ async def generate(out, close=True, buffered=True): + def test_suite(): + suite = unittest.TestSuite() + suite.addTests([ +- unittest.makeSuite(BytesIOXmlFileTestCase), +- unittest.makeSuite(TempXmlFileTestCase), +- unittest.makeSuite(TempPathXmlFileTestCase), +- unittest.makeSuite(SimpleFileLikeXmlFileTestCase), +- unittest.makeSuite(HtmlFileTestCase), +- unittest.makeSuite(AsyncXmlFileTestCase), ++ unittest.defaultTestLoader.loadTestsFromTestCase(BytesIOXmlFileTestCase), ++ unittest.defaultTestLoader.loadTestsFromTestCase(TempXmlFileTestCase), ++ unittest.defaultTestLoader.loadTestsFromTestCase(TempPathXmlFileTestCase), ++ unittest.defaultTestLoader.loadTestsFromTestCase(SimpleFileLikeXmlFileTestCase), ++ unittest.defaultTestLoader.loadTestsFromTestCase(HtmlFileTestCase), ++ unittest.defaultTestLoader.loadTestsFromTestCase(AsyncXmlFileTestCase), + ]) + return suite + +diff --git a/src/lxml/tests/test_io.py b/src/lxml/tests/test_io.py +index cbdbcef06..c45ce45a2 100644 +--- a/src/lxml/tests/test_io.py ++++ b/src/lxml/tests/test_io.py +@@ -363,9 +363,9 @@ class ElementTreeIOTestCase(_IOTestCaseBase): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeIOTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeIOTestCase)]) + if ElementTree: +- suite.addTests([unittest.makeSuite(ElementTreeIOTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ElementTreeIOTestCase)]) + return suite + + +diff --git a/src/lxml/tests/test_isoschematron.py b/src/lxml/tests/test_isoschematron.py +index bf8a7d27f..ccc4baecc 100644 +--- a/src/lxml/tests/test_isoschematron.py ++++ b/src/lxml/tests/test_isoschematron.py +@@ -862,7 +862,7 @@ def test_schematron_fail_on_report(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeISOSchematronTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeISOSchematronTestCase)]) + suite.addTests(doctest.DocTestSuite(isoschematron)) + suite.addTests( + [make_doctest('../../../doc/validation.txt')]) +diff --git a/src/lxml/tests/test_nsclasses.py b/src/lxml/tests/test_nsclasses.py +index a0aa608d7..b9e623f38 100644 +--- a/src/lxml/tests/test_nsclasses.py ++++ b/src/lxml/tests/test_nsclasses.py +@@ -203,7 +203,7 @@ class honk(etree.ElementBase): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeNamespaceClassesTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeNamespaceClassesTestCase)]) + suite.addTests( + [make_doctest('../../../doc/element_classes.txt')]) + return suite +diff --git a/src/lxml/tests/test_objectify.py b/src/lxml/tests/test_objectify.py +index 15b1c6887..1f1f93d08 100644 +--- a/src/lxml/tests/test_objectify.py ++++ b/src/lxml/tests/test_objectify.py +@@ -2744,7 +2744,7 @@ def space(_choice=random.choice): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ObjectifyTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ObjectifyTestCase)]) + suite.addTests(doctest.DocTestSuite(objectify)) + suite.addTests([make_doctest('../../../doc/objectify.txt')]) + return suite +diff --git a/src/lxml/tests/test_pyclasslookup.py b/src/lxml/tests/test_pyclasslookup.py +index d650870a5..c5b161527 100644 +--- a/src/lxml/tests/test_pyclasslookup.py ++++ b/src/lxml/tests/test_pyclasslookup.py +@@ -344,7 +344,7 @@ def return_none(*args): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(PyClassLookupTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(PyClassLookupTestCase)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_relaxng.py b/src/lxml/tests/test_relaxng.py +index 3c589c18a..7e7f1719d 100644 +--- a/src/lxml/tests/test_relaxng.py ++++ b/src/lxml/tests/test_relaxng.py +@@ -249,11 +249,11 @@ def test_relaxng_compact_str(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeRelaxNGTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeRelaxNGTestCase)]) + suite.addTests( + [make_doctest('../../../doc/validation.txt')]) + if rnc2rng is not None: +- suite.addTests([unittest.makeSuite(RelaxNGCompactTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(RelaxNGCompactTestCase)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_sax.py b/src/lxml/tests/test_sax.py +index 2ed1e5135..9a2e08262 100644 +--- a/src/lxml/tests/test_sax.py ++++ b/src/lxml/tests/test_sax.py +@@ -405,8 +405,8 @@ def test_element_sax_twin_ns_prefix(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeSaxTestCase)]) +- suite.addTests([unittest.makeSuite(NSPrefixSaxTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeSaxTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(NSPrefixSaxTestCase)]) + suite.addTests( + [make_doctest('../../../doc/sax.txt')]) + return suite +diff --git a/src/lxml/tests/test_schematron.py b/src/lxml/tests/test_schematron.py +index 2096346e3..c1c22e6c7 100644 +--- a/src/lxml/tests/test_schematron.py ++++ b/src/lxml/tests/test_schematron.py +@@ -73,7 +73,7 @@ def test_schematron_invalid_schema_namespace(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeSchematronTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeSchematronTestCase)]) + suite.addTests( + [make_doctest('../../../doc/validation.txt')]) + return suite +diff --git a/src/lxml/tests/test_threading.py b/src/lxml/tests/test_threading.py +index 2a16858b1..906db7f70 100644 +--- a/src/lxml/tests/test_threading.py ++++ b/src/lxml/tests/test_threading.py +@@ -582,8 +582,8 @@ def test_thread_pipeline_global_parse(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ThreadingTestCase)]) +- suite.addTests([unittest.makeSuite(ThreadPipelineTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ThreadingTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ThreadPipelineTestCase)]) + return suite + + if __name__ == '__main__': +diff --git a/src/lxml/tests/test_unicode.py b/src/lxml/tests/test_unicode.py +index 287a0f0f7..6d4ee9c0f 100644 +--- a/src/lxml/tests/test_unicode.py ++++ b/src/lxml/tests/test_unicode.py +@@ -207,6 +207,6 @@ def test_utf32BE_fromstring(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(UnicodeTestCase)]) +- suite.addTests([unittest.makeSuite(EncodingsTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(UnicodeTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(EncodingsTestCase)]) + return suite +diff --git a/src/lxml/tests/test_xmlschema.py b/src/lxml/tests/test_xmlschema.py +index dbfc251a5..739dde463 100644 +--- a/src/lxml/tests/test_xmlschema.py ++++ b/src/lxml/tests/test_xmlschema.py +@@ -499,8 +499,8 @@ def resolve(self, url, id, context): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeXMLSchemaTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeXMLSchemaResolversTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXMLSchemaTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXMLSchemaResolversTestCase)]) + suite.addTests( + [make_doctest('../../../doc/validation.txt')]) + return suite +diff --git a/src/lxml/tests/test_xpathevaluator.py b/src/lxml/tests/test_xpathevaluator.py +index 13ee97ece..ece23095f 100644 +--- a/src/lxml/tests/test_xpathevaluator.py ++++ b/src/lxml/tests/test_xpathevaluator.py +@@ -734,11 +734,11 @@ def xpath(): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeXPathTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeXPathClassTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXPathTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXPathClassTestCase)]) + if etree.LIBXSLT_COMPILED_VERSION >= (1,1,25): +- suite.addTests([unittest.makeSuite(ETreeXPathExsltTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeETXPathClassTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXPathExsltTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeETXPathClassTestCase)]) + suite.addTests([doctest.DocTestSuite()]) + suite.addTests( + [make_doctest('../../../doc/xpathxslt.txt')]) +diff --git a/src/lxml/tests/test_xslt.py b/src/lxml/tests/test_xslt.py +index 84c1983fd..7ef0bb783 100644 +--- a/src/lxml/tests/test_xslt.py ++++ b/src/lxml/tests/test_xslt.py +@@ -2090,12 +2090,12 @@ def test_xslt_result_memoryview(self): + + def test_suite(): + suite = unittest.TestSuite() +- suite.addTests([unittest.makeSuite(ETreeXSLTTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeEXSLTTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeXSLTExtFuncTestCase)]) +- suite.addTests([unittest.makeSuite(ETreeXSLTExtElementTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXSLTTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeEXSLTTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXSLTExtFuncTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(ETreeXSLTExtElementTestCase)]) + if is_python3: +- suite.addTests([unittest.makeSuite(Py3XSLTTestCase)]) ++ suite.addTests([unittest.defaultTestLoader.loadTestsFromTestCase(Py3XSLTTestCase)]) + suite.addTests( + [make_doctest('../../../doc/extensions.txt')]) + suite.addTests( diff --git a/98025653e182f9203189cbde0ab2d6ebec556db8.patch b/98025653e182f9203189cbde0ab2d6ebec556db8.patch new file mode 100644 index 0000000..fc7e5dc --- /dev/null +++ b/98025653e182f9203189cbde0ab2d6ebec556db8.patch @@ -0,0 +1,47 @@ +From 98025653e182f9203189cbde0ab2d6ebec556db8 Mon Sep 17 00:00:00 2001 +From: Stefan Behnel +Date: Tue, 31 Oct 2023 12:07:30 +0100 +Subject: [PATCH] Fix doctest in Py3.13. + +--- + src/lxml/tests/test_xpathevaluator.py | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/lxml/tests/test_xpathevaluator.py b/src/lxml/tests/test_xpathevaluator.py +index ece23095f..8bc453e50 100644 +--- a/src/lxml/tests/test_xpathevaluator.py ++++ b/src/lxml/tests/test_xpathevaluator.py +@@ -687,15 +687,15 @@ def resultTypesTest2(ctxt): + (None, 'resultTypesTest2'): resultTypesTest2,} + + def xpath(): +- """ ++ u""" + Test xpath extension functions. + + >>> root = SAMPLE_XML + >>> e = etree.XPathEvaluator(root, extensions=[extension]) + >>> e("stringTest('you')") + 'Hello you' +- >>> e(_bytes("stringTest('\\\\xe9lan')").decode("unicode_escape")) +- u'Hello \\xe9lan' ++ >>> print(e(_bytes("stringTest('\\\\xe9lan')").decode("unicode_escape"))) ++ Hello \xe9lan + >>> e("stringTest('you','there')") #doctest: +ELLIPSIS + Traceback (most recent call last): + ... +@@ -714,10 +714,10 @@ def xpath(): + "a, 1.5, True, ['tag', 'tag', 'tag']" + >>> list(map(tag, e("argsTest2(/body/tag, /body/section)"))) + ['tag', 'section', 'tag', 'tag'] +- >>> e("resultTypesTest()") +- Traceback (most recent call last): +- ... +- XPathResultError: This is not a supported node-set result: None ++ >>> try: e("resultTypesTest()") ++ ... except etree.XPathResultError as exc: print(exc) ++ ... else: print("SHOULD HAVE FAILED!") ++ This is not a supported node-set result: None + >>> try: + ... e("resultTypesTest2()") + ... except etree.XPathResultError: diff --git a/python-lxml.spec b/python-lxml.spec index 7b713b0..9788db5 100644 --- a/python-lxml.spec +++ b/python-lxml.spec @@ -31,6 +31,10 @@ Patch: Skip-failing-test-test_html_prefix_nsmap.patch Patch: https://github.com/lxml/lxml/commit/dcbc0cc1cb0cedf8019184aaca805d2a649cd8de.patch Patch: https://github.com/lxml/lxml/commit/a03a4b3c6b906d33c5ef1a15f3d5ca5fff600c76.patch +# Python 3.13 compatibility +Patch: https://github.com/lxml/lxml/commit/34187968a67151f02db491a56a0037b55319931d.patch +Patch: https://github.com/lxml/lxml/commit/98025653e182f9203189cbde0ab2d6ebec556db8.patch + BuildRequires: gcc BuildRequires: libxml2-devel BuildRequires: libxslt-devel