def modify(self, text):
        """Converts any horizontal rule variation to the version defined in the settings file.

        A horizontal rule is defined by three or more hyphens, asterisks, or underscores with optional spaces in between.
        """

        horizontal_rule = pretty_markdown.settings().get('horizontal_rule_style')
        return horizontal_rule_utils.convert_horizontal_rules(text, horizontal_rule)
    def test_convertHorizontalRules_fromAsterisksWithSpaces(self):

        text = '* * *'
        rule = '---'

        expected = '---'
        actual = horizontal_rule_utils.convert_horizontal_rules(text, rule)

        self.assertEqual(actual, expected)
    def test_convertHorizontalRules_fromUnderscoresWithSpaces(self):

        text = '_ _ _'
        rule = '---'

        expected = '---'
        actual = horizontal_rule_utils.convert_horizontal_rules(text, rule)

        self.assertEqual(actual, expected)
    def test_convertHorizontalRules_setextH2HeaderFollowedByMultipleRules_allOnNewLines(self):

        text = 'Header\n---\n\n---\n\n---'
        rule = '***'

        expected = 'Header\n---\n\n***\n\n***'
        actual = horizontal_rule_utils.convert_horizontal_rules(text, rule)

        self.assertEqual(actual, expected)
    def test_convertHorizontalRules_removeSpaces(self):

        text = '- - - -'
        rule = '---'

        expected = '---'
        actual = horizontal_rule_utils.convert_horizontal_rules(text, rule)

        self.assertEqual(actual, expected)
    def test_convertHorizontalRules_multipleRules_allOnNewLines(self):

        text = '---\n\n***\n\n___\n\n* * *'
        rule = '***'

        expected = '***\n\n***\n\n***\n\n***'
        actual = horizontal_rule_utils.convert_horizontal_rules(text, rule)

        self.assertEqual(actual, expected)
    def test_convertHorizontalRules_setextHeader(self):

        text = 'Header\n------'
        rule = '---'

        expected = 'Header\n------'
        actual = horizontal_rule_utils.convert_horizontal_rules(text, rule)

        self.assertEqual(actual, expected)
    def test_cleanToClean(self):

        with open(CLEAN_FILE_PATH) as clean_file:
            expected = clean_file.read()

        actual = bold_utils.convert_bolds(expected)
        actual = header_utils.fix_header_balancing(actual)
        actual = horizontal_rule_utils.convert_horizontal_rules(actual)
        actual = italic_utils.convert_italics(actual)
        actual = link_utils.discover_missing_links(actual)
        actual = link_utils.format_link_reference_definitions(actual)
        actual = list_utils.alternate_unordered_list_delimiters(actual)
        actual = list_utils.fix_ordered_list_numbering(actual)
        actual = whitespace_utils.trim_nonbreaking_whitespace(actual)

        self.assertEqual(actual, expected)
    def test_dirtyToClean_atx_unbalanced(self):

        with open(DIRTY_FILE_PATH) as dirty_file:
            text = dirty_file.read()
        with open(CLEAN_ANY_HEADER_UNBALANCED_FILE_PATH) as clean_file:
            expected = clean_file.read()

        actual = bold_utils.convert_bolds(text)
        actual = header_utils.fix_header_balancing(actual, balancing=header_utils.UNBALANCED)
        actual = horizontal_rule_utils.convert_horizontal_rules(actual)
        actual = italic_utils.convert_italics(actual)
        actual = link_utils.discover_missing_links(actual)
        actual = link_utils.format_link_reference_definitions(actual)
        actual = list_utils.alternate_unordered_list_delimiters(actual)
        actual = list_utils.fix_ordered_list_numbering(actual)
        actual = whitespace_utils.trim_nonbreaking_whitespace(actual)

        self.assertEqual(actual, expected)
    def test_convertHorizontalRules_invalidHorizontalRule(self):

        with self.assertRaisesRegex(AssertionError, 'A horizontal rule is defined by three or more hyphens, asterisks, or underscores with optional spaces in between.'):
            horizontal_rule_utils.convert_horizontal_rules('', 'mmm')