diff --git a/runtests.py b/runtests.py deleted file mode 100644 index 409268a..0000000 --- a/runtests.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python -from nose.core import run, collector - -if __name__ == '__main__': - run() diff --git a/setup.py b/setup.py index 22e3edd..6714b8d 100644 --- a/setup.py +++ b/setup.py @@ -2,6 +2,7 @@ import codecs import os from setuptools import setup, find_packages +from setuptools.command.test import test as TestCommand read = lambda filepath: codecs.open(filepath, 'r', 'utf-8').read() @@ -12,6 +13,18 @@ execfile(os.path.join(os.path.dirname(__file__), 'markdownify', 'pkgmeta.py'), pkgmeta) +class PyTest(TestCommand): + def finalize_options(self): + TestCommand.finalize_options(self) + self.test_args = ['tests', '-s'] + self.test_suite = True + + def run_tests(self): + import pytest + errno = pytest.main(self.test_args) + raise SystemExit(errno) + + setup( name='markdownify', description='Convert HTML to markdown.', @@ -25,8 +38,7 @@ setup( zip_safe=False, include_package_data=True, tests_require=[ - 'nose', - 'unittest2', + 'pytest', ], install_requires=[ 'lxml', @@ -44,5 +56,7 @@ setup( 'Topic :: Utilities' ], setup_requires=[], - test_suite='runtests.collector', + cmdclass={ + 'test': PyTest, + }, ) diff --git a/tests.py b/tests.py deleted file mode 100644 index 57c2277..0000000 --- a/tests.py +++ /dev/null @@ -1,123 +0,0 @@ -import unittest -from markdownify import markdownify as md - - -class BasicTests(unittest.TestCase): - - def test_single_tag(self): - self.assertEqual(md('Hello'), 'Hello') - - def test_soup(self): - self.assertEqual(md('
Hello
'), 'Hello') - - def test_whitespace(self): - self.assertEqual(md(' a b \n\n c '), ' a b c ') - - -class ArgTests(unittest.TestCase): - - def test_strip(self): - self.assertEqual( - md('Some Text', strip=['a']), - 'Some Text') - - def test_do_not_strip(self): - self.assertEqual( - md('Some Text', strip=[]), - '[Some Text](https://github.com/matthewwithanm)') - - def test_convert(self): - self.assertEqual( - md('Some Text', convert=['a']), - '[Some Text](https://github.com/matthewwithanm)') - - def test_do_not_convert(self): - self.assertEqual( - md('Some Text', convert=[]), - 'Some Text') - - -class EscapeTests(unittest.TestCase): - - def test_underscore(self): - self.assertEqual(md('_hey_dude_'), '\_hey\_dude\_') - - def test_xml_entities(self): - self.assertEqual(md('&'), '&') - - def test_named_entities(self): - self.assertEqual(md('»'), u'\xbb') - - def test_hexadecimal_entities(self): - # This looks to be a bug in BeautifulSoup (fixed in bs4) that we have to work around. - self.assertEqual(md('''), '\x27') - - def test_single_escaping_entities(self): - self.assertEqual(md('&'), '&') - - -class ConversionTests(unittest.TestCase): - - def test_a(self): - self.assertEqual( - md('Google'), - '[Google](http://google.com)' - ) - - def test_a_with_title(self): - self.assertEqual( - md('Google'), - r'[Google](http://google.com "The \"Goog\"")' - ) - - def test_b(self): - self.assertEqual(md('Hello'), '**Hello**') - - def test_blockquote(self): - self.assertEqual(md('
Hello
').strip(), '> Hello') - - def test_nested_blockquote(self): - self.assertEqual( - md('
And she was like
Hello
').strip(), - '> And she was like \n> > Hello' - ) - - def test_br(self): - self.assertEqual(md('a
b
c'), 'a \nb \nc') - - def test_em(self): - self.assertEqual(md('Hello'), '*Hello*') - - def test_h1(self): - self.assertEqual(md('

Hello

'), 'Hello\n=====\n\n') - - def test_h2(self): - self.assertEqual(md('

Hello

'), 'Hello\n-----\n\n') - - def test_hn(self): - self.assertEqual(md('

Hello

'), '### Hello\n\n') - self.assertEqual(md('
Hello
'), '###### Hello\n\n') - - def test_i(self): - self.assertEqual(md('Hello'), '*Hello*') - - def test_ol(self): - self.assertEqual(md('
  1. a
  2. b
'), '1. a\n2. b\n') - - def test_p(self): - self.assertEqual(md('

hello

'), 'hello\n\n') - - def test_strong(self): - self.assertEqual(md('Hello'), '**Hello**') - - def test_ul(self): - self.assertEqual(md(''), '* a\n* b\n') - - -class AdvancedTests(unittest.TestCase): - - def test_nested(self): - self.assertEqual( - md('

This is an example link.

'), - 'This is an [example link](http://example.com/).\n\n' - ) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_advanced.py b/tests/test_advanced.py new file mode 100644 index 0000000..4c480d7 --- /dev/null +++ b/tests/test_advanced.py @@ -0,0 +1,6 @@ +from markdownify import markdownify as md + + +def test_nested(): + text = md('

This is an example link.

') + assert text == 'This is an [example link](http://example.com/).\n\n' diff --git a/tests/test_args.py b/tests/test_args.py new file mode 100644 index 0000000..ebce4a8 --- /dev/null +++ b/tests/test_args.py @@ -0,0 +1,25 @@ +""" +Test whitelisting/blacklisting of specific tags. + +""" +from markdownify import markdownify as md + + +def test_strip(): + text = md('Some Text', strip=['a']) + assert text == 'Some Text' + + +def test_do_not_strip(): + text = md('Some Text', strip=[]) + assert text == '[Some Text](https://github.com/matthewwithanm)' + + +def test_convert(): + text = md('Some Text', convert=['a']) + assert text == '[Some Text](https://github.com/matthewwithanm)' + + +def test_do_not_convert(): + text = md('Some Text', convert=[]) + assert text == 'Some Text' diff --git a/tests/test_basic.py b/tests/test_basic.py new file mode 100644 index 0000000..78775b6 --- /dev/null +++ b/tests/test_basic.py @@ -0,0 +1,13 @@ +from markdownify import markdownify as md + + +def test_single_tag(): + assert md('Hello') == 'Hello' + + +def test_soup(): + assert md('
Hello
') == 'Hello' + + +def test_whitespace(): + assert md(' a b \n\n c ') == ' a b c ' diff --git a/tests/test_conversions.py b/tests/test_conversions.py new file mode 100644 index 0000000..e0922dd --- /dev/null +++ b/tests/test_conversions.py @@ -0,0 +1,64 @@ +from markdownify import markdownify as md + + +def test_a(): + assert md('Google') == '[Google](http://google.com)' + + +def test_a_with_title(): + text = md('Google') + assert text == r'[Google](http://google.com "The \"Goog\"")' + + +def test_b(): + assert md('Hello') == '**Hello**' + + +def test_blockquote(): + assert md('
Hello
').strip() == '> Hello' + + +def test_nested_blockquote(): + text = md('
And she was like
Hello
').strip() + assert text == '> And she was like \n> > Hello' + + +def test_br(): + assert md('a
b
c') == 'a \nb \nc' + + +def test_em(): + assert md('Hello') == '*Hello*' + + +def test_h1(): + assert md('

Hello

') == 'Hello\n=====\n\n' + + +def test_h2(): + assert md('

Hello

') == 'Hello\n-----\n\n' + + +def test_hn(): + assert md('

Hello

') == '### Hello\n\n' + assert md('
Hello
') == '###### Hello\n\n' + + +def test_i(): + assert md('Hello') == '*Hello*' + + +def test_ol(): + assert md('
  1. a
  2. b
') == '1. a\n2. b\n' + + +def test_p(): + assert md('

hello

') == 'hello\n\n' + + +def test_strong(): + assert md('Hello') == '**Hello**' + + +def test_ul(): + assert md('') == '* a\n* b\n' diff --git a/tests/test_escaping.py b/tests/test_escaping.py new file mode 100644 index 0000000..9b0d4fa --- /dev/null +++ b/tests/test_escaping.py @@ -0,0 +1,22 @@ +from markdownify import markdownify as md + + +def test_underscore(): + assert md('_hey_dude_') == '\_hey\_dude\_' + + +def test_xml_entities(): + assert md('&') == '&' + + +def test_named_entities(): + assert md('»') == u'\xbb' + + +def test_hexadecimal_entities(): + # This looks to be a bug in BeautifulSoup (fixed in bs4) that we have to work around. + assert md(''') == '\x27' + + +def test_single_escaping_entities(): + assert md('&') == '&'