o
    b>                     @   s   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
 zddlZddlmZ ddlmZ W n ey=   dZeZY nw G d	d
 d
eZee dG dd deZdS )zTest SOAP support.    )skipIf)deferreactor)TestCase)errorserverN)soap)SOAPPublisherc                   @   sd   e Zd Zdd ZdddZde_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 )Testc                 C      || S N selfabr   r   </usr/lib/python3/dist-packages/twisted/web/test/test_soap.pysoap_add      zTest.soap_add      c                 C   r   r   r   r   r   r   r   soap_kwargs   r   zTest.soap_kwargsTc                 C   s
   ||d gS r   r   )r   stringnumr   r   r   soap_triple"      
zTest.soap_triplec                 C   s   t ddiS )Nr   c)SOAPpy
structTyper   r   r   r   soap_struct%   s   zTest.soap_structc                 C   s
   t |S r   )r   succeed)r   xr   r   r   
soap_defer(   r   zTest.soap_deferc                 C      t t S r   r   fail
ValueErrorr   r   r   r   soap_deferFail+      zTest.soap_deferFailc                 C   s   t r   )RuntimeErrorr   r   r   r   	soap_fail.   s   zTest.soap_failc                 C   r$   r   r%   r   r   r   r   soap_deferFault1   r)   zTest.soap_deferFaultc                 C   s   dddg gddS )Nr   r      foor   Dr   r   r   r   r   soap_complex4   s   zTest.soap_complexc                 C   s   || S r   r   )r   mapkeyr   r   r   	soap_dict7   r   zTest.soap_dictN)r   r   )__name__
__module____qualname__r   r   useKeywordsr   r    r#   r(   r+   r,   r1   r4   r   r   r   r   r
      s    
r
   zSOAPpy not installedc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )	SOAPTestsc                 C   s4   t  | _tjdt| jdd| _| j j| _d S )Nr   z	127.0.0.1)	interface)	r
   	publisherr   	listenTCPr   SitepgetHostportr   r   r   r   setUp=   s
   zSOAPTests.setUpc                 C   s
   | j  S r   )r>   stopListeningr   r   r   r   tearDownD   r   zSOAPTests.tearDownc                 C   s   t d| j S )Nzhttp://127.0.0.1:%d/)r   Proxyr@   r   r   r   r   proxyG   s   zSOAPTests.proxyc                 C   s   dddddidfdfddg dfg}g }|D ]\}}}|   j|g|R  }|| j| || q|   d	}|d
d  || jdddg gdd || tj|ddS )N)add)r         )r   )r   r   dictr   r   triple)r   r   )r   r   Ncomplexc                 S   s   |   S r   )_asdict)resultr   r   r   <lambda>Z   s    z'SOAPTests.testResults.<locals>.<lambda>r   r   r-   r.   r/   T)fireOnOneErrback)rE   
callRemoteaddCallbackassertEqualappendr   DeferredList)r   inputOutputdlmethargsoutpdr   r   r   testResultsJ   s   
zSOAPTests.testResultsc                    s6      d} |tj  fdd}|| |S )zD
        Check that a non existing method return error 500.
        doesntexistc                    s     t| jd d S )Ni  )rR   intstatus)errr   r   r   cbi   s   z(SOAPTests.testMethodNotFound.<locals>.cb)rE   rP   assertFailurer   ErrorrQ   )r   rZ   r`   r   r   r   testMethodNotFoundb   s
   
zSOAPTests.testMethodNotFoundc                 C   s:   |  | jd |  | jd | | jd dS )zc
        Test lookupFunction method on publisher, to see available remote
        methods.
        rF   r&   foobarN)
assertTruer;   lookupFunctionassertFalser   r   r   r   testLookupFunctiono   s   zSOAPTests.testLookupFunctionN)	r5   r6   r7   rA   rC   rE   r[   rc   rh   r   r   r   r   r9   ;   s    r9   )__doc__unittestr   twisted.internetr   r   twisted.trial.unittestr   twisted.webr   r   r   r   twisted.web.soapr	   ImportErrorobjectr
   r9   r   r   r   r   <module>   s    
"