Ejemplo n.º 1
0
def test_relationship_descriptor_many_to_many():
    class User:
        pass
    class Group:
        pass
    Group_users = many_relationship_descriptor('users', User)
    User_groups = many_relationship_descriptor('groups', Group)
    Group_users.initialize(User_groups)
    User_groups.initialize(Group_users)
    Group.users = Group_users
    User.groups = User_groups 
    
    groups = [Group() for i in range(10)]
    users = [User() for i in range(10)]
    
    from random import choice
    
    def check_group_invariant(group):
        for user in group.users:
            assert group in user.groups
    
    for i in range(1000):
        choice(users).groups.add(choice(groups))
        choice(groups).users.discard(choice(users))
        
        for g in groups:
            check_group_invariant(g)
Ejemplo n.º 2
0
def test_relationship_descriptor_many_to_many():
    class User:
        pass

    class Group:
        pass

    Group_users = many_relationship_descriptor('users', User)
    User_groups = many_relationship_descriptor('groups', Group)
    Group_users.initialize(User_groups)
    User_groups.initialize(Group_users)
    Group.users = Group_users
    User.groups = User_groups

    groups = [Group() for i in range(10)]
    users = [User() for i in range(10)]

    from random import choice

    def check_group_invariant(group):
        for user in group.users:
            assert group in user.groups

    for i in range(1000):
        choice(users).groups.add(choice(groups))
        choice(groups).users.discard(choice(users))

        for g in groups:
            check_group_invariant(g)
Ejemplo n.º 3
0
def test_relationship_descriptor_one_to_many():
    class Entry:
        def __init__(self,name):
            self.name = name
        def __repr__(self):
            if self.parent:
                return repr(self.parent)+"/"+self.name
            else:
                return self.name
    class Directory(Entry):
        pass
    class File(Entry):
        pass
    
    Entry.parent = one_relationship_descriptor('parent', Directory)
    Directory.contents = many_relationship_descriptor('contents', Entry)
    Entry.parent.initialize(Directory.contents)
    Directory.contents.initialize(Entry.parent)
    
    root = Directory("")
    etc = Directory("etc")
    usr = Directory("usr")
    mnt = Directory("mnt")
    var = Directory("var")
    root.contents.add(etc)
    root.contents.add(usr)
    root.contents.add(mnt)
    root.contents.add(var)

    root.contents = []
    assert len(root.contents)==0
    root.contents = [mnt,var]
    assert len(root.contents)==2
    root.contents.add(etc)
    root.contents.add(usr) 
    assert len(root.contents)==4

    assert etc.parent == usr.parent == mnt.parent == var.parent == root

    pwd = File("pwd")
    pwd.parent=etc
    bin, lib, man = Directory("bin"), Directory("lib"), Directory("man")
    bin.parent = man.parent = lib.parent = usr
    assert usr.contents == set([bin, man, lib])
    
    var.contents.add(lib)
    assert lib.parent == var
    assert lib in var.contents
    assert lib not in usr.contents
    
    etc.contents.add(File("f1"))
    etc.contents.add(File("f2"))
    etc.contents.add(File("f3"))

    with pytest.raises(TypeError):
        etc.contents.add(15)
    with pytest.raises(ValueError):
        etc.contents.add(None)
    with pytest.raises(TypeError):
        etc.contents.add("adsada")
    with pytest.raises(KeyError):
        etc.contents.remove(15)
    etc.contents.discard(14)
Ejemplo n.º 4
0
def test_relationship_descriptor_one_to_many():
    class Entry:
        def __init__(self, name):
            self.name = name

        def __repr__(self):
            if self.parent:
                return repr(self.parent) + "/" + self.name
            else:
                return self.name

    class Directory(Entry):
        pass

    class File(Entry):
        pass

    Entry.parent = one_relationship_descriptor('parent', Directory)
    Directory.contents = many_relationship_descriptor('contents', Entry)
    Entry.parent.initialize(Directory.contents)
    Directory.contents.initialize(Entry.parent)

    root = Directory("")
    etc = Directory("etc")
    usr = Directory("usr")
    mnt = Directory("mnt")
    var = Directory("var")
    root.contents.add(etc)
    root.contents.add(usr)
    root.contents.add(mnt)
    root.contents.add(var)

    root.contents = []
    assert len(root.contents) == 0
    root.contents = [mnt, var]
    assert len(root.contents) == 2
    root.contents.add(etc)
    root.contents.add(usr)
    assert len(root.contents) == 4

    assert etc.parent == usr.parent == mnt.parent == var.parent == root

    pwd = File("pwd")
    pwd.parent = etc
    bin, lib, man = Directory("bin"), Directory("lib"), Directory("man")
    bin.parent = man.parent = lib.parent = usr
    assert usr.contents == set([bin, man, lib])

    var.contents.add(lib)
    assert lib.parent == var
    assert lib in var.contents
    assert lib not in usr.contents

    etc.contents.add(File("f1"))
    etc.contents.add(File("f2"))
    etc.contents.add(File("f3"))

    with pytest.raises(TypeError):
        etc.contents.add(15)
    with pytest.raises(ValueError):
        etc.contents.add(None)
    with pytest.raises(TypeError):
        etc.contents.add("adsada")
    with pytest.raises(KeyError):
        etc.contents.remove(15)
    etc.contents.discard(14)