# coding=utf-8 from unittest import TestCase from earthdiagnostics.datamanager import DataManager, Variable, UnitConversion from experimentmanager import ExperimentManager from datetime import date class TestDataManager(TestCase): def setUp(self): self.data_manager = DataManager(ExperimentManager(['20000101'], [0], 5, 3, 3), 'institution', 'model', 'expid', 'datafolder', 'mon', 'experiment', 'scratch', 6) 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')) 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(',')) 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()