# coding=utf-8 from unittest import TestCase from earthdiagnostics.diagnostic import DiagnosticVariableOption, DiagnosticOptionError from earthdiagnostics.box import Box from earthdiagnostics.general.verticalmeanmetersiris import VerticalMeanMetersIris from earthdiagnostics.frequency import Frequencies from mock import Mock, patch from earthdiagnostics.modelingrealm import ModelingRealms class TestVerticalMeanMetersIris(TestCase): def setUp(self): self.data_manager = Mock() self.diags = Mock() self.diags.config.experiment.get_chunk_list.return_value = (('20010101', 0, 0), ('20010101', 0, 1)) self.diags.config.experiment.startdates = ['20010101', ] self.diags.config.frequency = Frequencies.monthly self.box = Box() self.box.min_depth = 0 self.box.max_depth = 100 def fake_parse(self, value): if not value: raise DiagnosticOptionError return value @patch.object(DiagnosticVariableOption, 'parse', fake_parse) def test_generate_jobs(self): box = Box(True) jobs = VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', box)) self.assertEqual(jobs[1], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', box)) box = Box(True) box.min_depth = 0 box.max_depth = 100 jobs = VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', box)) self.assertEqual(jobs[1], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', box)) jobs = VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100', 'seaIce']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0, ModelingRealms.seaIce, 'var', box)) self.assertEqual(jobs[1], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 1, ModelingRealms.seaIce, 'var', box)) with self.assertRaises(DiagnosticOptionError): VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(DiagnosticOptionError): VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100', 'seaIce', 'extra']) def test_str(self): box = Box(True) box.min_depth = 0 box.max_depth = 100 mixed = VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var', box) self.assertEquals(str(mixed), 'Vertical mean meters Startdate: 20010101 Member: 0 Chunk: 0 Variable: atmos:var ' 'Box: 0-100m')