Changeset 1079

Show
Ignore:
Timestamp:
09/16/07 01:18:16 (14 months ago)
Author:
wichert
Message:

Update class method mocking code to deal correctly with mocking in bass and parent classes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pyrad/tests/mock.py

    r1076 r1079  
    105105 
    106106 
     107def origkey(klass): 
     108    return "_originals_" + klass.__name__ 
     109 
     110 
    107111def MockClassMethod(klass, name, myfunc=None): 
    108112    def func(self, *args, **kwargs): 
     
    111115        self.called.append((name, args, kwargs)) 
    112116 
    113     if not hasattr(klass, "_originals"): 
    114         klass._originals={} 
    115     klass._originals[name]=getattr(klass, name) 
     117    key=origkey(klass) 
     118    if not hasattr(klass, key): 
     119        setattr(klass, key, {}) 
     120    getattr(klass, key)[name]=getattr(klass, name) 
    116121    if myfunc is None: 
    117122        setattr(klass, name, func) 
     
    121126 
    122127def UnmockClassMethods(klass): 
    123     if not hasattr(klass, "_originals"): 
     128    key=origkey(klass) 
     129    if not hasattr(klass, key): 
    124130        return 
    125     for (name, func) in klass._originals.items(): 
     131    for (name, func) in getattr(klass, key).items(): 
    126132        setattr(klass, name, func) 
    127     del klass._originals 
    128133 
     134    delattr(klass, key) 
     135 
     136 
     137class MockFd: 
     138    data = object() 
     139    source = object() 
     140 
     141    def __init__(self, fd=0): 
     142        self.fd=fd 
     143 
     144    def fileno(self): 
     145        return self.fd 
     146 
     147    def recvfrom(self, size): 
     148        self.size=size 
     149        return (self.data, self.source) 
     150 
     151 
     152