def test_Get(self): 'Test pyson.Get' self.assertEqual( pyson.Get({ 'foo': 'bar' }, 'foo', 'default').pyson(), { '__class__': 'Get', 'v': { 'foo': 'bar' }, 'k': 'foo', 'd': 'default', }) self.assertRaises(AssertionError, pyson.Get, 'test', 'foo', 'default') self.assertRaises(AssertionError, pyson.Get, {}, 1, 'default') self.assertEqual( pyson.Get({}, 'foo', 'default').types(), set([basestring])) self.assertEqual(pyson.Get({}, 'foo', True).types(), set([bool])) eval = pyson.PYSONEncoder().encode( pyson.Get({'foo': 'bar'}, 'foo', 'default')) self.assertEqual(pyson.PYSONDecoder().decode(eval), 'bar') eval = pyson.PYSONEncoder().encode( pyson.Get({'foo': 'bar'}, 'test', 'default')) self.assertEqual(pyson.PYSONDecoder().decode(eval), 'default') eval = pyson.PYSONEncoder().encode(pyson.Get({}, 'foo', 'default')) self.assertEqual(pyson.PYSONDecoder().decode(eval), 'default') self.assertEqual(repr(pyson.Get({'foo': 'bar'}, 'foo', 'default')), "Get({'foo': 'bar'}, 'foo', 'default')")
def test_Composite(self): 'Test Composite' expr = pyson.If(pyson.Not( pyson.In('company', pyson.Eval('context', {}))), '=', '!=') eval = pyson.PYSONEncoder().encode(['id', expr, pyson.Get(pyson.Eval('context', {}), 'company', -1)]) self.assertEqual(pyson.PYSONDecoder({'context': {'company': 1}} ).decode(eval), ['id', '!=', 1]) self.assertEqual(pyson.PYSONDecoder({'context': {}} ).decode(eval), ['id', '=', -1]) self.assertEqual(repr(expr), "If(Not(In('company', Eval('context', {}))), '=', '!=')")
def test_noeval(self): decoder = pyson.PYSONDecoder(noeval=True) encoder = pyson.PYSONEncoder() for instance in [ pyson.Eval('test', 0), pyson.Not(True), pyson.Bool('test'), pyson.And(True, False, True), pyson.Or(False, True, True), pyson.Equal('foo', 'bar'), pyson.Greater(1, 0), pyson.Less(0, 1), pyson.If(True, 'foo', 'bar'), pyson.Get({'foo': 'bar'}, 'foo', 'default'), pyson.In('foo', ['foo', 'bar']), pyson.Date(), pyson.DateTime(), pyson.Len([1, 2, 3]), ]: self.assertEqual(decoder.decode(encoder.encode(instance)).pyson(), instance.pyson())