a
    Dųg0  ć                   @   s   d dl mZmZ d dlmZmZmZmZ d dlm	Z	m
Z
mZmZ G dd deZG dd deZG dd	 d	eZG d
d deZdS )é    )ŚSimpleTestCaseŚTestCase)ŚAndŚOrŚPhraseŚ	PlainText)Śbalanced_reduceŚnormalise_query_stringŚparse_query_stringŚseparate_filters_from_queryc                   @   s   e Zd Zdd Zdd ZdS )ŚTestQueryStringNormalisationc                 C   s    d}t |}|  t|d” d S )NAč  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaé’   ©r	   ŚassertEqualŚlen©ŚselfZtest_querystringŚresult© r   ś`/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/search/tests/test_queries.pyŚtest_truncation   s    z,TestQueryStringNormalisation.test_truncationc                 C   s    d}t |}|  t|d” d S )NZ
aaaaaaaaaaé
   r   r   r   r   r   Śtest_no_truncation   s    z/TestQueryStringNormalisation.test_no_truncationN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r   r   r      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S )ŚTestSeparateFiltersFromQueryc                 C   s,   t d\}}|  | ” i ” |  |d” d S ©Nśhello world©r   ŚassertDictEqualŚdictr   ©r   ŚfiltersŚqueryr   r   r   Śtest_only_query   s    z,TestSeparateFiltersFromQuery.test_only_queryc                 C   s0   t d\}}|  | ” ddi” |  |d” d S )Nz
author:fooŚauthorŚfooŚ r   r"   r   r   r   Śtest_filter   s    z(TestSeparateFiltersFromQuery.test_filterc                 C   s0   t d\}}|  | ” ddi” |  |d” d S )Nzauthor:"foo bar"r&   śfoo barr(   r   r"   r   r   r   Śtest_filter_with_quotation_mark%   s    z<TestSeparateFiltersFromQuery.test_filter_with_quotation_markc                 C   s0   t d\}}|  | ” ddi” |  |d” d S )Nzauthor:foo hello worldr&   r'   r   r   r"   r   r   r   Śtest_filter_and_query+   s    z2TestSeparateFiltersFromQuery.test_filter_and_queryc                 C   s0   t d\}}|  | ” ddi” |  |d” d S )Nzauthor:"foo bar" hello worldr&   r*   r   r   r"   r   r   r   Ś)test_filter_with_quotation_mark_and_query1   s    zFTestSeparateFiltersFromQuery.test_filter_with_quotation_mark_and_queryc                 C   s,   t d\}}|  | ” i ” |  |d” d S )Nzauthor:"foo bar hello worldr   r"   r   r   r   Ś2test_filter_with_unclosed_quotation_mark_and_query7   s    zOTestSeparateFiltersFromQuery.test_filter_with_unclosed_quotation_mark_and_queryc                 C   s2   t d\}}|  | ” ddd” |  |d” d S )Nz%author:"foo bar" hello world bar:beerr*   Śbeer©r&   Śbarr   r   r"   r   r   r   Śtest_two_filters_and_query=   s
    ’z7TestSeparateFiltersFromQuery.test_two_filters_and_queryc                 C   s`   t d\}}|  | ” ddd” |  |d” t d\}}|  | ” ddd” |  |d” d S )Nz,author:"foo bar" hello world bar:"two beers"r*   z	two beersr0   r   z,author:'foo bar' hello world bar:'two beers'r   r"   r   r   r   Ś/test_two_filters_with_quotation_marks_and_queryE   s    ’’zLTestSeparateFiltersFromQuery.test_two_filters_with_quotation_marks_and_queryc                 C   sH   t d\}}|  | ” ddd” |  | d”g d¢” |  |d” d S )Nz6foo:test1 hello world foo:test2 foo:"test3" foo2:test4Śtest3Ztest4)r'   Zfoo2r'   )Ztest1Ztest2r4   r   )r   r    r!   ZassertListEqualŚgetlistr   r"   r   r   r   Ś:test_return_list_of_multiple_instances_for_same_filter_keyT   s    ’zWTestSeparateFiltersFromQuery.test_return_list_of_multiple_instances_for_same_filter_keyN)r   r   r   r%   r)   r+   r,   r-   r.   r2   r3   r6   r   r   r   r   r      s   r   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 )ŚTestParseQueryStringc                 C   s8   t d\}}|  | ” i ” |  t|ttd” d S r   )r
   r    r!   r   Śreprr   r"   r   r   r   Śtest_simple_query_   s    z&TestParseQueryString.test_simple_queryc                 C   sl   t d\}}|  | ” i ” |  t|ttd” t d\}}|  | ” i ” |  t|ttd” d S )Nz"hello world"r   z'hello world'©r
   r    r!   r   r8   r   r"   r   r   r   Śtest_with_phrasee   s    z%TestParseQueryString.test_with_phrasec                 C   s   t d\}}|  | ” i ” |  t|tttdtdg” t d\}}|  | ” i ” |  t|tttdtdg” d S )Nśthis is simple "hello world"śthis is simpler   śthis is simple 'hello world')r
   r    r!   r   r8   r   r   r   r"   r   r   r   Śtest_with_simple_and_phrasep   s    ’’z0TestParseQueryString.test_with_simple_and_phrasec              	   C   s   t ddd\}}|  | ” i ” |  t|tttdddtdg” t ddd\}}|  | ” i ” |  t|tttdddtdg” d S )Nr<   Śor)Śoperatorr=   r   r>   )r
   r    r!   r   r8   r   r   r   r"   r   r   r   Śtest_operator   s(    ’
’ž’
’žz"TestParseQueryString.test_operatorc                 C   sl   t d\}}|  | ” i ” |  t|ttd” t d\}}|  | ” i ” |  t|ttd” d S )Nz"hello worldr   z'hello worldr:   r"   r   r   r   Śtest_with_phrase_unclosed   s    z.TestParseQueryString.test_with_phrase_unclosedc                 C   sx   t d\}}|  | ” ddd” |  t|ttd” t d\}}|  | ” ddd” |  t|ttd” d S )Nz'"hello world" author:"foo bar" bar:beerr*   r/   r0   r   z''hello world' author:'foo bar' bar:beerr:   r"   r   r   r   Śtest_phrase_with_filter£   s    z,TestParseQueryString.test_phrase_with_filterc                 C   sn   t dd \}}|  | ” i ” |  t|ttdd ” t dd  d\}}|  | ” dd di” d S )NŚ0é`ź  Śaz
:"foo bar"r*   ©r
   r   r!   r8   r   )r   r#   r$   Ś_r   r   r   Śtest_long_queries®   s
    z&TestParseQueryString.test_long_queriesc                 C   s8   t ddd  \}}|  | ” dddd  i” d S )Nzfoo:baŚrrF   r'   Śba)r
   r   r!   )r   r#   rI   r   r   r   Śtest_long_filter_value¶   s    z+TestParseQueryString.test_long_filter_valuec                 C   s   t d\}}|  | ” ddi” |  t|ttd” t d\}}|  | ” ddi” |  t|ttd” t d\}}|  | ” ddi” d S )Nzfoo:bar:bazr'   r1   z:bazzfoo:'bar':bazzfoo:'bar:baz'zbar:bazrH   r"   r   r   r   Śtest_joined_filtersŗ   s    z(TestParseQueryString.test_joined_filtersc                 C   sd   t d\}}|  t|tttdtdg” t d\}}|  t|tttdtdg” d S )Nz"hello world" "hi earth"r   zhi earthz'hello world' 'hi earth')r
   r   r8   r   r   r"   r   r   r   Śtest_multiple_phrasesĘ   s    ’’z*TestParseQueryString.test_multiple_phrasesc                 C   s>   t d\}}|  | ” ddd” |  t|ttd” d S )Nz2"lord of the rings" army_1:"elves" army_2:'humans'ZelvesZhumans)Zarmy_1Zarmy_2zlord of the ringsr:   r"   r   r   r   Śtest_mixed_phrases_with_filtersÓ   s    ’
žz4TestParseQueryString.test_mixed_phrases_with_filtersN)r   r   r   r9   r;   r?   rB   rC   rD   rJ   rM   rN   rO   rP   r   r   r   r   r7   ^   s   r7   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ŚTestBalancedReducec                 C   sę  G dd d}dd }|   t|g d¢dd” |   t|dd	gg d
dggg g d¢” |   tdd tdddd” |   tdd tdddd” |   t||dd” |   t||ddd” |   t||ddd” |  tt” |  ttdd” |  ttddd” |   tddd” |   tdddd” |  ttdd” |  tt|g ” |  tt|d” |  tt|d” |  tt|t ” G dd d}|  tt|| ” |  t|g d ” |   t|g dd” G dd  d }|  ttd| ” d S )!Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z/TestBalancedReduce.test_reduce.<locals>.Squaresc                 S   s   || _ g | _d S ©N)ŚmaxŚsofar)r   rS   r   r   r   Ś__init__å   s    z8TestBalancedReduce.test_reduce.<locals>.Squares.__init__c                 S   s
   t | jS rR   )r   rT   ©r   r   r   r   Ś__len__é   s    z7TestBalancedReduce.test_reduce.<locals>.Squares.__len__c                 S   sR   d|  kr| j k sn tt| j}||krH| j || ” |d7 }q&| j| S )Nr   é   )rS   Ś
IndexErrorr   rT   Śappend)r   ŚiŚnr   r   r   Ś__getitem__ģ   s    

z;TestBalancedReduce.test_reduce.<locals>.Squares.__getitem__N)r   r   r   rU   rW   r]   r   r   r   r   ŚSquaresä   s   r^   c                 S   s   | | S rR   r   ©ŚxŚyr   r   r   Śaddõ   s    z+TestBalancedReduce.test_reduce.<locals>.add)rG   ŚbŚcr(   ŚabcrG   rd   ŚdŚw)rG   rd   rf   rg   c                 S   s   | | S rR   r   r_   r   r   r   Ś<lambda>ü   ó    z0TestBalancedReduce.test_reduce.<locals>.<lambda>é   é   rX   i°  c                 S   s   | | S rR   r   r_   r   r   r   rh   ž   ri   é   l     hņ r   i  r   é*   Ś1)rm   rm   r   c                   @   s   e Zd Zdd ZdS )z7TestBalancedReduce.test_reduce.<locals>.TestFailingIterc                 S   s   t d S rR   )ŚRuntimeErrorrV   r   r   r   Ś__iter__  s    z@TestBalancedReduce.test_reduce.<locals>.TestFailingIter.__iter__N)r   r   r   rp   r   r   r   r   ŚTestFailingIter  s   rq   c                   @   s   e Zd Zdd ZdS )z.TestBalancedReduce.test_reduce.<locals>.BadSeqc                 S   s   t d S rR   )Ś
ValueError)r   Śindexr   r   r   r]     s    z:TestBalancedReduce.test_reduce.<locals>.BadSeq.__getitem__N)r   r   r   r]   r   r   r   r   ŚBadSeq  s   rt   )	r   r   ŚrangeŚassertRaisesŚ	TypeErrorŚobjectro   ZassertIsNonerr   )r   r^   rb   rq   rt   r   r   r   Śtest_reduceć   sF    ’’
’’’zTestBalancedReduce.test_reducec                 C   sĪ   G dd d}ddl m} |  t||dd” |  t||ddd” |  tt||d” |  t||ddd” |  t||d	d” |  t||d	dd” d	d
dd}|  t||d | ” ”” d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z=TestBalancedReduce.test_iterator_usage.<locals>.SequenceClassc                 S   s
   || _ d S rR   )r\   )r   r\   r   r   r   rU   &  s    zFTestBalancedReduce.test_iterator_usage.<locals>.SequenceClass.__init__c                 S   s&   d|  kr| j k rn n|S td S )Nr   )r\   rY   )r   r[   r   r   r   r]   )  s    zITestBalancedReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)r   r   r   rU   r]   r   r   r   r   ŚSequenceClass%  s   rz   r   )rb   é   r   rm   é4   rX   rj   é   )ZoneZtwoZthreer(   )rA   rb   r   r   rv   rw   ŚjoinŚkeys)r   rz   rb   rf   r   r   r   Śtest_iterator_usage$  s    
z&TestBalancedReduce.test_iterator_usagec                 C   s,   G dd d}|   tt|g d¢d” d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z9TestBalancedReduce.test_is_balanced.<locals>.CombinedNodec                 S   s   || _ || _d S rR   ©rG   rc   )r   rG   rc   r   r   r   rU   ?  s    zBTestBalancedReduce.test_is_balanced.<locals>.CombinedNode.__init__c                 S   s   d| j  d| j dS )Nś(ś ś)r   rV   r   r   r   Ś__repr__C  s    zBTestBalancedReduce.test_is_balanced.<locals>.CombinedNode.__repr__N)r   r   r   rU   r   r   r   r   r   ŚCombinedNode>  s   r   )ŚAŚBŚCŚDŚEŚFŚGŚHz(((A B) (C D)) ((E F) (G H))))r   r8   r   )r   r   r   r   r   Śtest_is_balanced<  s    ’üz#TestBalancedReduce.test_is_balancedN)r   r   r   ry   r   r   r   r   r   r   rQ   ß   s   ArQ   N)Zdjango.testr   r   Zwagtail.search.queryr   r   r   r   Zwagtail.search.utilsr   r	   r
   r   r   r   r7   rQ   r   r   r   r   Ś<module>   s   F 