o
    i&o                     @   s  d dl Z e je jd d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dl m!Z!m"Z"m#Z# d dl$m%Z% d dlm&Z&m'Z' d dl(m)Z) d dl*m+Z+ G dd dej,Z-G dd dej,Z.G dd dej,Z/d&ddZ0G dd dej,Z1G dd  d ej,Z2G d!d" d"ej,Z3G d#d$ d$ej,Z4e5d%kre6  dS dS )'    N)level)StringIO)SimpleCookie)datetime	validator)	_parse_qs)Application)ValidationErrorHTTP_200)rpc)srpc)	ByteArrayDateTimeUuidStringIntegerInteger8ComplexModelArray)HttpRpcHttpPattern_parse_cookie)Service)WsgiApplicationWsgiMethodContext)HttpTransportContext)call_wsgi_app_kwargsc                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TestStringc                 C   s8   G dd dt }t|gdtddt d}t|| _d S )Nc                   @   s    e Zd Zeeeddd ZdS )z%TestString.setUp.<locals>.SomeService_returnsc                 S   s   | S N sr$   r$   ]/var/www/html/LicenciasMIG/venv/lib/python3.10/site-packages/spyne/test/protocol/test_http.pyecho_string3      z1TestString.setUp.<locals>.SomeService.echo_stringN)__name__
__module____qualname__r   r   r(   r$   r$   r$   r'   SomeService2       
r-   tnssoftr   in_protocolout_protocol)r   r	   r   r   app)selfr-   r4   r$   r$   r'   setUp1   s   zTestString.setUpc                 C   s&   d }t | jd|dd}|dksJ d S )Nr(   stringr%      stringr   r4   r5   headersretr$   r$   r'   test_without_content_type>   s   z$TestString.test_without_content_typec                 C   *   ddi}t | jd|dd}|dksJ d S )NCONTENT_TYPE
text/plainr(   r7   r%   r8   r9   r:   r$   r$   r'   test_without_encodingC      z TestString.test_without_encodingc                 C   r>   )Nr?   ztext/plain; charset=utf8r(   r7   r%   r8   r9   r:   r$   r$   r'   test_with_encodingH   rB   zTestString.test_with_encodingN)r*   r+   r,   r6   r=   rA   rC   r$   r$   r$   r'   r    0   s
    r    c                   @      e Zd Zdd ZdS )TestHttpTransportContextc                 C   s   t jddd}|dksJ d S )Nr@   utf8)charsetztext/plain; charset="utf8")r   
gen_header)r5   valr$   r$   r'   test_gen_headerO   s   z(TestHttpTransportContext.test_gen_headerN)r*   r+   r,   rJ   r$   r$   r$   r'   rE   N       rE   c                   @   sd   e Zd Z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d Zdd Zdd ZdS )TestSimpleDictDocumentc                 C   s   t tdi ks
J d S )N dictr   r5   r$   r$   r'   test_own_parse_qs_01U   s   z+TestSimpleDictDocument.test_own_parse_qs_01c                 C   s   t tddd giksJ d S )NprN   rP   r$   r$   r'   test_own_parse_qs_02W      z+TestSimpleDictDocument.test_own_parse_qs_02c                 C      t tdddgiksJ d S )Nzp=rR   rM   rN   rP   r$   r$   r'   test_own_parse_qs_03Y   rT   z+TestSimpleDictDocument.test_own_parse_qs_03c                 C   rU   )Nzp=1rR   1rN   rP   r$   r$   r'   test_own_parse_qs_04[   rT   z+TestSimpleDictDocument.test_own_parse_qs_04c                 C   rU   )Nzp=1&rR   rW   rN   rP   r$   r$   r'   test_own_parse_qs_05]   rT   z+TestSimpleDictDocument.test_own_parse_qs_05c                 C   s"   t tddgd gdksJ d S )Nzp=1&qrW   rR   qrN   rP   r$   r$   r'   test_own_parse_qs_06_      "z+TestSimpleDictDocument.test_own_parse_qs_06c                 C   "   t tddgdgdksJ d S )Nzp=1&q=rW   rM   rZ   rN   rP   r$   r$   r'   test_own_parse_qs_07a   r]   z+TestSimpleDictDocument.test_own_parse_qs_07c                 C   r^   )Nzp=1&q=2rW   2rZ   rN   rP   r$   r$   r'   test_own_parse_qs_08c   r]   z+TestSimpleDictDocument.test_own_parse_qs_08c                 C   s$   t tddd gdgdksJ d S )Nz	p=1&q=2&prW   r`   rZ   rN   rP   r$   r$   r'   test_own_parse_qs_09e      $z+TestSimpleDictDocument.test_own_parse_qs_09c                 C   $   t tdddgdgdksJ d S )Nz
p=1&q=2&p=rW   rM   r`   rZ   rN   rP   r$   r$   r'   test_own_parse_qs_10g   rc   z+TestSimpleDictDocument.test_own_parse_qs_10c                 C   rd   )Nzp=1&q=2&p=3rW   3r`   rZ   rN   rP   r$   r$   r'   test_own_parse_qs_11i   rc   z+TestSimpleDictDocument.test_own_parse_qs_11N)r*   r+   r,   rQ   rS   rV   rX   rY   r\   r_   ra   rb   re   rg   r$   r$   r$   r'   rL   T   s    rL   r0   Fc                 C   s   t | dt||dt d}t|}t||ddddd}||\}|| |jd ur/|j|| |jd ur<|j|	| |S )	Nr/   )r   strict_arraysr1   
/some_callGET	localhost)QUERY_STRING	PATH_INFOREQUEST_METHODSERVER_NAMEsome-content-type)
r	   r   r   r   generate_contextsget_in_objectin_errorget_out_object	out_errorget_out_string)servicesqsr   rh   r4   serverinitial_ctxctxr$   r$   r'   _testl   s,   





r|   c                   @   st   e Zd Z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d Zdd Zdd Zdd Zdd ZdS )TestValidationc                 C   @   G dd dt }zt|gddd W td ty   Y d S w )Nc                   @   &   e Zd Zeeddeddd ZdS )z=TestValidation.test_validation_frequency.<locals>.SomeService   
min_occursr!   c                 S      d S r#   r$   rR   r$   r$   r'   	some_call   r)   zGTestValidation.test_validation_frequency.<locals>.SomeService.some_callNr*   r+   r,   r   r   r   r$   r$   r$   r'   r-          r-   rM   r0   r   must raise ValidationErrorr   r|   r
   	Exceptionr5   r-   r$   r$   r'   test_validation_frequency      z(TestValidation.test_validation_frequencyc                 C   r~   )Nc                   @   s(   e Zd Zeedddeddd ZdS )zJTestValidation._test_validation_frequency_simple_bare.<locals>.SomeServicer   r   bare)_body_styler"   c                 S   r   r#   r$   r   r$   r$   r'   r      r)   zTTestValidation._test_validation_frequency_simple_bare.<locals>.SomeService.some_callNr   r$   r$   r$   r'   r-          r-   rM   r0   r   r   r   r   r$   r$   r'   &_test_validation_frequency_simple_bare   r   z5TestValidation._test_validation_frequency_simple_barec                    s   G dd dt  G  fdddt}t|gddd zt|gddd W td	 ty0   Y nw zt|gd
dd W td	 tyH   Y d S w )Nc                   @      e Zd ZeddZeZdS )zGTestValidation.test_validation_frequency_complex_bare_parent.<locals>.Cr   r   Nr*   r+   r,   r   ir   r&   r$   r$   r$   r'   C       
r   c                       s    e Zd Ze dddd ZdS )zQTestValidation.test_validation_frequency_complex_bare_parent.<locals>.SomeServicer   )r   c                 S   r   r#   r$   r   r$   r$   r'   r      r)   z[TestValidation.test_validation_frequency_complex_bare_parent.<locals>.SomeService.some_callNr*   r+   r,   r   r   r$   r   r$   r'   r-      r.   r-   zi=5r0   r   zs=ar   rM   r   r   r|   r
   r   r   r$   r   r'   -test_validation_frequency_complex_bare_parent   s   z<TestValidation.test_validation_frequency_complex_bare_parentc                    v   G dd dt  G  fdddt}t|gddd zt|gddd W td	 ty0   Y nw t|gd
dd d S )Nc                   @   r   )z:TestValidation.test_validation_frequency_parent.<locals>.Cr   r   Nr   r$   r$   r$   r'   r      r   r   c                       s   e Zd Ze dd ZdS )zDTestValidation.test_validation_frequency_parent.<locals>.SomeServicec                 S   r   r#   r$   r   r$   r$   r'   r      r)   zNTestValidation.test_validation_frequency_parent.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-          r-   zp.i=5r0   r   zp.s=ar   rM   r   r   r$   r   r'    test_validation_frequency_parent      z/TestValidation.test_validation_frequency_parentc                    r   )Nc                   @   r   )z/TestValidation.test_validation_array.<locals>.Cr   r   Nr   r$   r$   r$   r'   r      r   r   c                           e Zd Zee dd ZdS )z9TestValidation.test_validation_array.<locals>.SomeServicec                 S   r   r#   r$   r   r$   r$   r'   r      r)   zCTestValidation.test_validation_array.<locals>.SomeService.some_callNr*   r+   r,   r   r   r   r$   r   r$   r'   r-      r.   r-   p[0].i=5r0   r   zp[0].s=ar   rM   r   r   r$   r   r'   test_validation_array   r   z$TestValidation.test_validation_arrayc                    sT   G dd dt  G  fdddt}zt|gddd W td ty)   Y d S w )	Nc                   @      e Zd ZeZdS )z@TestValidation.test_validation_array_index_jump_error.<locals>.CNr*   r+   r,   r   r   r$   r$   r$   r'   r          r   c                       $   e Zd Zee eddd ZdS )zJTestValidation.test_validation_array_index_jump_error.<locals>.SomeServicer!   c                 S      t | S r#   reprr   r$   r$   r'   r         zTTestValidation.test_validation_array_index_jump_error.<locals>.SomeService.some_callNr*   r+   r,   r   r   r   r   r$   r   r$   r'   r-          r-   zp[0].i=42&p[2].i=42&Trh   r   r   r   r$   r   r'   &test_validation_array_index_jump_error   s   z5TestValidation.test_validation_array_index_jump_errorc                    sl   G dd dt  G  fdddt}t|gddd}|jd d	ks#J t|gd
dd}|jd d	ks4J d S )Nc                   @   r   )zCTestValidation.test_validation_array_index_jump_tolerate.<locals>.CNr   r$   r$   r$   r'   r      r   r   c                       r   )zMTestValidation.test_validation_array_index_jump_tolerate.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r     r   zWTestValidation.test_validation_array_index_jump_tolerate.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r   r-   zp[0].i=0&p[2].i=2&Fr   r   z[C(i=0), C(i=2)]zp[2].i=2&p[0].i=0&)r   r   r|   
out_object)r5   r-   r<   r$   r   r'   )test_validation_array_index_jump_tolerate   s   z8TestValidation.test_validation_array_index_jump_toleratec                    s   G dd dt G fdddt  G  fdddt}t|gddd	 zt|gd
dd	 W td ty:   Y nw t|gddd	 d S )Nc                   @   r   )z7TestValidation.test_validation_nested_array.<locals>.CCN)r*   r+   r,   r   dr$   r$   r$   r'   CC  r   r   c                       s   e Zd ZeddZe ZdS )z6TestValidation.test_validation_nested_array.<locals>.Cr   r   N)r*   r+   r,   r   r   r   ccr$   )r   r$   r'   r     s    
r   c                       r   )z@TestValidation.test_validation_nested_array.<locals>.SomeServicec                 S   s   t |  d S r#   )printr   r$   r$   r'   r        zJTestValidation.test_validation_nested_array.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r.   r-   r   r0   r   zp[0].cc[0].d=2013-01-01r   rM   r   r   r$   )r   r   r'   test_validation_nested_array  s   z+TestValidation.test_validation_nested_arrayc                 C   r~   )Nc                   @   r   )z<TestValidation.test_validation_nullable.<locals>.SomeServiceF)nullabler!   c                 S   r   r#   r$   r   r$   r$   r'   r   -  r)   zFTestValidation.test_validation_nullable.<locals>.SomeService.some_callNr   r$   r$   r$   r'   r-   ,  r   r-   rR   r0   r   r   r   r   r$   r$   r'   test_validation_nullable+  r   z'TestValidation.test_validation_nullablec                 C   r~   )Nc                   @      e Zd Zeedd ZdS )zBTestValidation.test_validation_string_pattern.<locals>.SomeServicec                 S   r   r#   r$   r   r$   r$   r'   r   :  r)   zLTestValidation.test_validation_string_pattern.<locals>.SomeService.some_callN)r*   r+   r,   r   r   r   r$   r$   r$   r'   r-   9  r   r-   zp=dudukr0   r   r   r   r   r$   r$   r'   test_validation_string_pattern8  r   z-TestValidation.test_validation_string_patternc                 C   r~   )Nc                   @   s$   e Zd Zeeddddd ZdS )zATestValidation.test_validation_integer_range.<locals>.SomeServicer      )gelec                 S   r   r#   r$   r   r$   r$   r'   r   G  r)   zKTestValidation.test_validation_integer_range.<locals>.SomeService.some_callN)r*   r+   r,   r   r   r   r$   r$   r$   r'   r-   F  r   r-   zp=10r0   r   r   r   r   r$   r$   r'   test_validation_integer_rangeE  r   z,TestValidation.test_validation_integer_rangec                 C   r~   )Nc                   @   r   )z@TestValidation.test_validation_integer_type.<locals>.SomeServicec                 S   r   r#   r$   r   r$   r$   r'   r   T  r)   zJTestValidation.test_validation_integer_type.<locals>.SomeService.some_callNr*   r+   r,   r   r   r   r$   r$   r$   r'   r-   S  r   r-   zp=-129r0   r   r   r   r   r$   r$   r'   test_validation_integer_typeR  r   z+TestValidation.test_validation_integer_typec                 C   r~   )Nc                   @   r   )zBTestValidation.test_validation_integer_type_2.<locals>.SomeServicec                 S   r   r#   r$   r   r$   r$   r'   r   a  r)   zLTestValidation.test_validation_integer_type_2.<locals>.SomeService.some_callNr   r$   r$   r$   r'   r-   `  r   r-   zp=1.2r0   r   r   r   r   r$   r$   r'   test_validation_integer_type_2_  r   z-TestValidation.test_validation_integer_type_2N)r*   r+   r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r'   r}      s    r}   c                   @   s   e Zd Z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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<   G dd dt }zt|gd W td ty   Y d S w )Nc                   @   s"   e Zd Zeeegddd ZdS )z.Test.test_multiple_return.<locals>.SomeServicer!   c                   S   s   dS )N)r   r&   r$   r$   r$   r$   r'   r   p  r)   z8Test.test_multiple_return.<locals>.SomeService.some_callN)r*   r+   r,   r   r   r   r   r$   r$   r$   r'   r-   o  s    r-   rM   >Must fail with: HttpRpc does not support complex return types.)r   r|   	TypeErrorr   r   r$   r$   r'   test_multiple_returnn  s   zTest.test_multiple_returnc                    sP   G dd dt  G  fdddt}zt|gd W td ty'   Y d S w )Nc                   @   s   e Zd ZeZeZdS )z2Test.test_primitive_only.<locals>.SomeComplexModelNr   r$   r$   r$   r'   SomeComplexModel}  s    r   c                       s$   e Zd Ze  d fddZdS )z-Test.test_primitive_only.<locals>.SomeServicer!   c                    s    dddS )Nr   5x)r   r&   r$   )scmr   r$   r'   r     r   z7Test.test_primitive_only.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-         
r-   rM   r   )r   r   r|   r   r   r   r$   r   r'   test_primitive_only|  s   zTest.test_primitive_onlyc                    sZ   G dd dt G fdddt  G  fdddt}t|gd}|jd d	ks+J d S )
Nc                   @      e Zd ZdefdefgZdS )zTest.test_complex.<locals>.CMr   r&   Nr*   r+   r,   r   r   
_type_infor$   r$   r$   r'   CM      r   c                       "   e Zd Zdefd fdefgZdS )zTest.test_complex.<locals>.CCMr   cr&   Nr   r$   r   r$   r'   CCM  
    r   c                       s$   e Zd Ze ed fddZdS )z&Test.test_complex.<locals>.SomeServicer!   c                    s   t  | j| j| jdS )N)r   r   r&   )r   r   r   r&   ccmr   r$   r'   r     s   z0Test.test_complex.<locals>.SomeService.some_callNr*   r+   r,   r   r   r   r$   r   r$   r'   r-     r   r-   %&ccm.i=1&ccm.s=s&ccm.c.i=3&ccm.c.s=csr   "   CCM(i=1, c=CM(i=3, s='cs'), s='s'))r   r   r|   
out_stringr5   r-   r{   r$   r   r   r'   test_complex  s
   zTest.test_complexc                 C   s4   G dd dt }t|gd}d|jdksJ d S )Nc                   @   r   )z+Test.test_simple_array.<locals>.SomeService	unbounded
max_occursr!   c                 S   s
   d | S )N
joinr%   r$   r$   r'   r     s   
z5Test.test_simple_array.<locals>.SomeService.some_callNr   r$   r$   r$   r'   r-     r   r-   z&s=1&s=2    s   1
2)r   r|   r   r   r   r$   r$   r'   test_simple_array  s   zTest.test_simple_arrayc                    H   G dd dt  G  fdddt}t|gd}d|jdks"J d S )Nc                   @   r   )z#Test.test_complex_array.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r     r   r   c                       r   )z,Test.test_complex_array.<locals>.SomeServicer!   c                 S   s   d dd | D S )Nr   c                 S   s   g | ]}t |qS r$   r   ).0r   r$   r$   r'   
<listcomp>  s    zJTest.test_complex_array.<locals>.SomeService.some_call.<locals>.<listcomp>r   csr$   r$   r'   r        z6Test.test_complex_array.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r   r-   z;cs[0].i=1&cs[0].s=x&cs[1].i=2&cs[1].s=y&cs[2].i=3&cs[2].s=zr   s,   CM(i=1, s='x')
CM(i=2, s='y')
CM(i=3, s='z')r   r   r|   r   r   r   r$   r   r'   test_complex_array  s   
zTest.test_complex_arrayc                    r   )Nc                   @   r   )z)Test.test_complex_array_empty.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r     r   r   c                       r   )z2Test.test_complex_array_empty.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r     r   z<Test.test_complex_array_empty.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r   r-   zcs=emptyr   s   []r   r   r$   r   r'   test_complex_array_empty     zTest.test_complex_array_emptyc                    r   )Nc                   @   r   )z*Test.test_complex_object_empty.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r     r   r   c                           e Zd Ze eddd ZdS )z3Test.test_complex_object_empty.<locals>.SomeServicer!   c                 S   r   r#   r   )r   r$   r$   r'   r     r   z=Test.test_complex_object_empty.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r.   r-   zc=emptyr   s   CM()r   r   r$   r   r'   test_complex_object_empty  r   zTest.test_complex_object_emptyc                    sf   G dd dt G fdddt  G  fdddt}t|gd}t|j d|jd	ks1J d S )
Nc                   @   r   )z$Test.test_nested_flatten.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r     r   r   c                       r   )z%Test.test_nested_flatten.<locals>.CCMr   r   r&   Nr   r$   r   r$   r'   r     r   r   c                       r   )z-Test.test_nested_flatten.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r     r   z7Test.test_nested_flatten.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r.   r-   r   r   r   )r   r   r|   r   r   r   r   r$   r   r'   test_nested_flatten  s   
zTest.test_nested_flattenc                    s`   G dd dt G fdddt  G  fdddt}t|gd}d|j}|d	ks.J d S )
Nc                   @   r   )z;Test.test_nested_flatten_with_multiple_values_1.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r     r   r   c                       r   )z<Test.test_nested_flatten_with_multiple_values_1.<locals>.CCMr   r   r&   Nr   r$   r   r$   r'   r     r   r   c                       s(   e Zd Ze jddeddd ZdS )zDTest.test_nested_flatten_with_multiple_values_1.<locals>.SomeService   r   r!   c                 S   r   r#   r   r   r$   r$   r'   r     r   zNTest.test_nested_flatten_with_multiple_values_1.<locals>.SomeService.some_callN)r*   r+   r,   r   	customizer   r   r$   r   r$   r'   r-   
  r   r-   zIccm[0].i=1&ccm[0].s=s&ccm[0].c.i=1&ccm[0].c.s=a&ccm[1].c.i=2&ccm[1].c.s=br   s:   [CCM(i=1, c=CM(i=1, s='a'), s='s'), CCM(c=CM(i=2, s='b'))]r   r5   r-   r{   r&   r$   r   r'   *test_nested_flatten_with_multiple_values_1  s   z/Test.test_nested_flatten_with_multiple_values_1c                    d   G dd dt G fdddt  G  fdddt}t|gd}dt|j}|d	ks0J d S )
Nc                   @   r   )z;Test.test_nested_flatten_with_multiple_values_2.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r     r   r   c                       s*   e Zd Zdefd jddfdefgZdS )z<Test.test_nested_flatten_with_multiple_values_2.<locals>.CCMr   r   r   r   r&   N)r*   r+   r,   r   r   r   r   r$   r   r$   r'   r     s
    r   c                       r   )zDTest.test_nested_flatten_with_multiple_values_2.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r   &  r   zNTest.test_nested_flatten_with_multiple_values_2.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-   %  r.   r-   Cccm.i=1&ccm.s=s&ccm.c[0].i=1&ccm.c[0].s=a&ccm.c[1].i=2&ccm.c[1].s=br   3   CCM(i=1, c=[CM(i=1, s='a'), CM(i=2, s='b')], s='s')r   r   r|   r   listr   r   r$   r   r'   *test_nested_flatten_with_multiple_values_2     z/Test.test_nested_flatten_with_multiple_values_2c                    r   )
Nc                   @   r   )z7Test.test_nested_flatten_with_complex_array.<locals>.CMr   r&   Nr   r$   r$   r$   r'   r   2  r   r   c                       s&   e Zd Zdefde fdefgZdS )z8Test.test_nested_flatten_with_complex_array.<locals>.CCMr   r   r&   Nr*   r+   r,   r   r   r   r   r$   r   r$   r'   r   8  
    
r   c                       r   )z@Test.test_nested_flatten_with_complex_array.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r   @  r   zJTest.test_nested_flatten_with_complex_array.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-   ?  r.   r-   r   r   r   r   r   r$   r   r'   &test_nested_flatten_with_complex_array1  r   z+Test.test_nested_flatten_with_complex_arrayc                    sP   G dd dt  G  fdddt}t|gd}dt|j}|dks&J d S )Nc                   @   &   e Zd ZdefdeefdefgZdS )z<Test.test_nested_2_flatten_with_primitive_array.<locals>.CCMr   r   r&   Nr   r$   r$   r$   r'   r   L  r  r   c                       r   )zDTest.test_nested_2_flatten_with_primitive_array.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r   T  r   zNTest.test_nested_2_flatten_with_primitive_array.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-   S  r   r-   z+ccm[0].i=1&ccm[0].s=s&ccm[0].c=a&ccm[0].c=br   s   [CCM(i=1, c=['a', 'b'], s='s')]r   r   r$   r   r'   *test_nested_2_flatten_with_primitive_arrayK  s
   z/Test.test_nested_2_flatten_with_primitive_arrayc                    s   G dd dt  G  fdddt}t|gd}d|j}|dks$J t|gd}d|j}|d	ks6J t|gd
}d|j}|dksHJ d S )Nc                   @   s"   e Zd ZdefdeddfgZdS )zTest.test_default.<locals>.CMr   r&   default)r  Nr   r$   r$   r$   r'   r   _  s    r   c                       r   )z&Test.test_default.<locals>.SomeServicer!   c                 S   r   r#   r   )cmr$   r$   r'   r   f  r   z0Test.test_default.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-   e  r.   r-   zcm.i=1r   s   CM(i=1, s='default')zcm.i=1&cm.ss   CM(i=1)zcm.i=1&cm.s=s   CM(i=1, s='')r   r   r$   r   r'   test_default^  s   zTest.test_defaultc                    s   G dd dt  G  fdddt}t|gd}dt|j}|dks&J t|gd}dt|j}|dks:J t|gd	}dt|j}|dksNJ d S )
Nc                   @   r  )z:Test.test_nested_flatten_with_primitive_array.<locals>.CCMr   r   r&   Nr   r$   r$   r$   r'   r   z  r  r   c                       r   )zBTest.test_nested_flatten_with_primitive_array.<locals>.SomeServicer!   c                 S   r   r#   r   r   r$   r$   r'   r     r   zLTest.test_nested_flatten_with_primitive_array.<locals>.SomeService.some_callNr   r$   r   r$   r'   r-     r.   r-   zccm.i=1&ccm.s=s&ccm.c=a&ccm.c=br   s   CCM(i=1, c=['a', 'b'], s='s')z%ccm.i=1&ccm.s=s&ccm.c[1]=b&ccm.c[0]=az%ccm.i=1&ccm.s=s&ccm.c[0]=a&ccm.c[1]=br   r   r$   r   r'   (test_nested_flatten_with_primitive_arrayy  s   z-Test.test_nested_flatten_with_primitive_arrayc                    s   t ddddddgG dd dt G  fdd	d	t}fd
d}t|gdt t d}t|}ddddddddt t dddd}|||}tt| t	|}|||}t|dgkscJ d S )Ni  r   )yearmonthdayheyyoc                   @   s   e Zd ZeddedZdS )z.Test.test_http_headers.<locals>.ResponseHeaderr   r   
Set-CookieExpiresN)r*   r+   r,   r   r   r   r$   r$   r$   r'   ResponseHeader  s    
r  c                       s(   e Zd Z Zee fddZdS )z+Test.test_http_headers.<locals>.SomeServicec                    s&   |d usJ  di d| _ d S )Nr  r$   )
out_headerr{   r&   r  r   r7   r$   r'   r     s   z5Test.test_http_headers.<locals>.SomeService.some_callN)r*   r+   r,   __out_header__r   r   r   r$   r  r$   r'   r-     s    r-   c                    sB   t   t fddD tksJ t d dksJ d S )Nc                    s   g | ]
}d |f v r|qS )r  r$   )r   r&   r;   r$   r'   r     s    zBTest.test_http_headers.<locals>.start_response.<locals>.<listcomp>r  zTue, 01 Jan 2013 00:00:00 GMT)r   lenrO   coder;   r7   r  r'   start_response  s
   z.Test.test_http_headers.<locals>.start_responser/   r1   rM   z&s=foori   rj   rk   9999httpr   r   FT)SCRIPT_NAMErl   rm   rn   ro   SERVER_PORTwsgi.url_schemewsgi.version
wsgi.inputwsgi.errorswsgi.multithreadwsgi.multiprocesswsgi.run_oncer   )
r   r   r   r	   r   r   r   r   r   wsgiref_validator)r5   r-   r  r4   wsgi_appreq_dictr<   r$   r  r'   test_http_headers  s8   	

zTest.test_http_headersN)r*   r+   r,   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r+  r$   r$   r$   r'   r   m  s     	!r   c                   @   rD   )TestHttpPatternsc           	         s   dd G  fdddt }t|gdt t d}t|}dd f d	d
dddd}t||d}||\}g }|jD ]}|| q=t|dksMJ t	| |j
d usXJ || |jd u sdJ || |jd u spJ d S )Nr   some_fragmentc                       s0   e Zd Zeeeed  gdfddZdS )z0TestHttpPatterns.test_rules.<locals>.SomeServicez/%s/<some_int>)r"   	_patternsc                    s   |  ksJ d S r#   r$   )some_int)_intr$   r'   r     s   z:TestHttpPatterns.test_rules.<locals>.SomeService.some_callN)r*   r+   r,   r   r   r   r   r$   	_fragmentr0  r$   r'   r-     s
    
r-   r/   r1   rM   z/%s/%d/rk   r  9000rj   )rl   rm   SERVER_PATHro   r!  r   rn   rp   r   )r   r	   r   r   r   rq   _http_patternsappendr  r   
descriptorrr   rs   rt   ru   )	r5   r-   r4   ry   environrz   r{   foor   r$   r1  r'   
test_rules  s2   




zTestHttpPatterns.test_rulesN)r*   r+   r,   r;  r$   r$   r$   r'   r,    rK   r,  c                   @   r   )
ParseCookieTestc                    s   dG dd dt  G  fdddt}dd }df }t|gd	td
dt d}t|}dddddd|ddt t ddd
d}|||}t| t|}|||}t| d S )Nsome_stringc                   @   r   )z8ParseCookieTest.test_cookie_parse.<locals>.RequestHeaderN)r*   r+   r,   r   
some_fieldr$   r$   r$   r'   RequestHeader  r   r?  c                       s$   e Zd Z ZeefddZdS )z6ParseCookieTest.test_cookie_parse.<locals>.SomeServicec                    s   | j j ksJ d S r#   )	in_headerr>  r  r  r$   r'   r     r   z@ParseCookieTest.test_cookie_parse.<locals>.SomeService.some_callN)r*   r+   r,   __in_header__r   r   r   r$   r?  r7   r$   r'   r-     s    r-   c                 S   s   | t ksJ d S r#   r   r  r$   r$   r'   r  	  s   z9ParseCookieTest.test_cookie_parse.<locals>.start_responsezsome_field=%sr/   T)parse_cookier1   rM   ri   rj   rk   r  r  r  F)r  rl   rm   rn   ro   r   HTTP_COOKIEr!  r"  r#  r$  r%  r&  r'  )r   r   r	   r   r   r   r   r(  )r5   r-   r  r   r4   r)  r*  r<   r$   rB  r'   test_cookie_parse  s:   


z!ParseCookieTest.test_cookie_parsec                 C   sv   |  tdddd |  tddddd	d
 |  tdddi |  tdddi |  tdddddd dS )zO
        Test cases copied from Python's Lib/test/test_http_cookies.py
        zchips=ahoy; vienna=fingerahoyfinger)chipsviennaz)keebler="E=mc2; L=\"Loves\"; fudge=\012;"z"E=mc2z	\"Loves\"z\012")keeblerLfudgerM   zkeebler=E=mc2rK  zE=mc2zkey:term=value:termzkey:termz
value:termza=b; c=[; d=r; f=hb[rh)ar   r   fNassertEqualr   rP   r$   r$   r'   test_python_cookies.  s   z#ParseCookieTest.test_python_cookiesc                 C   s0   |  tdddd |  tdddd d S )	Nza=b; Domain=example.comrN  zexample.com)rR  Domainza=b; h=i; a=cr   r   )rR  rQ  rT  rP   r$   r$   r'   test_cookie_edgecases@  s   z%ParseCookieTest.test_cookie_edgecasesc                 C   s   |  dtd  | tddddd | tdd	d
d | tdddi | tdddi | tdddd dS )zs
        Cookie strings that go against RFC6265 but browsers will send if set
        via document.cookie.
        django_languagez$abc=def; unnamed; django_language=enza=b; "; c=drN  rJ  r   )rR  rM   r   za b c=d e = f; gh=izd e = fr   )za b cghza   b,c<>@:/[]?{}=d  "  =e,f gza   b,c<>@:/[]?{}zd  "  =e,f gu   saint=André Bessettesaintu   André Bessettez  =  b  ;  ;  =  ;   c  =  ;  rM   )rM   r   N)assertInr   keysrU  rP   r$   r$   r'   test_invalid_cookiesG  s$   




z$ParseCookieTest.test_invalid_cookiesN)r*   r+   r,   rE  rV  rX  r^  r$   r$   r$   r'   r<    s
    1r<  __main__)r0   F)7loggingbasicConfigDEBUGunittestspyne.util.sixr   !spyne.util.six.moves.http_cookiesr   r   wsgiref.validater   r(  spyne.server.wsgir   spyne.applicationr	   spyne.errorr
   spyne.const.httpr   spyne.decoratorr   r   spyne.modelr   r   r   r   r   r   r   r   spyne.protocol.httpr   r   r   spyne.servicer   r   r   spyne.server.httpr   spyne.util.testr   TestCaser    rE   rL   r|   r}   r   r,  r<  r*   mainr$   r$   r$   r'   <module>   sB   (
 g  f+g