debian-workalendar/workalendar/tests/test_registry.py

138 lines
5.2 KiB
Python

from unittest import TestCase
from ..core import Calendar
from ..exceptions import ISORegistryError
from ..registry import IsoRegistry
class RegionCalendar(Calendar):
'Region'
class SubRegionCalendar(Calendar):
'Sub Region'
class NotACalendarClass:
"Not a Calendar"
class NonStandardRegistryTest(TestCase):
def setUp(self):
self.region = RegionCalendar
self.subregion = SubRegionCalendar
def test_region_registry(self):
registry = IsoRegistry(load_standard_modules=False)
self.assertEqual(0, len(registry.region_registry.items()))
registry.register('RE', self.region)
self.assertEqual(1, len(registry.region_registry.items()))
self.assertEqual(RegionCalendar, registry.region_registry['RE'])
def test_register_non_calendar(self):
registry = IsoRegistry(load_standard_modules=False)
with self.assertRaises(ISORegistryError):
registry.register("NAC", NotACalendarClass)
def test_get_calendar_class(self):
registry = IsoRegistry(load_standard_modules=False)
registry.register('RE', self.region)
registry.register('RE-SR', self.subregion)
calendar_class = registry.get_calendar_class('RE')
self.assertEqual(calendar_class, RegionCalendar)
# Subregion
calendar_class = registry.get_calendar_class('RE-SR')
self.assertEqual(calendar_class, SubRegionCalendar)
# Unknown code/region
self.assertIsNone(registry.get_calendar_class('XX'))
def test_get_subregions(self):
registry = IsoRegistry(load_standard_modules=False)
registry.register('RE', self.region)
registry.register('RE-SR', self.subregion)
registry.register('OR-SR', self.subregion)
subregions = registry.get_subregions('RE')
# Only one sub-region here
self.assertEqual(1, len(subregions))
self.assertIn('RE-SR', subregions)
def test_get_calendars(self):
registry = IsoRegistry(load_standard_modules=False)
registry.register('RE', self.region)
registry.register('RE-SR', self.subregion)
registry.register('OR-SR', self.subregion)
calendars = registry.get_calendars(['RE'], include_subregions=True)
self.assertEqual(2, len(calendars))
self.assertIn('RE', calendars)
self.assertIn('RE-SR', calendars)
calendars = registry.get_calendars(['RE'], include_subregions=False)
self.assertEqual(1, len(calendars))
self.assertIn('RE', calendars)
def test_get_calendars_unknown(self):
registry = IsoRegistry(load_standard_modules=False)
registry.register('RE', self.region)
calendars = registry.get_calendars(['XX'])
self.assertEqual(calendars, {})
def test_get_calendars_with_subregions(self):
registry = IsoRegistry(load_standard_modules=False)
registry.register('RE', self.region)
registry.register('RE2', self.region)
registry.register('RE-SR', self.subregion)
calendars = registry.get_calendars(
['RE2', "RE-SR"], include_subregions=True)
self.assertEqual(2, len(calendars))
self.assertIn('RE2', calendars)
self.assertIn('RE-SR', calendars)
calendars = registry.get_calendars(
['RE2', "RE-SR"], include_subregions=False)
self.assertEqual(2, len(calendars))
self.assertIn('RE2', calendars)
self.assertIn('RE-SR', calendars)
# Only a subregion
calendars = registry.get_calendars(["RE-SR"], include_subregions=True)
self.assertEqual(1, len(calendars))
self.assertIn('RE-SR', calendars)
def test_get_calendars_empty_arg(self):
registry = IsoRegistry(load_standard_modules=False)
# 3 regions, one sub-region
registry.register('RE', self.region)
registry.register('RE2', self.region)
registry.register('RE3', self.region)
registry.register('RE-SR', self.subregion)
# Empty arg, no subregions
calendars = registry.get_calendars([], include_subregions=False)
self.assertEqual(len(calendars), 3)
self.assertEqual(set({"RE", "RE2", "RE3"}), set(calendars.keys()))
# Empty arg, with subregions
calendars = registry.get_calendars([], include_subregions=True)
self.assertEqual(len(calendars), 4)
self.assertEqual(
set({"RE", "RE2", "RE3", "RE-SR"}),
set(calendars.keys())
)
def test_get_calendars_no_arg(self):
registry = IsoRegistry(load_standard_modules=False)
# 3 regions, one sub-region
registry.register('RE', self.region)
registry.register('RE2', self.region)
registry.register('RE3', self.region)
registry.register('RE-SR', self.subregion)
# Should be equivalent to [] + no subregions
calendars = registry.get_calendars()
self.assertEqual(len(calendars), 3)
self.assertEqual(set({"RE", "RE2", "RE3"}), set(calendars.keys()))
# Should be equivalent to [] + include subregions
calendars = registry.get_calendars(include_subregions=True)
self.assertEqual(len(calendars), 4)
self.assertEqual(
set({"RE", "RE2", "RE3", "RE-SR"}),
set(calendars.keys()))