o
    h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                   @      e Zd Zdd Zdd ZdS )TestQueryStringNormalisationc                 C       d}t |}| t|d d S )N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   r	   assertEquallenselftest_querystringresult r   a/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/search/tests/test_queries.pytest_truncation      z,TestQueryStringNormalisation.test_truncationc                 C   r   )N
aaaaaaaaaa
   r   r   r   r   r   test_no_truncation   r   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   ,   t d\}}| | i  | |d d S Nhello worldr   assertDictEqualdictr   r   filtersqueryr   r   r   test_only_query      z,TestSeparateFiltersFromQuery.test_only_queryc                 C   0   t d\}}| | ddi | |d d S )Nz
author:fooauthorfoo r&   r)   r   r   r   test_filter      z(TestSeparateFiltersFromQuery.test_filterc                 C   r.   )Nzauthor:"foo bar"r/   foo barr1   r&   r)   r   r   r   test_filter_with_quotation_mark%   r3   z<TestSeparateFiltersFromQuery.test_filter_with_quotation_markc                 C   r.   )Nzauthor:foo hello worldr/   r0   r%   r&   r)   r   r   r   test_filter_and_query+   r3   z2TestSeparateFiltersFromQuery.test_filter_and_queryc                 C   r.   )Nzauthor:"foo bar" hello worldr/   r4   r%   r&   r)   r   r   r   )test_filter_with_quotation_mark_and_query1   r3   zFTestSeparateFiltersFromQuery.test_filter_with_quotation_mark_and_queryc                 C   r#   )Nzauthor:"foo bar hello worldr&   r)   r   r   r   2test_filter_with_unclosed_quotation_mark_and_query7   r-   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:beerr4   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"r4   z	two beersr:   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test3test4)r0   foo2r0   )test1test2r>   r%   )r   r'   r(   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,   r2   r5   r6   r7   r8   r<   r=   rE   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   l   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   rG   r   r)   r   r   r   test_with_phrasee      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   rG   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 )NrM   or)operatorrN   r%   rO   )r
   r'   r(   r   rG   r   r   r   r)   r   r   r   test_operator   s(   

z"TestParseQueryString.test_operatorc                 C   rI   )Nz"hello worldr%   z'hello worldrJ   r)   r   r   r   test_with_phrase_unclosed   rL   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:beerr4   r9   r:   r%   z''hello world' author:'foo bar' bar:beerrJ   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"r4   r
   r   r(   rG   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rrW   r0   ba)r
   r   r(   )r   r*   rZ   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:bazr0   r;   z:bazzfoo:'bar':bazzfoo:'bar:baz'zbar:bazrY   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   rG   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'elveshumans)army_1army_2zlord of the ringsrJ   r)   r   r   r   test_mixed_phrases_with_filters   s   
z4TestParseQueryString.test_mixed_phrases_with_filtersN)r   r    r!   rH   rK   rP   rS   rT   rU   r[   r^   r_   r`   re   r   r   r   r   rF   ^   s    rF   c                   @   $   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                   @   rf   )z/TestBalancedReduce.test_reduce.<locals>.Squaresc                 S   s   || _ g | _d S N)maxsofar)r   ri   r   r   r   __init__      
z8TestBalancedReduce.test_reduce.<locals>.Squares.__init__c                 S   s
   t | jS rh   )r   rj   r   r   r   r   __len__      
z7TestBalancedReduce.test_reduce.<locals>.Squares.__len__c                 S   sZ   d|  kr| j k st tt| j}||kr(| j||  |d7 }||ks| j| S )Nr      )ri   
IndexErrorr   rj   append)r   inr   r   r   __getitem__   s   

z;TestBalancedReduce.test_reduce.<locals>.Squares.__getitem__N)r   r    r!   rk   rn   ru   r   r   r   r   Squares   s    rv   c                 S   s   | | S rh   r   xyr   r   r   add   s   z+TestBalancedReduce.test_reduce.<locals>.add)rX   bcr1   abcrX   r|   dw)rX   r|   r~   r   c                 S      | | S rh   r   rw   r   r   r   <lambda>       z0TestBalancedReduce.test_reduce.<locals>.<lambda>      rp   i  c                 S   r   rh   r   rw   r   r   r   r      r      l     h r   i  r   *   1)r   r   r   c                   @      e Zd Zdd ZdS )z7TestBalancedReduce.test_reduce.<locals>.TestFailingIterc                 S      t rh   )RuntimeErrorrm   r   r   r   __iter__     z@TestBalancedReduce.test_reduce.<locals>.TestFailingIter.__iter__N)r   r    r!   r   r   r   r   r   TestFailingIter      r   c                   @   r   )z.TestBalancedReduce.test_reduce.<locals>.BadSeqc                 S   r   rh   )
ValueError)r   indexr   r   r   ru     r   z:TestBalancedReduce.test_reduce.<locals>.BadSeq.__getitem__N)r   r    r!   ru   r   r   r   r   BadSeq  r   r   )	r   r   rangeassertRaises	TypeErrorobjectr   assertIsNoner   )r   rv   rz   r   r   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                   @   r   )z=TestBalancedReduce.test_iterator_usage.<locals>.SequenceClassc                 S   s
   || _ d S rh   )rt   )r   rt   r   r   r   rk   &  ro   zFTestBalancedReduce.test_iterator_usage.<locals>.SequenceClass.__init__c                 S   s"   d|  kr| j k r|S  tt)Nr   )rt   rq   )r   rs   r   r   r   ru   )  s   zITestBalancedReduce.test_iterator_usage.<locals>.SequenceClass.__getitem__N)r   r    r!   rk   ru   r   r   r   r   SequenceClass%  s    r   r   )rz      r   r   4   rp   r      )onetwothreer1   )rR   rz   r   r   r   r   joinkeys)r   r   rz   r~   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                   @   r   )z9TestBalancedReduce.test_is_balanced.<locals>.CombinedNodec                 S   s   || _ || _d S rh   rX   r{   )r   rX   r{   r   r   r   rk   ?  rl   zBTestBalancedReduce.test_is_balanced.<locals>.CombinedNode.__init__c                 S   s   d| j  d| j dS )N( )r   rm   r   r   r   __repr__C  s   zBTestBalancedReduce.test_is_balanced.<locals>.CombinedNode.__repr__N)r   r    r!   rk   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   rG   r   )r   r   r   r   r   test_is_balanced<  s   z#TestBalancedReduce.test_is_balancedN)r   r    r!   r   r   r   r   r   r   r   rg      s    Arg   N)django.testr   r   wagtail.search.queryr   r   r   r   wagtail.search.utilsr   r	   r
   r   r   r"   rF   rg   r   r   r   r   <module>   s    F 