summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG9
-rw-r--r--bs4/builder/_lxml.py4
-rw-r--r--bs4/tests/test_css.py13
-rw-r--r--tox.ini3
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}