File: test_boundattributes.py

package info (click to toggle)
sqlobject 3.1.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 9,280 kB
  • ctags: 17,912
  • sloc: python: 16,713; sh: 18; makefile: 13
file content (65 lines) | stat: -rw-r--r-- 1,588 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import py.test

from sqlobject import boundattributes
from sqlobject import declarative

pytestmark = py.test.mark.skipif('True')


class TestMe(object):
    pass


class AttrReplace(boundattributes.BoundAttribute):

    __unpackargs__ = ('replace',)

    replace = None

    @declarative.classinstancemethod
    def make_object(self, cls, added_class, attr_name, **attrs):
        if not self:
            return cls.singleton().make_object(
                added_class, attr_name, **attrs)
        self.replace.added_class = added_class
        self.replace.name = attr_name
        assert attrs['replace'] is self.replace
        del attrs['replace']
        self.replace.attrs = attrs
        return self.replace


class Holder:
    def __init__(self, name):
        self.holder_name = name

    def __repr__(self):
        return '<Holder %s>' % self.holder_name


def test_1():
    v1 = Holder('v1')
    v2 = Holder('v2')
    v3 = Holder('v3')

    class V2Class(AttrReplace):
        arg1 = 'nothing'
        arg2 = ['something']

    class A1(TestMe):
        a = AttrReplace(v1)
        v = V2Class(v2)

        class inline(AttrReplace):
            replace = v3
            arg3 = 'again'
            arg4 = 'so there'
    for n in ('a', 'v', 'inline'):
        assert getattr(A1, n).name == n
        assert getattr(A1, n).added_class is A1
    assert A1.a is v1
    assert A1.a.attrs == {}
    assert A1.v is v2
    assert A1.v.attrs == {'arg1': 'nothing', 'arg2': ['something']}
    assert A1.inline is v3
    assert A1.inline.attrs == {'arg3': 'again', 'arg4': 'so there'}