source: qesdi/graphplotter/trunk/graphplotter/tests/unit/test_data_reader.py @ 6311

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/qesdi/graphplotter/trunk/graphplotter/tests/unit/test_data_reader.py@6311
Revision 6311, 3.2 KB checked in by pnorton, 10 years ago (diff)

First version of graphplotter.

Line 
1'''
2Created on 14 Jan 2010
3
4@author: pnorton
5'''
6
7from graphplotter.lib.data_reader import DataReader
8from mock import patch, Mock
9
10class TestDataReader(object):
11   
12    def setUp(self):
13       
14        self.file = '/path/to/data/file.nc'
15        self.variable = 'variable'
16        self.axis = 'axisA'
17        self.selection = {'axisB':'apple', 'axisC':'orange', 'axisD':40}
18        self.axisLookup = {'axisB':'axisB_var', 'axisC':'axisC_var'}
19       
20        self.reader  = DataReader(self.file, self.variable, self.axis, self.selection, self.axisLookup)
21   
22   
23    def _buildMockVariable(self):
24        mockVariable = Mock()
25       
26        # create a list of mock axis like object to return from the getAxisList method
27        mockAxisList = []
28        for id in  ['axisA', 'axisB', 'axisC', 'axisD']:
29            mockAxis = Mock()
30            mockAxis.id = id
31            mockAxisList.append(mockAxis)
32                 
33        mockVariable.getAxisList.return_value = mockAxisList
34       
35        # set the code so that getAxis returns some data
36        mockVariable.getAxis.return_value = [1,2,3,4,5]
37       
38        return mockVariable
39   
40    def _setMockFHSideEffect(self, mockFH, mockVariable):
41       
42        def fhCalled(name):
43            if name == self.variable:
44                return mockVariable
45            elif name == 'axisB_var':
46                return ['apple', 'pear','bannana']
47            elif name == 'axisC_var':
48                return ['red','orange','yellow']
49           
50        mockFH.side_effect = fhCalled       
51   
52    @patch('graphplotter.lib.data_reader.cdms', spec=True)
53    def test_001_readsTheXYDataCorrectly(self, mockCDMS):
54       
55        mockFH = mockCDMS.open.return_value
56       
57        mockVariable = self._buildMockVariable()
58       
59        self._setMockFHSideEffect(mockFH, mockVariable)
60               
61        xdata, ydata = self.reader.getData()
62   
63        #opens the file
64        assert mockCDMS.open.called
65        assert mockCDMS.open.call_args == ( (self.file,), {})
66       
67        # getAxisIndex called with the right axis
68        assert mockVariable.getAxisIndex.called
69        assert mockVariable.getAxisIndex.call_args == ( (self.axis,), {})
70       
71        #getAxis called with the index
72        assert mockVariable.getAxis.called
73        assert mockVariable.getAxis.call_args == ( (mockVariable.getAxisIndex.return_value,) , {})
74       
75        #builds the selection keywords
76        assert xdata == mockVariable.getAxis.return_value
77        assert ydata == mockVariable.return_value
78   
79    @patch('graphplotter.lib.data_reader.cdms', spec=True)
80    def test_002_selectsDataCorrectly(self, mockCDMS):
81       
82        # checks that the correct selection arguments are passed into
83        # the variable to retrieve the desired ydata
84       
85        mockFH = mockCDMS.open.return_value
86       
87        mockVariable = self._buildMockVariable()
88       
89        self._setMockFHSideEffect(mockFH, mockVariable)
90       
91        xdata, ydata = self.reader.getData()
92       
93        assert xdata == mockVariable.getAxis.return_value
94        assert ydata == mockVariable.return_value
95       
96        assert mockVariable.call_args == ((), {'axisB': 0, 'axisC': 1, 'axisD':40, 'squeeze':1})
97       
Note: See TracBrowser for help on using the repository browser.