From 9786a62726de5a8caba10021c4d4a58c8a3e9e3f Mon Sep 17 00:00:00 2001
From: Leonard Richardson <leonardr@segfault.org>
Date: Wed, 21 Aug 2024 20:18:33 -0400
Subject: [PATCH] * Changes to make tests work whether tests are run under
 soupsieve 2.6   or an earlier version. Based on a patch by Stefano Rivera.

* Removed the strip_cdata argument to lxml's HTMLParser
  constructor, which never did anything and is deprecated as of lxml
  5.3.0. Patch by Stefano Rivera. [bug=2076897]
---
 CHANGELOG             |  9 +++++++++
 bs4/builder/_lxml.py  |  4 ++--
 bs4/tests/test_css.py | 13 +++++++++++--
 tox.ini               |  3 ++-
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 2701446..243caf0 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,12 @@
+= Unreleased
+
+* Changes to make tests work whether tests are run under soupsieve 2.6
+  or an earlier version. Based on a patch by Stefano Rivera.
+
+* Removed the strip_cdata argument to lxml's HTMLParser
+  constructor, which never did anything and is deprecated as of lxml
+  5.3.0. Patch by Stefano Rivera. [bug=2076897]
+
 = 4.12.3 (20240117)
 
 * The Beautiful Soup documentation now has a Spanish translation, thanks
diff --git a/bs4/builder/_lxml.py b/bs4/builder/_lxml.py
index 4f7cf74..502a776 100644
--- a/bs4/builder/_lxml.py
+++ b/bs4/builder/_lxml.py
@@ -108,7 +108,7 @@ class LXMLTreeBuilderForXML(TreeBuilder):
         if self._default_parser is not None:
             return self._default_parser
         return etree.XMLParser(
-            target=self, strip_cdata=False, recover=True, encoding=encoding)
+            target=self, recover=True, encoding=encoding)
 
     def parser_for(self, encoding):
         """Instantiate an appropriate parser for the given encoding.
@@ -122,7 +122,7 @@ class LXMLTreeBuilderForXML(TreeBuilder):
         if isinstance(parser, Callable):
             # Instantiate the parser with default arguments
             parser = parser(
-                target=self, strip_cdata=False, recover=True, encoding=encoding
+                target=self, recover=True, encoding=encoding
             )
         return parser
 
diff --git a/bs4/tests/test_css.py b/bs4/tests/test_css.py
index 359dbcd..3c2318b 100644
--- a/bs4/tests/test_css.py
+++ b/bs4/tests/test_css.py
@@ -8,14 +8,23 @@ from bs4 import (
     ResultSet,
 )
 
+from packaging.version import Version
+
 from . import (
     SoupTest,
     SOUP_SIEVE_PRESENT,
 )
 
 if SOUP_SIEVE_PRESENT:
-    from soupsieve import SelectorSyntaxError
+    from soupsieve import __version__, SelectorSyntaxError
 
+    # Some behavior changes in soupsieve 2.6 that affects one of our
+    # tests.  For the test to run under all versions of Python
+    # supported by Beautiful Soup (which includes versions of Python
+    # not supported by soupsieve 2.6) we need to check both behaviors.
+    SOUPSIEVE_EXCEPTION_ON_UNSUPPORTED_PSEUDOCLASS = SelectorSyntaxError
+    if Version(__version__) < Version("2.6"):
+        SOUPSIEVE_EXCEPTION_ON_UNSUPPORTED_PSEUDOCLASS = NotImplementedError
 
 @pytest.mark.skipif(not SOUP_SIEVE_PRESENT, reason="Soup Sieve not installed")
 class TestCSSSelectors(SoupTest):
@@ -332,7 +341,7 @@ class TestCSSSelectors(SoupTest):
         assert "yes" == chosen.string
 
     def test_unsupported_pseudoclass(self):
-        with pytest.raises(NotImplementedError):
+        with pytest.raises(SOUPSIEVE_EXCEPTION_ON_UNSUPPORTED_PSEUDOCLASS):
             self.soup.select("a:no-such-pseudoclass")
 
         with pytest.raises(SelectorSyntaxError):
diff --git a/tox.ini b/tox.ini
index fc55fca..79f15a5 100644
--- a/tox.ini
+++ b/tox.ini
@@ -10,7 +10,8 @@ wheel_build_env = .pkg
 description = run the tests with all dependencies installed
 deps = lxml
      html5lib
-     soupsieve>=1.2
+     packaging
+     soupsieve>=2.6
      pytest>=6
 commands = pytest {tty:--color=yes} {posargs}
 
-- 
2.46.0

