138 lines
5.2 KiB
Python
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()))
|