Beispiel #1
0
 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)
Beispiel #2
0
 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'])
Beispiel #4
0
    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)
Beispiel #5
0
    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))
Beispiel #6
0
    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("""\