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>' )
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, )
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>' )
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>' )