3
d                 @   s~   d dl mZ d dlmZ d dlmZ d dlmZ ej Z	dd Z
dd Zd	d
 ZG dd dZG dd dZG dd dZdS )    )mock)add_or_remove_notifiers)ObserverGraph)NotifierNotFoundc             C   s   | | d S )N )handlereventr   r   =/tmp/pip-build-7vycvbft/traits/traits/observation/_testing.pydispatch_same   s    r
   c              G   sD   | d }t |d}x,| dd ddd D ]}t ||gd}q*W |S )z Create an ObserverGraph with the given nodes joined one after another.

    Parameters
    ----------
    *nodes : hashable
        Items to be attached as nodes

    Returns
    -------
    ObserverGraph
       )nodeN)r   childrenr   r   )r   )Znodesr   graphr   r   r	   create_graph   s
    
r   c              K   s:   t tj tddtj ttdd}|j|  tf | dS )z Convenience function for calling add_or_remove_notifiers with default
    values.

    Parameters
    ----------
    **kwargs
        New argument values to use instead.
    N)r   F)objectr   r   target
dispatcherremove)dictr   Mockr   _DEFAULT_TARGETr
   updater   )kwargsvaluesr   r   r	   call_add_or_remove_notifiers-   s    	
r   c               @   s    e Zd ZdZdd Zdd ZdS )DummyObservablez< A dummy implementation of IObservable for testing purposes.c             C   s
   g | _ d S )N)	notifiers)selfr   r   r	   __init__E   s    zDummyObservable.__init__c             C   s   | j S )N)r   )r   Zforce_creater   r   r	   
_notifiersH   s    zDummyObservable._notifiersN)__name__
__module____qualname____doc__r   r    r   r   r   r	   r   B   s   r   c               @   s    e Zd ZdZdd Zdd ZdS )DummyNotifierz: A dummy implementation of INotifier for testing purposes.c             C   s   |j dj|  d S )NT)r    append)r   
observabler   r   r	   add_toO   s    zDummyNotifier.add_toc             C   s:   |j d}y|j|  W n tk
r4   tdY nX d S )NTzNotifier not found.)r    r   
ValueErrorr   )r   r'   r   r   r   r	   remove_fromR   s
    
zDummyNotifier.remove_fromN)r!   r"   r#   r$   r(   r*   r   r   r   r	   r%   L   s   r%   c               @   s^   e Zd ZdZdf f ddf fddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )DummyObserveraC   A dummy implementation of IObserver for testing purposes.

    Parameters
    ----------
    notify : boolean, optional
        The mocked return value from IObserver.notify
    observables : iterable of IObservable, optional
        The mocked yielded values from IObserver.iter_observables
    next_objects : iterable of object, optional
        The mocked yielded values from IObserver.iter_objects
    notifier : INotifier, optional
        The mocked returned value from IObserver.get_notifier
        If not provided, a dummy notifier is created.
    maintainer : INotifier, optional
        The mocked returned value from IObserver.get_maintainer
        if not provided, a dummy notifier is created.
    extra_graphs : iterable of ObserverGraph, optional
        The mocked yielded values from IObserver.iter_extra_graphs
    TNc             C   sD   |d krt  }|d krt  }|| _|| _|| _|| _|| _|| _d S )N)r%   notifyobservablesnext_objectsnotifier
maintainerextra_graphs)r   r,   r-   r.   r/   r0   r1   r   r   r	   r   o   s    	zDummyObserver.__init__c             C   s   || kS )Nr   )r   otherr   r   r	   __eq__   s    zDummyObserver.__eq__c             C   s   dS )Nr   r   )r   r   r   r	   __hash__   s    zDummyObserver.__hash__c             c   s   | j E d H  d S )N)r-   )r   r   r   r   r	   iter_observables   s    zDummyObserver.iter_observablesc             c   s   | j E d H  d S )N)r.   )r   r   r   r   r	   iter_objects   s    zDummyObserver.iter_objectsc             C   s   | j S )N)r/   )r   r   r   r   r   r   r	   get_notifier   s    zDummyObserver.get_notifierc             C   s   | j S )N)r0   )r   r   r   r   r   r   r   r	   get_maintainer   s    zDummyObserver.get_maintainerc             c   s   | j E d H  d S )N)r1   )r   r   r   r   r	   iter_extra_graphs   s    zDummyObserver.iter_extra_graphs)r!   r"   r#   r$   r   r3   r4   r5   r6   r7   r8   r9   r   r   r   r	   r+   Z   s   r+   N)Zunittestr   Ztraits.observation._observer   Z"traits.observation._observer_graphr   Ztraits.observation.exceptionsr   r   r   r
   r   r   r   r%   r+   r   r   r   r	   <module>   s   
