diff --git a/check.py b/check.py index d2502014..8f143d26 100755 --- a/check.py +++ b/check.py @@ -7,6 +7,54 @@ try: except: from yaml import Loader +class XAvp: + """ Class to simulate the xavp """ + _data = [] + _name = "" + + def __init__(self, name, data): + result = re.match('\$xavp\((\w+)\)', name) + try: + self._name = result.group(1) + except: + raise Exception('not a xavp') + self._data = data + + def get(self, str): + pattern_nindx = '(\[(?P<%s>\d+)\])?' % 'nindx' + pattern_kindx = '(\[(?P<%s>\d+|\*+)\])?' % 'kindx' + pattern = '\$xavp\((?P\w+)%s=>(?P\w+)%s\)' % (pattern_nindx, pattern_kindx) + result = re.match(pattern, str) + if result is not None: + if self._name != result.group('name'): + raise KeyError( + 'diferent name. name:%s != %s' % (self._name, result.group(1)) + ) + try: + nindx = int(result.group('nindx')) + except: + nindx = 0 + if self._data[nindx].has_key(result.group('key')): + values = self._data[nindx][result.group('key')] + else: + raise KeyError('no %s key found' % result.group('key') ) + nsize = len(self._data) + if nsize <= nindx: + raise IndexError('%s has %d elements' % (self._name, nsize)) + try: + kindx = int(result.group('kindx')) + except: + if ( result.group('kindx') == '*' ): + return values + kindx = 0 + ksize = len(values) + if ksize <= kindx: + raise IndexError('%s has %d elements' % (result.group('key'), ksize)) + #print "name: %s nindx:%d key: %s kindx: %d" % (result.group('name'), nindx, result.group('key'), kindx) + return values[kindx] + else: + raise KeyError('no key found') + class Test: """ Class to create TAP output """ _step = [] diff --git a/test_check.py b/test_check.py new file mode 100644 index 00000000..9cc1f6f1 --- /dev/null +++ b/test_check.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +from check import XAvp +import unittest + +class TestXAvp(unittest.TestCase): + + def setUp(self): + self.name = 'test' + self.data = [ + {'koko': [1]}, + {'koko': [1, 2]}, + {'lolo': [3], 'lola': [7]}, + ] + self.xavp = XAvp('$xavp(%s)' % self.name, self.data) + + def test_init(self): + self.assertEqual(self.name, self.xavp._name) + self.assertItemsEqual(self.data, self.xavp._data) + + def test_init_wrong_type(self): + self.assertRaises(Exception, self.xavp, '$var(whatever)', None) + + def test_get_wrong_name(self): + self.assertRaises(KeyError, self.xavp.get, '$xavp(otro)') + self.assertRaises(KeyError, self.xavp.get, '$xavp(otro[0])') + self.assertRaises(KeyError, self.xavp.get, '$xavp(otro=>whatever)') + self.assertRaises(KeyError, self.xavp.get, '$xavp(otro[0]=>whatever)') + + def test_get_wrong_nindx(self): + self.assertRaises(IndexError, self.xavp.get, '$xavp(test[10]=>koko)') + self.assertRaises(IndexError, self.xavp.get, '$xavp(test[10]=>koko[1])') + + def test_get_wrong_kindx(self): + self.assertRaises(IndexError, self.xavp.get, '$xavp(test[0]=>koko[1])') + self.assertRaises(IndexError, self.xavp.get, '$xavp(test[1]=>koko[10])') + + def test_get_value(self): + self.assertEqual(self.xavp.get('$xavp(test=>koko)'), 1) + self.assertEqual(self.xavp.get('$xavp(test[1]=>koko[1])'), 2) + self.assertEqual(self.xavp.get('$xavp(test[2]=>lola[0])'), 7) + + def test_get_value_all(self): + self.assertItemsEqual(self.xavp.get('$xavp(test[1]=>koko[*])'), [1,2]) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file