From a0f916a1930053ea86d1740195a397728fd9f9c3 Mon Sep 17 00:00:00 2001 From: goodger Date: Wed, 13 Nov 2002 01:12:56 +0000 Subject: Tests for language modules completeness. By Engelbert Gruber. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@940 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 test/test_language.py (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py new file mode 100644 index 000000000..8e6735965 --- /dev/null +++ b/test/test_language.py @@ -0,0 +1,105 @@ +#!/usr/bin/python + +# Author: engelbert gruber +# Contact: grubert@users.sourceforge.net +# Revision: $Revision$ +# Date: $Date$ +# Copyright: This module has been placed in the public domain. + + +""" +Test module for language modules for completeness. +""" + +# i am unsure about how to test: +# the result i want is a test per lanuage. +# because this way the first error stops it. + +import unittest +import docutils.languages +from docutils.parsers.rst import directives +import docutils.parsers.rst.languages + +debug = 0 + +import os, re + +class LanguageTests(unittest.TestCase): + + def _get_installed_languages(self): + """ + get installed language translations from docutils.language. + One might also get from parsers.rst.language. + """ + lang_re = re.compile('^([a-z]{2}(_[A-Z]{2})?)\.py$') + self.languages_found = [] + for mod in os.listdir(globals()['docutils'].languages.__path__[0]): + match = lang_re.match(mod) + if match and not match.group(1) == self.reference_language: + self.languages_found.append(match.group(1)) + print self.languages_found + + def setUp(self): + self.reference_language = 'en' + self._get_installed_languages() + self.ref = docutils.languages.get_language(self.reference_language) + + def debug(self): + print "Reference language:", self.reference_language + + def _xor(self,ref_dict,l_dict): + """ + Returns entries that are only in one dictionary. + (missing_in_lang, more_than_in_ref). + """ + missing = [] # in ref but not in l. + too_much = [] # in l but not in ref. + for label in ref_dict.keys(): + if not l_dict.has_key(label): + missing.append(label) + for label in l_dict.keys(): + if not ref_dict.has_key(label): + too_much.append(label) + return (missing,too_much) + + def _test_label_translations(self,lang): + """check label translations.""" + l = docutils.languages.get_language(lang) + + (missed,too_much) = self._xor(self.ref.labels,l.labels) + if len(missed)>0 or len(too_much)>0: + raise NameError, "Missed: %s, Too much: %s" %(str(missed),str(too_much)) + +# def test_bibliographic_fields(self): +# print " bibliographic_fields length compare" +# if not len(ref.bibliographic_fields) == len(l.bibliographic_fields): +# print " mismatch: ref has %d entries language %d." % \ +# (len(ref.bibliographic_fields), len(l.bibliographic_fields)) + + def _test_directives(self,lang): + l_directives = docutils.parsers.rst.languages.get_language(lang) + failures = "" + for d in l_directives.directives.keys(): + try: + func, msg = directives.directive(d, l_directives, None) + except: + failures += "%s," % d + if not failures == "": + raise NameError, failures + + def test_language(self): + for lang in self.languages_found: + self._test_label_translations(lang) + self._test_directives(lang) + + +if __name__ == '__main__': + import sys + # and get language to test + unittest.main() + + + + +# vim: set et ts=4 ai : + -- cgit v1.2.1 From 5a86e1634d9940aa31dfe8eb63259d04ab8e999f Mon Sep 17 00:00:00 2001 From: goodger Date: Wed, 13 Nov 2002 01:22:05 +0000 Subject: Adapted to DocutilsTestSupport.py git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@942 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 168 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 100 insertions(+), 68 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index 8e6735965..435751545 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -1,53 +1,73 @@ -#!/usr/bin/python +#!/usr/bin/env python -# Author: engelbert gruber +# Authors: Engelbert Gruber; David Goodger # Contact: grubert@users.sourceforge.net # Revision: $Revision$ # Date: $Date$ # Copyright: This module has been placed in the public domain. - -""" -Test module for language modules for completeness. """ +Tests for language module completeness. -# i am unsure about how to test: -# the result i want is a test per lanuage. -# because this way the first error stops it. +Specify a language code (e.g. "de") as a command-line parameter to test only +that language. +""" -import unittest +import sys +import os +import re import docutils.languages -from docutils.parsers.rst import directives import docutils.parsers.rst.languages +from docutils.parsers.rst import directives +from DocutilsTestSupport import CustomTestSuite, CustomTestCase + +reference_language = 'en' -debug = 0 -import os, re +class LanguageTestSuite(CustomTestSuite): -class LanguageTests(unittest.TestCase): + language_module_pattern = re.compile('^([a-z]{2,3}(_[a-z]{2,8})*)\.py$') - def _get_installed_languages(self): + def __init__(self, languages=None): + CustomTestSuite.__init__(self) + if languages: + self.languages = languages + else: + self.get_languages() + + def get_languages(self): """ - get installed language translations from docutils.language. - One might also get from parsers.rst.language. + Get installed language translations from docutils.languages and from + docutils.parsers.rst.languages. """ - lang_re = re.compile('^([a-z]{2}(_[A-Z]{2})?)\.py$') - self.languages_found = [] - for mod in os.listdir(globals()['docutils'].languages.__path__[0]): - match = lang_re.match(mod) - if match and not match.group(1) == self.reference_language: - self.languages_found.append(match.group(1)) - print self.languages_found - - def setUp(self): - self.reference_language = 'en' - self._get_installed_languages() - self.ref = docutils.languages.get_language(self.reference_language) - - def debug(self): - print "Reference language:", self.reference_language - - def _xor(self,ref_dict,l_dict): + languages = {} + for mod in (os.listdir(docutils.languages.__path__[0]) + + os.listdir(docutils.parsers.rst.languages.__path__[0])): + match = self.language_module_pattern.match(mod) + if match: + languages[match.group(1)] = 1 + del languages[reference_language] + self.languages = languages.keys() + + def generateTests(self): + for language in self.languages: + for method in LanguageTestCase.test_methods: + self.addTestCase(LanguageTestCase, method, None, None, + id=language+'.py', language=language) + + +class LanguageTestCase(CustomTestCase): + + test_methods = ['test_label_translations', 'test_directives'] + """Names of methods used to test each language.""" + + def __init__(self, *args, **kwargs): + self.ref = docutils.languages.get_language(reference_language) + self.language = kwargs['language'] + del kwargs['language'] # only wanted here + CustomTestCase.__init__(self, *args, **kwargs) + + def _xor(self, ref_dict, l_dict): """ Returns entries that are only in one dictionary. (missing_in_lang, more_than_in_ref). @@ -60,46 +80,58 @@ class LanguageTests(unittest.TestCase): for label in l_dict.keys(): if not ref_dict.has_key(label): too_much.append(label) - return (missing,too_much) + return (missing, too_much) + + def test_label_translations(self): + try: + module = docutils.languages.get_language(self.language) + if not module: + raise ImportError + except ImportError: + self.fail('No docutils.languages.%s module.' % self.language) + missed, unknown = self._xor(self.ref.labels, module.labels) + if missed or unknown: + self.fail("Missed: %s; Unknown: %s" % (str(missed), str(unknown))) + + def test_directives(self): + try: + module = docutils.parsers.rst.languages.get_language( + self.language) + if not module: + raise ImportError + except ImportError: + self.fail('No docutils.parsers.rst.languages.%s module.' + % self.language) + failures = "" + for d in module.directives.keys(): + try: + func, msg = directives.directive(d, module, None) + except Exception, error: + failures += "%s (%s)," % (d, error) + if failures: + self.fail(failures) - def _test_label_translations(self,lang): - """check label translations.""" - l = docutils.languages.get_language(lang) - (missed,too_much) = self._xor(self.ref.labels,l.labels) - if len(missed)>0 or len(too_much)>0: - raise NameError, "Missed: %s, Too much: %s" %(str(missed),str(too_much)) +languages_to_test = [] -# def test_bibliographic_fields(self): -# print " bibliographic_fields length compare" -# if not len(ref.bibliographic_fields) == len(l.bibliographic_fields): -# print " mismatch: ref has %d entries language %d." % \ -# (len(ref.bibliographic_fields), len(l.bibliographic_fields)) +def suite(): + s = LanguageTestSuite(languages_to_test) + s.generateTests() + return s + +def get_language_arguments(): + while len(sys.argv) > 1: + last = sys.argv[-1] + if last.startswith('-'): + break + languages_to_test.append(last) + sys.argv.pop() + languages_to_test.reverse() - def _test_directives(self,lang): - l_directives = docutils.parsers.rst.languages.get_language(lang) - failures = "" - for d in l_directives.directives.keys(): - try: - func, msg = directives.directive(d, l_directives, None) - except: - failures += "%s," % d - if not failures == "": - raise NameError, failures - - def test_language(self): - for lang in self.languages_found: - self._test_label_translations(lang) - self._test_directives(lang) - if __name__ == '__main__': - import sys - # and get language to test - unittest.main() + get_language_arguments() + import unittest + unittest.main(defaultTest='suite') - - - # vim: set et ts=4 ai : - -- cgit v1.2.1 From df981e0d9e370164315e7ca6b8cf4eb01e9fdbec Mon Sep 17 00:00:00 2001 From: grubert Date: Wed, 13 Nov 2002 07:11:48 +0000 Subject: + fix directive checking. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@945 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index 435751545..d14bf5a9d 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -47,6 +47,7 @@ class LanguageTestSuite(CustomTestSuite): if match: languages[match.group(1)] = 1 del languages[reference_language] + # maybe test reference language too: directives can fail. self.languages = languages.keys() def generateTests(self): @@ -106,6 +107,8 @@ class LanguageTestCase(CustomTestCase): for d in module.directives.keys(): try: func, msg = directives.directive(d, module, None) + if not func: + failures += "%s (%s)," % (d, "unknown directive") except Exception, error: failures += "%s (%s)," % (d, error) if failures: -- cgit v1.2.1 From 77f2ee4872ec99a61ca1756c2dad1be556877a3a Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 14 Nov 2002 02:31:34 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@949 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index d14bf5a9d..3b183a6e8 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -16,6 +16,7 @@ that language. import sys import os import re +from types import UnicodeType import docutils.languages import docutils.parsers.rst.languages from docutils.parsers.rst import directives @@ -46,8 +47,6 @@ class LanguageTestSuite(CustomTestSuite): match = self.language_module_pattern.match(mod) if match: languages[match.group(1)] = 1 - del languages[reference_language] - # maybe test reference language too: directives can fail. self.languages = languages.keys() def generateTests(self): @@ -92,7 +91,7 @@ class LanguageTestCase(CustomTestCase): self.fail('No docutils.languages.%s module.' % self.language) missed, unknown = self._xor(self.ref.labels, module.labels) if missed or unknown: - self.fail("Missed: %s; Unknown: %s" % (str(missed), str(unknown))) + self.fail('Missed: %s; Unknown: %s' % (str(missed), str(unknown))) def test_directives(self): try: @@ -103,16 +102,28 @@ class LanguageTestCase(CustomTestCase): except ImportError: self.fail('No docutils.parsers.rst.languages.%s module.' % self.language) - failures = "" + failures = [] for d in module.directives.keys(): try: func, msg = directives.directive(d, module, None) if not func: - failures += "%s (%s)," % (d, "unknown directive") + failures.append('"%s": unknown directive' % d) except Exception, error: - failures += "%s (%s)," % (d, error) + failures.append('"%s": %s' % (d, error)) + reverse = {} + for key, value in module.directives.items(): + reverse[value] = key + canonical = directives._directive_registry.keys() + canonical.sort() + canonical.remove('restructuredtext-test-directive') + for name in canonical: + if not reverse.has_key(name): + failures.append('"%s": translation missing' % name) if failures: - self.fail(failures) + text = '\n ' + '\n '.join(failures) + if type(text) == UnicodeType: + text = text.encode('raw_unicode_escape') + self.fail(text) languages_to_test = [] -- cgit v1.2.1 From a4237939cd9815ee1f487ffab293398b843a6e25 Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 5 Dec 2002 02:40:14 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@994 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index 3b183a6e8..27993ebe8 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -91,7 +91,9 @@ class LanguageTestCase(CustomTestCase): self.fail('No docutils.languages.%s module.' % self.language) missed, unknown = self._xor(self.ref.labels, module.labels) if missed or unknown: - self.fail('Missed: %s; Unknown: %s' % (str(missed), str(unknown))) + self.fail( + 'Module docutils.languages.%s:\n Missed: %s; Unknown: %s' + % (self.language, str(missed), str(unknown))) def test_directives(self): try: @@ -120,7 +122,8 @@ class LanguageTestCase(CustomTestCase): if not reverse.has_key(name): failures.append('"%s": translation missing' % name) if failures: - text = '\n ' + '\n '.join(failures) + text = ('Module docutils.parsers.rst.languages.%s:\n %s' + % (self.language, '\n '.join(failures))) if type(text) == UnicodeType: text = text.encode('raw_unicode_escape') self.fail(text) -- cgit v1.2.1 From c475c292be1f722b781fc23eebfcbb979590d59a Mon Sep 17 00:00:00 2001 From: goodger Date: Sat, 28 Jun 2003 04:29:12 +0000 Subject: added tests for bibliographic fields and roles git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@1517 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 76 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 10 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index 27993ebe8..cf9d75804 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -19,7 +19,7 @@ import re from types import UnicodeType import docutils.languages import docutils.parsers.rst.languages -from docutils.parsers.rst import directives +from docutils.parsers.rst import states, directives from DocutilsTestSupport import CustomTestSuite, CustomTestCase reference_language = 'en' @@ -58,7 +58,8 @@ class LanguageTestSuite(CustomTestSuite): class LanguageTestCase(CustomTestCase): - test_methods = ['test_label_translations', 'test_directives'] + test_methods = ['test_labels', 'test_bibliographic_fields', + 'test_directives', 'test_roles'] """Names of methods used to test each language.""" def __init__(self, *args, **kwargs): @@ -82,7 +83,14 @@ class LanguageTestCase(CustomTestCase): too_much.append(label) return (missing, too_much) - def test_label_translations(self): + def _invert(self, adict): + """Return an inverted (keys & values swapped) dictionary.""" + inverted = {} + for key, value in adict.items(): + inverted[value] = key + return inverted + + def test_labels(self): try: module = docutils.languages.get_language(self.language) if not module: @@ -91,9 +99,24 @@ class LanguageTestCase(CustomTestCase): self.fail('No docutils.languages.%s module.' % self.language) missed, unknown = self._xor(self.ref.labels, module.labels) if missed or unknown: - self.fail( - 'Module docutils.languages.%s:\n Missed: %s; Unknown: %s' - % (self.language, str(missed), str(unknown))) + self.fail('Module docutils.languages.%s.labels:\n' + ' Missed: %s; Unknown: %s' + % (self.language, str(missed), str(unknown))) + + def test_bibliographic_fields(self): + try: + module = docutils.languages.get_language(self.language) + if not module: + raise ImportError + except ImportError: + self.fail('No docutils.languages.%s module.' % self.language) + missed, unknown = self._xor( + self._invert(self.ref.bibliographic_fields), + self._invert(module.bibliographic_fields)) + if missed or unknown: + self.fail('Module docutils.languages.%s.bibliographic_fields:\n' + ' Missed: %s; Unknown: %s' + % (self.language, str(missed), str(unknown))) def test_directives(self): try: @@ -112,14 +135,47 @@ class LanguageTestCase(CustomTestCase): failures.append('"%s": unknown directive' % d) except Exception, error: failures.append('"%s": %s' % (d, error)) - reverse = {} - for key, value in module.directives.items(): - reverse[value] = key + inverted = self._invert(module.directives) canonical = directives._directive_registry.keys() canonical.sort() canonical.remove('restructuredtext-test-directive') for name in canonical: - if not reverse.has_key(name): + if not inverted.has_key(name): + failures.append('"%s": translation missing' % name) + if failures: + text = ('Module docutils.parsers.rst.languages.%s:\n %s' + % (self.language, '\n '.join(failures))) + if type(text) == UnicodeType: + text = text.encode('raw_unicode_escape') + self.fail(text) + + def test_roles(self): + try: + module = docutils.parsers.rst.languages.get_language( + self.language) + if not module: + raise ImportError + module.roles + except ImportError: + self.fail('No docutils.parsers.rst.languages.%s module.' + % self.language) + except AttributeError: + self.fail('No "roles" mapping in docutils.parsers.rst.languages.' + '%s module.' % self.language) + failures = [] + for d in module.roles.values(): + try: + method = states.Inliner._interpreted_roles[d] + #if not method: + # failures.append('"%s": unknown role' % d) + except KeyError, error: + failures.append('"%s": %s' % (d, error)) + inverted = self._invert(module.roles) + canonical = states.Inliner._interpreted_roles.keys() + canonical.sort() + canonical.remove('restructuredtext-unimplemented-role') + for name in canonical: + if not inverted.has_key(name): failures.append('"%s": translation missing' % name) if failures: text = ('Module docutils.parsers.rst.languages.%s:\n %s' -- cgit v1.2.1 From 99c343235d810d956541cb362c0376c12f8def11 Mon Sep 17 00:00:00 2001 From: goodger Date: Fri, 16 Apr 2004 15:17:16 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@1945 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index cf9d75804..a0bda4929 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -19,7 +19,7 @@ import re from types import UnicodeType import docutils.languages import docutils.parsers.rst.languages -from docutils.parsers.rst import states, directives +from docutils.parsers.rst import states, directives, roles from DocutilsTestSupport import CustomTestSuite, CustomTestCase reference_language = 'en' @@ -165,13 +165,13 @@ class LanguageTestCase(CustomTestCase): failures = [] for d in module.roles.values(): try: - method = states.Inliner._interpreted_roles[d] + method = roles._roles[d] #if not method: # failures.append('"%s": unknown role' % d) except KeyError, error: failures.append('"%s": %s' % (d, error)) inverted = self._invert(module.roles) - canonical = states.Inliner._interpreted_roles.keys() + canonical = roles._roles.keys() canonical.sort() canonical.remove('restructuredtext-unimplemented-role') for name in canonical: -- cgit v1.2.1 From 5e999afe68b8cb15b47f0e866b7a6f9e1584d3c2 Mon Sep 17 00:00:00 2001 From: goodger Date: Fri, 16 Apr 2004 16:40:58 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@1949 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index a0bda4929..79509b46a 100644 --- a/test/test_language.py +++ b/test/test_language.py @@ -165,13 +165,13 @@ class LanguageTestCase(CustomTestCase): failures = [] for d in module.roles.values(): try: - method = roles._roles[d] + method = roles._role_registry[d] #if not method: # failures.append('"%s": unknown role' % d) except KeyError, error: failures.append('"%s": %s' % (d, error)) inverted = self._invert(module.roles) - canonical = roles._roles.keys() + canonical = roles._role_registry.keys() canonical.sort() canonical.remove('restructuredtext-unimplemented-role') for name in canonical: -- cgit v1.2.1 From 2a857c08d7ce28e3cd7b0f9731041fca0d15a254 Mon Sep 17 00:00:00 2001 From: wiemann Date: Tue, 22 Mar 2005 20:38:43 +0000 Subject: set executable bits on test files git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@3085 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 test/test_language.py (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py old mode 100644 new mode 100755 -- cgit v1.2.1 From 7e720ee65bc79a0430adb825f3deae4c93424959 Mon Sep 17 00:00:00 2001 From: goodger Date: Sat, 3 Dec 2005 02:13:12 +0000 Subject: corrected order of imports git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@4132 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- test/test_language.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'test/test_language.py') diff --git a/test/test_language.py b/test/test_language.py index 79509b46a..0571275e7 100755 --- a/test/test_language.py +++ b/test/test_language.py @@ -17,20 +17,21 @@ import sys import os import re from types import UnicodeType +import DocutilsTestSupport # must be imported before docutils import docutils.languages import docutils.parsers.rst.languages from docutils.parsers.rst import states, directives, roles -from DocutilsTestSupport import CustomTestSuite, CustomTestCase + reference_language = 'en' -class LanguageTestSuite(CustomTestSuite): +class LanguageTestSuite(DocutilsTestSupport.CustomTestSuite): language_module_pattern = re.compile('^([a-z]{2,3}(_[a-z]{2,8})*)\.py$') def __init__(self, languages=None): - CustomTestSuite.__init__(self) + DocutilsTestSupport.CustomTestSuite.__init__(self) if languages: self.languages = languages else: @@ -56,7 +57,7 @@ class LanguageTestSuite(CustomTestSuite): id=language+'.py', language=language) -class LanguageTestCase(CustomTestCase): +class LanguageTestCase(DocutilsTestSupport.CustomTestCase): test_methods = ['test_labels', 'test_bibliographic_fields', 'test_directives', 'test_roles'] @@ -66,7 +67,7 @@ class LanguageTestCase(CustomTestCase): self.ref = docutils.languages.get_language(reference_language) self.language = kwargs['language'] del kwargs['language'] # only wanted here - CustomTestCase.__init__(self, *args, **kwargs) + DocutilsTestSupport.CustomTestCase.__init__(self, *args, **kwargs) def _xor(self, ref_dict, l_dict): """ -- cgit v1.2.1