diff options
author | Leonard Richardson <leonardr@segfault.org> | 2024-08-21 20:18:33 -0400 |
---|---|---|
committer | Leonard Richardson <leonardr@segfault.org> | 2024-08-21 20:18:33 -0400 |
commit | 9786a62726de5a8caba10021c4d4a58c8a3e9e3f (patch) | |
tree | 2ca847f8fc20e7da3e548fc009449a92c6f50068 | |
parent | 7fb51753743644e23dfb3e7a964d387583dd0bc0 (diff) |
* 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]
-rw-r--r-- | CHANGELOG | 9 | ||||
-rw-r--r-- | bs4/builder/_lxml.py | 4 | ||||
-rw-r--r-- | bs4/tests/test_css.py | 13 | ||||
-rw-r--r-- | tox.ini | 3 |
4 files changed, 24 insertions, 5 deletions
@@ -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): @@ -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} |