def test_VersionInfo_value_check(self): # releaselevel must be one of ('alpha', 'beta', 'candidate', 'final') with self.assertRaises(ValueError): VersionInfo(0, 1, 0, 'gamma') # releaselevel 'final' must not be used with development versions with self.assertRaises(ValueError): VersionInfo(0, 1, releaselevel='final', release=False) # "serial" must be 0 for final releases' with self.assertRaises(ValueError): VersionInfo(0, 1, releaselevel='final', serial=1)
def test_VersionInfo(self): # arguments may use keywords self.assertEqual( VersionInfo(0, 1, 2, 'beta', 3, False), VersionInfo(major=0, minor=1, micro=2, releaselevel='beta', serial=3, release=False)) # check defaults: self.assertEqual( VersionInfo(), VersionInfo(0, 0, 0, releaselevel='final', serial=0, release=True))
def identifier2version_info(identifier): """Convert Docutils version identifier to a `version_info` namedtuple. """ try: segments = _version_regexp.match(identifier).groupdict() except AttributeError: raise ValueError('non-supported version identifier "%s"' % identifier) if segments['pre']: releaselevel = releaselevels[segments['pre_l']] else: # .dev without pre-release segment sorts before pre-releases, see # https://www.python.org/dev/peps/pep-0440/#summary-of-permitted-suffixes-and-relative-ordering if segments['dev']: releaselevel = None else: releaselevel = 'final' return VersionInfo( major=int(segments['major']), minor=int(segments['minor']), micro=int(segments['micro']) if segments['micro'] else 0, releaselevel=releaselevel, serial=segments['pre_n'] and int(segments['pre_n']) or 0, release=not segments['dev'])
def test_version_info_tuple_comparing(self): """Test comparing of __version_info__ instances to tuples.""" # {<version string>: <version info>} v01b = VersionInfo(0, 1, 0, 'beta', 0, True) v01 = VersionInfo(0, 1, 0, 'final', 0, True) v02b_dev = VersionInfo(0, 2, 0, 'beta', 0, False) # compare to ordinary tuples: self.assertTrue(v01b < (0, 2)) self.assertTrue((0, 2) > v01b) self.assertTrue(v01b < (0, 1)) self.assertTrue((0, 1) > v01b) self.assertTrue(v01 <= (0, 1)) self.assertTrue(v01 >= (0, 1)) self.assertTrue((0, 1) <= v01) self.assertTrue((0, 1) >= v01) self.assertTrue(v02b_dev > (0, 1)) self.assertTrue((0, 1) < v02b_dev) # Test for equality requires complete tuple, because __eg__() is # not called when comparing a namedtuple subclass to a tuple: self.assertTrue((0, 1, 0, 'final', 0, True) == v01)
def test_version_info_comparing(self): """Test comparing of __version_info__ instances.""" # Example development cycle: devcycle = ('0.1a.dev 0.1a 0.1a1.dev ' '0.1b.dev 0.1b 0.1b1.dev ' '0.1rc1.dev 0.1rc1 0.1rc2.dev ' '0.1 0.1.1b.dev 0.1.1b 0.1.1 ' '0.2b.dev 0.2b 0.2') # corresponding version_info values: versioninfos = [ VersionInfo(0, 1, 0, 'alpha', 0, False), VersionInfo(0, 1, 0, 'alpha', 0, True), VersionInfo(0, 1, 0, 'alpha', 1, False), VersionInfo(0, 1, 0, 'beta', 0, False), VersionInfo(0, 1, 0, 'beta', 0, True), VersionInfo(0, 1, 0, 'beta', 1, False), VersionInfo(0, 1, 0, 'candidate', 1, False), VersionInfo(0, 1, 0, 'candidate', 1, True), VersionInfo(0, 1, 0, 'candidate', 2, False), VersionInfo(0, 1, 0, 'final', 0, True), VersionInfo(0, 1, 1, 'beta', 0, False), VersionInfo(0, 1, 1, 'beta', 0, True), VersionInfo(0, 1, 1, 'final', 0, True), VersionInfo(0, 2, 0, 'beta', 0, False), VersionInfo(0, 2, 0, 'beta', 0, True), VersionInfo(0, 2, 0, 'final', 0, True), ] # transform to version strings versions = [ docutils.utils.version_identifier(vinfo) for vinfo in versioninfos ] # ensure version infos corresponding to the dev cycle are ascending self.assertEqual(versions, devcycle.split()) self.assertEqual(versioninfos, sorted(versioninfos))
captured = capsys.readouterr() assert not captured.err assert "text" in captured.out def test_help_text(): """Test retrieving settings help text.""" from docutils.frontend import OptionParser stream = io.StringIO() OptionParser(components=(Parser, )).print_help(stream) assert "MyST options" in stream.getvalue() @pytest.mark.skipif( __version_info__ < VersionInfo(0, 17, 0, "final", 0, True), reason="parser option added in docutils 0.17", ) def test_include_from_rst(tmp_path): """Test including a MyST file from within an RST file.""" from docutils.parsers.rst import Parser as RSTParser include_path = tmp_path.joinpath("include.md") include_path.write_text("# Title") parser = RSTParser() document = make_document(parser_cls=RSTParser) parser.parse( f".. include:: {include_path}\n :parser: myst_parser.docutils_", document) assert (document.pformat().strip() == dedent("""\