##############################################################################
#
# Copyright (c) 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTLAR PURPOSE.
#
##############################################################################
"""Testing all XML Locale functionality.

$Id: test_xmlfactory.py 30749 2005-06-10 23:56:17Z philikon $
"""
import os
from unittest import TestCase, TestSuite, makeSuite, main

from zope.i18n.locales.xmlfactory import LocaleFactory
from zope.i18n.format import parseDateTimePattern, parseNumberPattern
import zope.i18n

class LocaleXMLFileTestCase(TestCase):
    """This test verifies that every locale XML file can be loaded."""

    # only run when running tests of level 2
    level = 2

    def __init__(self, path):
        self.__path = path
        TestCase.__init__(self)
        
    def runTest(self):
        # Loading Locale object 
        locale = LocaleFactory(self.__path)()

        # Making sure all number format patterns parse
        for category in (u'decimal', u'scientific', u'percent', u'currency'):
            for length in getattr(locale.numbers, category+'Formats').values():
                for format in length.formats.values():
                    self.assert_(parseNumberPattern(format.pattern) is not None)

        # Making sure all datetime patterns parse
        for calendar in locale.dates.calendars.values():
            for category in ('date', 'time', 'dateTime'):
                for length in getattr(calendar, category+'Formats').values():
                    for format in length.formats.values():
                        self.assert_(
                            parseDateTimePattern(format.pattern) is not None)
                
                    

def test_suite():
   suite = TestSuite()
   locale_dir = os.path.join(os.path.dirname(zope.i18n.__file__),
                             'locales', 'data')
   for path in os.listdir(locale_dir):
       if not path.endswith(".xml"):
           continue
       path = os.path.join(locale_dir, path)
       case = LocaleXMLFileTestCase(path)
       suite.addTest(case)
   return suite

if __name__ == '__main__':
    main(defaultTest='test_suite')
