#!/usr/bin/env python # vim: sts=4 sw=4 ts=8 si et import unittest from intrange import makefilter, ExpressionError class TestCase_intrange(unittest.TestCase): pool = range(1, 10+1) intrange_data = ( ('>0', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), ('>1', [ 2, 3, 4, 5, 6, 7, 8, 9, 10]), ('<1', []), ('>1 and <5', [ 2, 3, 4]), ('>1&&<5', [ 2, 3, 4]), ('>1||<5', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), ('>1 or <5', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), # closed intervals: ('[2..4]', [ 2, 3, 4]), ('[ 2 .. 4 ]', [ 2, 3, 4]), ('[ 2 - 4 ]', [ 2, 3, 4]), # open intervals: (']1..5[', [ 2, 3, 4]), ('(1..5)', [ 2, 3, 4]), ) def test_knownValues(self): """ known expressions yield known filter results """ for s, res in self.intrange_data: f = makefilter(s) self.assertEqual(filter(f, self.pool), res) def test_emptyExpression(self): """ empty string (whitespace only) filters true """ f = makefilter(' ') self.assertEqual(filter(f, self.pool), self.pool) invalid_data = ( # doubled token types '> >1', '<8 and or >1', # invalid operators '><', '=>=', '===', # incomplete '>', 'x>', '5', ) def test_invalidExpressions(self): for s in self.invalid_data: self.assertRaises(ExpressionError, makefilter, s) if __name__ == '__main__': unittest.main()