summaryrefslogtreecommitdiff
path: root/test/test_language.py
diff options
context:
space:
mode:
authorgoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2002-11-13 01:12:56 +0000
committergoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2002-11-13 01:12:56 +0000
commita0f916a1930053ea86d1740195a397728fd9f9c3 (patch)
treea81a8808534a52ffdeb97d18bab6578803234b25 /test/test_language.py
parentd6b7443c22b9595fef827fdddb96bda3df8fad03 (diff)
downloaddocutils-a0f916a1930053ea86d1740195a397728fd9f9c3.tar.gz
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
Diffstat (limited to 'test/test_language.py')
-rw-r--r--test/test_language.py105
1 files changed, 105 insertions, 0 deletions
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 :
+