Exemple #1
0
    def test_In(self):
        'Test pyson.In'
        self.assertEqual(
            pyson.In('foo', {
                'foo': 'bar'
            }).pyson(), {
                '__class__': 'In',
                'k': 'foo',
                'v': {
                    'foo': 'bar'
                },
            })

        if not sys.flags.optimize:
            self.assertRaises(AssertionError, pyson.In, object(), {})
            self.assertRaises(AssertionError, pyson.In, 'test', 'foo')

        self.assertEqual(pyson.In('foo', {}).types(), set([bool]))

        eval = pyson.PYSONEncoder().encode(pyson.In('foo', {'foo': 'bar'}))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(
            pyson.In(pyson.Eval('test', 'foo'), {'foo': 'bar'}))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('1', {1: 'bar'}))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('test', {'foo': 'bar'}))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(
            pyson.In(pyson.Eval('foo', 'test'), {'foo': 'bar'}))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('1', {2: 'bar'}))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('test', {}))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('foo', ['foo']))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In(1, [1]))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('test', ['foo']))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In(1, [2]))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.In('test', []))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        self.assertEqual(repr(pyson.In('foo', ['foo', 'bar'])),
                         "In('foo', ['foo', 'bar'])")
Exemple #2
0
    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', {}))), '=', '!=')")
Exemple #3
0
    def test_Eval_dot_notation_nested(self):
        'Test pyson.Eval with dot notation with nested dots'

        eval = pyson.PYSONEncoder().encode(pyson.Eval('foo.bar.test', 0))

        for ctx, result in [
            ({
                'foo': {
                    'bar': {
                        'test': 1
                    }
                }
            }, 1),
            ({
                'foo': {
                    'foo': 1
                }
            }, 0),
            ({
                'bar': {
                    'bar': 1
                }
            }, 0),
            ({}, 0),
        ]:
            self.assertEqual(pyson.PYSONDecoder(ctx).decode(eval), result)
Exemple #4
0
    def test_Date_start(self):
        "Test Date with start"
        eval = pyson.PYSONEncoder().encode(
            pyson.Date(start=pyson.Eval('date')))

        date = datetime.date(2000, 1, 1)
        self.assertEqual(pyson.PYSONDecoder({'date': date}).decode(eval), date)
Exemple #5
0
    def test_Greater(self):
        'Test pyson.Greater'
        self.assertEqual(
            pyson.Greater(1, 0).pyson(), {
                '__class__': 'Greater',
                's1': 1,
                's2': 0,
                'e': False,
            })

        if not sys.flags.optimize:
            self.assertRaises(AssertionError, pyson.Greater, 'test', 0)
            self.assertRaises(AssertionError, pyson.Greater, 1, 'test')
            self.assertRaises(AssertionError, pyson.Greater, pyson.Eval('foo'),
                              0)

        self.assertEqual(pyson.Greater(1, 0).types(), set([bool]))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 0))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(0, 1))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 0, True))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(0, 1, True))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 1))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(1, 1, True))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(None, 1))
        self.assertFalse(pyson.PYSONDecoder().decode(eval))

        eval = pyson.PYSONEncoder().encode(pyson.Greater(1, None))
        self.assertTrue(pyson.PYSONDecoder().decode(eval))

        self.assertEqual(repr(pyson.Greater(1, 0)), 'Greater(1, 0, False)')

        eval = pyson.PYSONEncoder().encode(pyson.Greater(
            pyson.Eval('i', 0), 0))
        self.assertTrue(pyson.PYSONDecoder({'i': 1}).decode(eval))
Exemple #6
0
    def test_Date_start_invalid(self):
        "Test Date with invalid start"
        eval = pyson.PYSONEncoder().encode(pyson.Date(start=pyson.Eval('foo')))

        self.assertEqual(
            pyson.PYSONDecoder({
                'foo': 'bar'
            }).decode(eval), datetime.date.today())
Exemple #7
0
    def test_DateTime_start_invalid(self):
        "Test DateTime with invalid start"
        eval = pyson.PYSONEncoder().encode(
            pyson.DateTime(start=pyson.Eval('foo')))

        self.assertIsInstance(
            pyson.PYSONDecoder({
                'foo': 'bar'
            }).decode(eval), datetime.datetime)
Exemple #8
0
    def test_Date_start_datetime(self):
        "Test Date with start as datetime"
        eval = pyson.PYSONEncoder().encode(
            pyson.Date(start=pyson.Eval('datetime')))

        datetime_ = datetime.datetime(2000, 1, 1, 12, 00)
        self.assertEqual(
            pyson.PYSONDecoder({
                'datetime': datetime_
            }).decode(eval), datetime_.date())
Exemple #9
0
    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())
Exemple #10
0
    def test0010Eval(self):
        'Test pyson.Eval'
        self.assertEqual(
            pyson.Eval('test').pyson(), {
                '__class__': 'Eval',
                'v': 'test',
                'd': '',
            })
        self.assertEqual(
            pyson.Eval('test', 'foo').pyson(), {
                '__class__': 'Eval',
                'v': 'test',
                'd': 'foo',
            })

        self.assertEqual(pyson.Eval('test', 'foo').types(), set([basestring]))
        self.assertEqual(pyson.Eval('test', 1).types(), set([int]))

        eval = pyson.PYSONEncoder().encode(pyson.Eval('test', 0))
        self.assertEqual(pyson.PYSONDecoder({'test': 1}).decode(eval), 1)
        self.assertEqual(pyson.PYSONDecoder().decode(eval), 0)

        self.assertEqual(repr(pyson.Eval('test', 'foo')),
                         "Eval('test', 'foo')")
Exemple #11
0
    def test_Eval(self):
        'Test pyson.Eval'
        self.assertEqual(
            pyson.Eval('test').pyson(), {
                '__class__': 'Eval',
                'v': 'test',
                'd': '',
            })
        self.assertEqual(
            pyson.Eval('test', 'foo').pyson(), {
                '__class__': 'Eval',
                'v': 'test',
                'd': 'foo',
            })

        self.assertEqual(pyson.Eval('test', 'foo').types(), set([basestring]))
        self.assertEqual(pyson.Eval('test', 1).types(), set([int]))

        eval = pyson.PYSONEncoder().encode(pyson.Eval('test', 0))
        self.assertEqual(pyson.PYSONDecoder({'test': 1}).decode(eval), 1)
        self.assertEqual(pyson.PYSONDecoder().decode(eval), 0)

        self.assertEqual(repr(pyson.Eval('test', 'foo')),
                         "Eval('test', 'foo')")

        self.assertIsInstance(~pyson.Eval('test', False), pyson.Not)
        self.assertIsInstance(pyson.Eval('test', False) & True, pyson.And)
        self.assertIsInstance(True & pyson.Eval('test', False), pyson.And)
        self.assertIsInstance(pyson.Eval('test', False) | False, pyson.Or)
        self.assertIsInstance(False | pyson.Eval('test', False), pyson.Or)