Exemplo n.º 1
0
    def test_mkd_document(self):
        self.assertEqual(
            libmarkdown.mkd_document.argtypes,
            (ctypes.POINTER(libmarkdown.Document),
             ctypes.POINTER(ctypes.c_char_p)),
        )

        self.assertEqual(
            libmarkdown.mkd_document.restype,
            ctypes.c_int,
        )

        text = '`test`'
        cp = ctypes.c_char_p(text)
        sb = ctypes.c_char_p('')
        doc = libmarkdown.mkd_string(cp, len(text), 0)
        ret = libmarkdown.mkd_compile(doc, 0)

        self.assertNotEqual(ret, -1)

        ret = libmarkdown.mkd_document(doc, ctypes.byref(sb), 0)

        self.assertNotEqual(ret, -1)
        self.assertEqual(
            sb.value[:ret],
            '<p><code>test</code></p>'
        )
Exemplo n.º 2
0
    def _test_flag(self, i, o, f):
        text = i
        cp = ctypes.c_char_p(text)

        doc = libmarkdown.mkd_string(
            cp, len(text), f
        )
        libmarkdown.mkd_compile(doc, f)

        sb = ctypes.c_char_p('')
        ret = libmarkdown.mkd_document(doc, ctypes.byref(sb))

        self.assertEqual(
            sb.value[:ret],
            o,
        )
Exemplo n.º 3
0
    def test_mkd_e_flags(self):
        self.assertEqual(
            libmarkdown.mkd_e_flags.argtypes,
            (ctypes.POINTER(libmarkdown.Document),
             libmarkdown.e_flags_callback)
        )

        self.assertEqual(
            libmarkdown.mkd_e_flags.restype,
            ctypes.c_void_p,
        )

        text = (
            '[a](/a.html)\n'
            '[b](/b.html)\n'
        )
        cp = ctypes.c_char_p(text)
        doc = libmarkdown.mkd_string(cp, len(text), 0)
        ret = libmarkdown.mkd_compile(doc, 0)

        self.assertNotEqual(ret, -1)

        @libmarkdown.e_flags_callback
        def e_target_blank(string, size, context):
            link = string[:size]
            if link == '/a.html':
                attr = ctypes.create_string_buffer('target="_blank"')
                return ctypes.addressof(attr)

        libmarkdown.mkd_e_flags(doc, e_target_blank)

        sb = ctypes.c_char_p('')
        ret = libmarkdown.mkd_document(doc, ctypes.byref(sb), 0)

        self.assertNotEqual(ret, -1)
        self.assertEqual(
            sb.value[:ret],
            '<p>'
            '<a href="/a.html" target="_blank">a</a>\n'
            '<a href="/b.html">b</a>'
            '</p>'
        )
Exemplo n.º 4
0
    def test_mkd_e_url(self):
        self.assertEqual(
            libmarkdown.mkd_e_url.argtypes,
            (ctypes.POINTER(libmarkdown.Document),
             libmarkdown.e_url_callback)
        )

        self.assertEqual(
            libmarkdown.mkd_e_url.restype,
            ctypes.c_void_p,
        )

        text = (
            '[a](/a.html)\n'
            '[b](/b.html)\n'
        )
        cp = ctypes.c_char_p(text)
        doc = libmarkdown.mkd_string(cp, len(text), 0)
        ret = libmarkdown.mkd_compile(doc, 0)

        self.assertNotEqual(ret, -1)

        # TODO get test with libc malloc/strcpy/free working.

        # base = ctypes.c_char_p('http://example.com')

        # @libmarkdown.e_url_callback
        # def e_basename(string, size, context):
        #     base = ctypes.string_at(context)
        #     link = string[:size]
        #     if base and link and link.startswith('/'):
        #         ret = libc.malloc(len(base) + size + 2)
        #         if ret > 0:
        #             libc.strcpy(ret, context)
        #             return ret
        #     return 0

        # @libmarkdown.e_free_callback
        # def e_free(string, context):
        #     if string:
        #         libc.free(string)

        # libmarkdown.mkd_e_url(doc, e_basename)
        # libmarkdown.mkd_e_data(doc, base)
        # libmarkdown.mkd_e_free(doc, e_free)

        alloc = []

        @libmarkdown.e_url_callback
        def e_basename(string, size, context):
            link = string[:size]

            if link.startswith('/'):
                abs_link = ctypes.create_string_buffer(
                    'http://example.com%s' % link
                )
                alloc.append(abs_link)
                return ctypes.addressof(abs_link)

        libmarkdown.mkd_e_url(doc, e_basename)

        sb = ctypes.c_char_p('')
        ret = libmarkdown.mkd_document(doc, ctypes.byref(sb), 0)

        self.assertNotEqual(ret, -1)
        self.assertEqual(
            sb.value[:ret],
            '<p>'
            '<a href="http://example.com/a.html">a</a>\n'
            '<a href="http://example.com/b.html">b</a>'
            '</p>'
        )