test_data_manager.py 3.97 KB
Newer Older
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
# coding=utf-8


from unittest import TestCase
from earthdiagnostics.datamanager import DataManager, Variable, UnitConversion
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
from experimentmanager import ExperimentManager
from datetime import date
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed


class TestDataManager(TestCase):
    def setUp(self):
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.data_manager = DataManager(ExperimentManager(['20000101'], [0], 5, 3, 3), 'institution', 'model', 'expid',
                                        'datafolder', 'mon', 'experiment', 'scratch', 6)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed

    def test_domain_abbreviation(self):
        self.assertEquals('Omon', DataManager.domain_abbreviation('Ocean', 'mon'))
        self.assertEquals('OImon', DataManager.domain_abbreviation('seaIce', 'mon'))
        self.assertEquals('LImon', DataManager.domain_abbreviation('landIce', 'mon'))
        self.assertEquals('Amon', DataManager.domain_abbreviation('atmos', 'mon'))
        self.assertEquals('day', DataManager.domain_abbreviation('atmos', 'day'))
        self.assertEquals('6hrPlev', DataManager.domain_abbreviation('atmos', '6hr'))
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed

    def test_get_grib_filename(self):
        self.assertEqual(self.data_manager._get_grib_filename('SH', date(2000, 1, 1)), 'ICMSHexpid+200001.grb')

    def test_get_startdate_path(self):
        self.assertEqual(self.data_manager.get_startdate_path('20000101'),
                         'datafolder/expid/cmorfiles/institution/model/experiment/S20000101')


class TestVariable(TestCase):

    def test__init__(self):
        variable = Variable('alias:alias2,name,standard_name,long_name,domain,basin,units,'
                            'valid_min,valid_max'.split(','))
        self.assertEqual(variable.short_name, 'name')
        self.assertEqual(variable.standard_name, 'standard_name')
        self.assertEqual(variable.long_name, 'long_name')
        self.assertEqual(variable.domain, 'domain')
        self.assertEqual(variable.basin, None)
        self.assertEqual(variable.units, 'units')
        self.assertEqual(variable.valid_min, 'valid_min')
        self.assertEqual(variable.valid_max, 'valid_max')

    def test_get_variable(self):
        Variable._dict_variables = dict()
        variable = Variable('alias:alias2,name,standard_name,long_name,domain,basin,units,valid_min,'
                            'valid_max'.split(','))
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        Variable._dict_variables['var'] = variable
        self.assertIs(Variable.get_variable('var'), variable)
        self.assertIsNone(Variable.get_variable('novar'))


class TestConversion(TestCase):

    def test__init(self):
        conversion = UnitConversion('km', 'm', 1000, 0)
        self.assertEqual(conversion.source, 'km')
        self.assertEqual(conversion.destiny, 'm')
        self.assertEqual(conversion.factor, 1000)
        self.assertEqual(conversion.offset, 0)

    def test_add_conversion(self):
        UnitConversion._dict_conversions = dict()
        conversion = UnitConversion('km', 'm', 1000, 0)
        UnitConversion.add_conversion(conversion)
        self.assertIs(UnitConversion._dict_conversions[('km', 'm')], conversion)
        UnitConversion._dict_conversions = dict()

    def test_get_factor_offset(self):
        UnitConversion._dict_conversions = dict()
        conversion = UnitConversion('km', 'm', 1000, 0)
        UnitConversion.add_conversion(conversion)
        self.assertEqual(UnitConversion.get_conversion_factor_offset('km', 'm'), (1000, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('m', 'km'), (1 / 1000.0, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('1e3 m', 'km'), (1, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('10^3 m', 'km'), (1, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('km', '1e3 m'), (1, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('km', '10^3 m'), (1, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('m', 'm'), (1, 0))
        self.assertEqual(UnitConversion.get_conversion_factor_offset('m²', 'km'), (None, None))

        UnitConversion._dict_conversions = dict()