# -*- coding: utf-8 -*- import pyfmi.testcase import unittest import re import locale points = 5 locale.setlocale(locale.LC_ALL, 'bg_BG') class ProblemTests(pyfmi.testcase.TestCase): def assertWikiTolerant(self, expected, tested): conversions = ( (lambda s: s.encode('cp1251'), lambda s: re.sub(r'\s+', '', s)), (lambda s: s.encode('utf-8'), lambda s: re.sub(r'\s+', '', s)), (lambda s: s, lambda s: re.sub(re.compile(r'\s+', re.U), '', s)), ) ok = [] for converter, nows in conversions: try: ok.append(nows(converter(expected)) == nows(self.user.wiki(converter(tested)))) except (UnicodeError, TypeError): pass if not any(ok): print '_' * 20 + "[ TEST FAILED ]" + '_' * 20 print for converter, nows in conversions: try: ours = nows(converter(expected)) theirs = nows(self.user.wiki(converter(tested))) if ours != theirs: print '-' * 20 print ours print '-' * 20 print theirs print '-' * 20 print else: print 'WAIT! ' * 5 + " TEST PASSES! " except (UnicodeError, TypeError), data: print data print self.assertTrue(any(ok)) def _test_sample(self): wikiText = """== Python == *Питон* (от англ. _Python_, произнася се _Пайтън_) е интерпретируем, интерактивен, обектно-ориентиран език за програмиране, създаден от [http://www.python.org/~guido/ Гуидо ван Росум] в началото на 90-те години. Често бива сравняван с Tcl, Perl, Scheme, Java и Ruby. Питон предлага добра структура и поддръжка за разработка на големи приложения. Той притежава вградени сложни типове данни като гъвкави масиви и речници, за които биха били необходими дни, за да се напишат ефикасно на C. За разлика от Perl, мистичната променлива _ отсъства. Нито може да ползвате * за глобове. === Разяснения на *Python* === Питон позволява разделянето на една програма на модули, които могат да се използват отново в други програми. Също така притежава голям набор от стандартни модули, които да се използват като основа на програмите. Съществуват и вградени модули, които обезпечават такива неща като файлов вход/изход (I/O), различни системни функции, сокети (_sockets_), програмни интерфейси към GUI-библиотеки като Тк, както и много други. == Връзки == Можете да намерите повече информация на следните места: stefan@example.org http://fmi.py-bg.net/ http://python.org/""" expectedHTML = """
Питон (от англ. Python, произнася се Пайтън) е интерпретируем, интерактивен, обектно-ориентиран език за програмиране, създаден от Гуидо ван Росум в началото на 90-те години. Често бива сравняван с Tcl, Perl, Scheme, Java и Ruby.
Питон предлага добра структура и поддръжка за разработка на големи приложения. Той притежава вградени сложни типове данни като гъвкави масиви и речници, за които биха били необходими дни, за да се напишат ефикасно на C. За разлика от Perl, мистичната променлива _ отсъства. Нито може да ползвате * за глобове.
Питон позволява разделянето на една програма на модули, които могат да се използват отново в други програми. Също така притежава голям набор от стандартни модули, които да се използват като основа на програмите. Съществуват и вградени модули, които обезпечават такива неща като файлов вход/изход (I/O), различни системни функции, сокети (sockets), програмни интерфейси към GUI-библиотеки като Тк, както и много други.
Можете да намерите повече информация на следните места:
stefan@example.org
http://fmi.py-bg.net/
http://python.org/
Питон (Python, произнася се Пайтън) е интерпретируем, интерактивен, обектно-ориентиран език за програмиране, създаден в началото на 90-те години. Често бива сравняван с Tcl, Perl, Scheme, Java и Ruby.
Питон предлага добра структура и поддръжка за разработка на големи приложения. Той притежава вградени сложни типове данни като гъвкави масиви и речници, за които биха били необходими дни, за да се напишат ефикасно на C.
Пайтън притежава голям набор от стандартни модули, които да се използват като основа на програмите. Съществуват и вградени модули, които обезпечават такива неща като файлов вход/изход (I/O), различни системни функции, сокети (sockets), програмни интерфейси към GUI-библиотеки като Тк, както и много други.
Можете да намерите повече информация лесно и сами.
""" self.assertWikiTolerant(expectedHTML, wikiText) def test_sample_urls_emails(self): try: self._test_sample() except AssertionError: pass else: self.assertTrue(True) return wikiText = u"""=== Връзки === Пайтън е създаден от [http://www.python.org/~guido/ Гуидо ван Росум] в началото на 90-те години. Повече информация за пайтън можете да намерите на http://python.org и http://docs.python.org python@example.org и, естествено, на http://fmi.py-bg.net/""" expectedHTML = u"""Пайтън е създаден от Гуидо ван Росум в началото на 90-те години. Повече информация за пайтън можете да намерите на http://python.org и http://docs.python.org python@example.org и, естествено, на http://fmi.py-bg.net/
""" self.assertWikiTolerant(expectedHTML, wikiText) def test_sample_bold_italic(self): try: self._test_sample() except AssertionError: pass else: self.assertTrue(True) return wikiText = u"""=== Термини, свързани с *Python* === *Питон* (от англ. _Python_, произнася се _Пайтън_) е интерпретируем, интерактивен, обектно-ориентиран език за програмиране. Често бива сравняван с _Tcl_, _Perl_, _Scheme_ (_Lisp_), _Java_ и _Ruby_. За разлика от Perl, отсъства мистичната променлива _, както и не може да ползвате * за глобове.""" expectedHTML = u"""Питон (от англ. Python, произнася се Пайтън) е интерпретируем, интерактивен, обектно-ориентиран език за програмиране. Често бива сравняван с Tcl, Perl, Scheme (Lisp), Java и Ruby. За разлика от Perl, отсъства мистичната променлива _, както и не може да ползвате * за глобове.
""" self.assertWikiTolerant(expectedHTML, wikiText) def test_newlines_no_headings_no_strong(self): wikiText = u"""Python е език, за който е приложим терминът duck typing. Вижте повече в Wikipedia.""" expectedHTML = u"""Python е език, за който е приложим терминът duck typing.
Вижте повече в Wikipedia.
Python е език, за който е приложим терминът duck typing.
Вижте повече в Wikipedia или пишете на stefan+kanev@example.com и имайте предвид, че потребител@хост и user@host не се валидират лесно.
""" self.assertWikiTolerant(expectedHTML, wikiText) if __name__ == '__main__': ProblemTests.user_filename = 'p3.py' unittest.main()