
    }e                        d Z ddlZddlZddlZddlZ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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 Zd Z ed        Z!ede"fd       Z#ed        Z$d Z%d Z&d Z' G d d      Z( G d d      Z) G d dejT                        Z+ejX                  j[                  dddgddgddgddgddgd d gd!d!gd"dgd#dgd$dgd%d&gd'd&gd(d!gd)d*gd+dgd,d,gd-d-gd.d.gd/dgd0dgg      d1        Z.y)2z/Tests for the IPython tab-completion machinery.    N)contextmanager)Config)get_ipython)	completer)TemporaryDirectoryTemporaryWorkingDirectory)complete_object)
decorators)
Completionprovisionalcompletermatch_dict_keys_deduplicate_completions _match_number_in_dict_key_prefixcompletion_matcherSimpleCompletionCompletionContextc            
         ddl ddl} g }t        dd      D ].  }	 | j                  t	        |             |j                  |       0 fd}t         ||            }g }g }d\  }}|D ]_  \  }	}
|j                  |
|	z
         |j                  |	|z
  t        |dz         t        |	      t        |	|z
  dz  dz         d	f       |	|
}}a t        |      d
   S # t
        $ r Y w xY w)z
    utility to recompute the largest unicode range without any characters

    use to recompute the gap in the global _UNICODE_RANGES of completer.py
    r   N   c              3      K   j                  t        |       d       D ]"  \  }}t        |      }|d   d   |d   d   f $ y w)Nc                     | d   | d   z
  S )N   r    )pairs    C/usr/lib/python3/dist-packages/IPython/core/tests/test_completer.py<lambda>z:recompute_unicode_ranges.<locals>.ranges.<locals>.<lambda>8   s    a4PQ7AR     r   r   )groupby	enumeratelist)iab	itertoolss      r   rangesz(recompute_unicode_ranges.<locals>.ranges7   sP     %%il4RS 	$DAqQAA$q'1R58##	$s   AA)r   r   r   i d   %r   )r$   unicodedatarangenamechr
ValueErrorappendr    hexroundsorted)r(   validcr%   rglensgap_lenspstartpstopstartstopr$   s              @r   recompute_unicode_rangesr:   &   s    E1l# 	SV$ 	Q$
 
fUm	BDHMFE 
$tD5L!EAIE
%%-0456a8		
 t
$ (B3  		s   C	C&%C&c                      ddl m} m}  | dg      } | |      }t        |      }t        |      }d}||k7  s|dkD  r't	               \  }}}	}
d| d|
 d| d	|	 d
| d|	 d| d}||k(  sJ |       |dk  sJ |       y)zz
    Test that the ranges we test for unicode names give the same number of
    results than testing the full length.
    r   )_unicode_name_compute_UNICODE_RANGES)r   r   Ni z_UNICODE_RANGES likely wrong and need updating. This is
        likely due to a new release of Python. We've find that the biggest gap
        in unicode characters has reduces in size to be z characters
        (z), from z, to zH. In completer.py likely update to

            _UNICODE_RANGES = [(32, z), (zS, 0xe01f0)]

        And update the assertion below to use

            len_exp <= z	
        i41 )IPython.core.completerr<   r=   lenr:   )r<   r=   expected_listtestlen_explen_testmessagesizer8   r9   prcts              r   test_unicode_rangerG   O   s    
 N)=/:M 1D- G4yH G(g.":"<eT499= ?

xweD6 *%%*G4v 6  y !	
 h'' f%g%r   c               #      K   t               } | j                  j                  }	 d| j                  _        d  || j                  _        y # || j                  _        w xY wwNT)r   	Completergreedy)ipgreedy_originals     r   greedy_completionrN   q   sH     	Bll))O."-o   !A!A A!AA!
evaluationc              #      K   t               }|j                  j                  }	 | |j                  _        d  ||j                  _        y # ||j                  _        w xY wwN)r   rJ   rP   )rP   rL   evaluation_originals      r   evaluation_policyrT   |   sJ     	B,,116","5"5rO   c              #     K   t               }	 |j                  j                  j                  |        d  |j                  j                  j	                          y # |j                  j                  j	                          w xY wwrR   )r   rJ   custom_matchersextendclear)matchersrL   s     r   rV   rV      sY     	B-
$$++H5
$$**,$$**,s   B)A %B&BBc                      t         j                  dk(  rg d} ng d} | D ]!  \  }}t        j                  |      }||k(  r!J  y )Nwin32)abcr]   ) abcz" abc")a bcz"a bc")a  bcz"a  bc")  bcz"  bc")r\   )r^   z\ abc)r_   za\ bc)r`   za\ \ bc)ra   z\ \ bc)za(bcza\(bc)za)bcza\)bc)za( )bcz	a\(\ \)bc)za[1]bcza\[1\]bc)za{1}bcza\{1\}bc)za#bcza\#bc)za?bcza\?bc)za=bcza\=bc)za\bcza\\bc)za|bcza\|bc)za;bcza\;bc)za:bcza\:bc)za'bcza\'bc)za*bcza\*bc)za"bcza\"bc)za^bcza\^bc)za&bcza\&bc)sysplatformr   protect_filename)pairss1s2s1ps       r   test_protect_filenameri      sM    
||w

4  B((,byyr   c                 l    |D ]/  \  }}}t        |      }||z   }| j                  ||      }||k(  r/J  y rR   )r?   
split_line)splitter
test_specspart1part2split
cursor_poslineouts           r   check_line_splitrt      sH    ) ueZ
u}!!$
3e||	r   c            
          t        j                         } g d}t        | |       t        | |D cg c]  }t        t        |       c}       yc c}w )z,Basic line splitter test with default specs.)	)zrun some/scrip z
some/scrip)zrun scripts/erz
ror.py foo
scripts/er)z	echo $HOMrv   HOM)zprint sys.parv   sys.pa)zprint(sys.parv   ry   )zexecfile('scripts/errv   rw   )a[x.rv   x.)rz   yr{   )zcd "some_file/rv   z
some_file/N)r   CompletionSplitterrt   mapstr)sptps      r   test_line_splitr      sC    		%	%	'B

	A R Rq1!#c1+121s   A
c                   &    e Zd Zi Zd Zed        Zy)NamedInstanceClassc                 "    | | j                   |<   y rR   )	instances)selfr*   s     r   __init__zNamedInstanceClass.__init__   s    #tr   c                 6    | j                   j                         S rR   )r   keys)clss    r   _ipython_key_completions_z,NamedInstanceClass._ipython_key_completions_   s    }}!!##r   N)__name__
__module____qualname__r   r   classmethodr   r   r   r   r   r      s     I$ $ $r   r   c                       e Zd ZddZd Zy)KeyCompletablec                     || _         y rR   )things)r   r   s     r   r   zKeyCompletable.__init__   s	    r   c                 ,    t        | j                        S rR   )r    r   r   s    r   r   z(KeyCompletable._ipython_key_completions_   s    DKK  r   N)r   )r   r   r   r   r   r   r   r   r   r      s    !r   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zej(                  j+                  ej.                  dk(  d      d        Zd Zd Zej(                  j+                  ej6                  j8                  dv d      d        Zej(                  j+                  ej6                  j8                  dv d      d        Zej(                  j+                  ej6                  j8                  dv d      d        Zej(                  j+                  ej6                  j8                  dv d      d        Z ej(                  j+                  d      d        Z!ej(                  j+                  ej6                  j8                  dv d      d        Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8 e9jt                  d6      d7        Z; e9jt                  d8      d9        Z<d: Z=d; Z>d< Z?d= Z@d> ZAd? ZBd@ ZCdA ZDdB ZEdC ZFdD ZGdE ZHdF ZIdG ZJdH ZKej(                  j+                  ej6                  j8                  dv d      dI        ZLdJ ZMdK ZNyL)MTestCompleterc                 l    | j                  t              | _        | j                  j                          y)z]
        We want to silence all PendingDeprecationWarning when testing the completer
        N)assertWarnsPendingDeprecationWarning_assertwarns	__enter__r   s    r   setUpzTestCompleter.setUp   s*     !,,-FG##%r   c                 ^    	 | j                   j                  d d d        y # t        $ r Y y w xY wrR   )r   __exit__AssertionErrorr   s    r   tearDownzTestCompleter.tearDown   s1    	&&tT48 		s     	,,c                     t               } G d d      } |       |j                  d<   t        j                  |      d        }|j	                  d       y)?Test that errors from custom attribute completers are silenced.c                       e Zd Zy)5TestCompleter.test_custom_completion_error.<locals>.ANr   r   r   r   r   r   Ar          r   r   xc                     t        d      )Nzthis should be silenced)	TypeError)r"   existing_completionss     r   
complete_Az>TestCompleter.test_custom_completion_error.<locals>.complete_A  s    566r   r{   N)r   user_nsr	   registercomplete)r   rL   r   r   s       r   test_custom_completion_errorz*TestCompleter.test_custom_completion_error   sO    ]	 	 #

3		!	!!	$	7 
%	7 	Dr   c                 N   t               }|j                  d      \  }}|j                  d      |j                  d      k  sJ d }|j                  j                  j                  d|       |j                  d      \  }}|j                  d      |j                  d      k  sJ y	)
r   ininputintc                 
    ddgS )Nexample2example1r   )r"   s    r   complete_examplezGTestCompleter.test_custom_completion_ordering.<locals>.complete_example  s    
++r   zex*exr   r   N)r   r   indexrJ   custom_completersadd_re)r   rL   _matchesr   s        r   test_custom_completion_orderingz-TestCompleter.test_custom_completion_ordering	  s    ][[&
7}}W%e(<<<<	, 	&&--e5EF[[&
7}}Z(7==+DDDDr   c                     t               }g d}|t        t        t        |            z   D ]B  }|j	                  |      \  }}| j                  |t               | j                  |t               D y )N)ruz%ruzcd /floaz	float(x)/)r   r    r~   r   r   assertIsInstance)r   rL   sr   textr   s         r   test_unicode_completionsz&TestCompleter.test_unicode_completions  sb    ] 7T#c1+&& 	1A
 KKNMD'!!$,!!'40	1r   c                    ddl m} dd l}t               }|j	                  t        |      d      }|D ]>  }|j                  |      \  }}| j                  ||       | j                  |||   g       @ |j                  d      \  }}| j                  |d       | j                  |d   |d          |j                  d      \  }}| j                  d|       | j                  d|       y )Nr   )latex_symbols
   zprint(\alphaz\alphaz\alz\aleph)	IPython.core.latex_symbolsr   randomr   sampler0   r   assertEqualassertIn)r   r   r   rL   r   kr   r   s           r   test_latex_completionsz$TestCompleter.test_latex_completions%  s    <]}}VM2B7 	:AKKNMD'T1%W}Q'7&89	:
 O4gy)]9%=>F+gi)i)r   c                     t               }|j                  j                  d      \  }}| j                  |d       | j                  |d       y)za
        forward latex should really return nothing in either field if nothing is found.
        z\really_i_should_match_nothingrv   r   N)r   rJ   latex_matchesr   )r   rL   r   r   s       r   test_latex_no_resultsz#TestCompleter.test_latex_no_results9  sD     ]223TUgr""%r   c                 f    t               }|j                  d      \  }}| j                  |dg       y )Nu   \βz\betar   r   r   r   rL   r*   r   s       r   test_back_latex_completionz(TestCompleter.test_back_latex_completionB  s/    ] F+g8*-r   c                 f    t               }|j                  d      \  }}| j                  |dg       y )Nu   \Ⅴ\ROMAN NUMERAL FIVEr   r   s       r   test_back_unicode_completionz*TestCompleter.test_back_unicode_completionI  s/    ]G,g#9":;r   c                     t               }|j                  d      \  }}| j                  |dg       | j                  |dg       y )Nr      Ⅴr   r   s       r   test_forward_unicode_completionz-TestCompleter.test_forward_unicode_completionO  s@    ]$:;g5'*8*-r   c                     t        j                         }d|_        | j                  |j                  d       | j                  |j                  d       y )N z[\ ])r   r}   delimsr   _delim_expr)r   r   s     r   test_delim_settingz TestCompleter.test_delim_settingV  s?    ))+	C(1r   c                 Z    t        j                         }d|_        g d}t        ||       y)z%Test with only spaces as split chars.r   ))foorv   r   )run foorv   r   )r   barr   N)r   r}   r   rt   )r   r   r   s      r   test_spaceszTestCompleter.test_spaces\  s&    ))+	SQr   c                 \    dD ]'  }| j                  t        j                  |      d       ) y )N)'z'''z'hi' 'r   r   r   has_open_quotesr   r   s     r   test_has_open_quotes1z#TestCompleter.test_has_open_quotes1c  .    ' 	@AY66q93?	@r   c                 \    dD ]'  }| j                  t        j                  |      d       ) y )N)"z"""z"hi" "r   r   r   s     r   test_has_open_quotes2z#TestCompleter.test_has_open_quotes2g  r   r   c                 Z    dD ]&  }| j                  t        j                  |             ( y )N)z''z''' '''z'hi' 'ipython'assertFalser   r   r   s     r   test_has_open_quotes3z#TestCompleter.test_has_open_quotes3k  *    4 	;AY66q9:	;r   c                 Z    dD ]&  }| j                  t        j                  |             ( y )N)z""z""" """z"hi" "ipython"r   r   s     r   test_has_open_quotes4z#TestCompleter.test_has_open_quotes4o  r   r   r[   z#abspath completions fail on Windows)reasonc                    t               }t               5 }t        j                  j	                  |d      }ddg}|D cg c]  }||z   	 }}|D ]  }t        |dd      j                            |j                  |      d   }| j                  ||       d|z  }	|j                  ||	      d   }|D cg c]  }||z   	 }
}| j                  ||
       d d d        y c c}w c c}w # 1 sw Y   y xY w)	Nr   12wutf-8encodingr   	a = f("%s)	r   r   ospathjoinopencloser   r   )r   rL   tmpdirprefixsuffixesr   namesnr2   cmdcomps              r   test_abspath_file_completionsz+TestCompleter.test_abspath_file_completionss  s     ]! 	&VWW\\&%0FSzH)12AVaZ2E2 7Qg.4467 F#A&AQ& &CFC(+A(011FQJ1D1Q%	& 	& 3 2	& 	&s)   )C&C
A)C&3C!?C&
C&&C/c                    t               }t               5  d}ddg}|D cg c]  }||z   	 }}|D ]  }t        |dd      j                            |j	                  |      d   }| j                  ||       d|z  }|j	                  ||      d   }|D ch c]  }||z   	 }	}| j                  |	j                  t        |                   d d d        y c c}w c c}w # 1 sw Y   y xY w)	Nz./foor   r   r   r  r  r   r  )	r   r   r  r	  r   r   
assertTrueissubsetset)
r   rL   r  r  r   r  r  r2   r  r  s
             r   test_local_file_completionsz)TestCompleter.test_local_file_completions  s    ]&( 	3FSzH)12AVaZ2E2 7Qg.4467 F#A&AQ& &CFC(+A(011FQJ1D1OODMM#a&12	3 	3 3 2	3 	3s(   CCA)CC!+C
CC(c                    t               fd}t               5  d}t        |dd      j                          t        j
                  dk(  r|nd} |d      d	   }| j                  |j                  |        |d
      d	   }| j                  |j                  |        |d      d	   }| j                  |j                  |       d d d        y # 1 sw Y   y xY w)Nc                 ^    j                   j                  dt        |       |       d   d   S )Nr   )cursor_linerq   	full_textzIPCompleter.file_matchercompletions)rJ   	_completer?   )r   rL   s    r   r   z5TestCompleter.test_quoted_file_completions.<locals>._  s:    <<))#d)t * (**79 9r   zfoo'barr   r  r  r[   zfoo\'barz	open('foor   z	open("fooz%ls foo)r   r   r  r	  rb   rc   r   r   )r   r   r*   escapedr2   rL   s        @r   test_quoted_file_completionsz*TestCompleter.test_quoted_file_completions  s    ]	9
 '( 	.DsW-335 "llg5d;G +q!AQVVW- +q!AQVVT* )QAQVVW-#	. 	. 	.s   B+CC)alphazParso does not yet parse 3.13c                    t               }|j                  }|j                  d       dD ]  }t               5  ||j                  _        |j                  d      }|dgk(  s	J ||f       |j                  d      }t        |      dkD  s	J ||f       |j                  d      }|ddgk(  sJ |       	 d	d	d	        y	# 1 sw Y   xY w)
zr
        Make sure the output of `IPCompleter.all_completions` does not have
        duplicated prefixes.
        zclass TestClass():
	a=1
	a1=2)TFTestCl	TestClassz
TestClass.   zTestClass.azTestClass.a1N)r   rJ   r   r   use_jediall_completionsr?   )r   rL   r2   jedi_statusr   s        r   test_all_completions_dupsz'TestCompleter.test_all_completions_dups  s     ]LL
12( 	OK%' O(3%++H5;-/G+w1GG/++L97|a'?+w)??'++M:=."AAN;NAO O	OO Os   A9B<<C	c                    t               dfd	}fd}ddl}t        d |j                  j	                  d      dd D              }|dkD  r
 |d	d
d        |ddd        |ddd        |ddddd        |ddd       y)z4
        A couple of issue we had with Jedi
        Nc                 .   t        |      }||n|}||n|}t               5  dj                  _        t	        j                  j                  ||            }dj                  _        t        |||      |v sJ |        	 d d d        y # 1 sw Y   y xY wNTFr?   r   rJ   r$  r  r  r   )r   r   r  r8   endlr  rL   s          r   _test_completez/TestCompleter.test_jedi.<locals>._test_complete  s    AA".EAE#aC%' K(,%!",,":":1a"@A(-%!%d3{BJFJB	K K Ks   ABBc                    t        |      }t               5  dj                  _        t	        j                  j                  ||            }dj                  _        t        |||      |vsJ |        	 d d d        y # 1 sw Y   y xY wr*  r+  )r   r   r  r-  r  rL   s        r   _test_not_completez3TestCompleter.test_jedi.<locals>._test_not_complete  sz    AA%' I(,%!",,":":1a"@A(-%!!Q-[@H&H@	I I Is   AA??Br   c              3   2   K   | ]  }t        |        y wrR   )r   ).0r!   s     r   	<genexpr>z*TestCompleter.test_jedi.<locals>.<genexpr>  s     MSVMs   .   )r   r   z'jedi >0.9 should complete and not crashza=1;a.realzcan infer first argumentza=(1,"foo");a[0].zcan infer second argumentza=(1,"foo");a[1].
capitalizezcover duplicate completionsimimportr#  zdoes not mix types)NN)r   jedituple__version__rp   )r   r.  r0  r:  jedi_versionrL   s        @r   	test_jedizTestCompleter.test_jedi  s     ]	K	I 	MT-=-=-C-CC-H!-LMM'!DhPVW13FO24GV4dHaK/1DlSr   c                 <   t               }t               5  d|j                  _        |j                  j	                  dd      }t        |      }d|j                  _        ddd       dj                  v sJ d       d|j                  v sJ d       y# 1 sw Y   4xY w)	zp
        Lets make sure jedi is capable of pulling out the signature of the function we are completing.
        Toper5  FNfilez0Signature of function was not found by completerr  )r   r   rJ   r$  r  next	signaturer   rL   r  r2   s       r   test_completion_have_signaturez,TestCompleter.test_completion_have_signature  s     ]!# 	*$(BLL!,,225!<K[!A$)BLL!		*
 $X&XX$!++%	>=	>%	* 	*s   A
BBc                     t               }t               5  d|j                  _        |j                  j	                  dd      }t        |      }ddd       j                  dk(  sJ d       y# 1 sw Y    xY w)zB
        Lets make sure matchers provide completion type.
        Fz%timr5  Nmagicz+Type of magic was not assigned by completer)r   r   rJ   r$  r  rB  typerD  s       r   test_completions_have_typez(TestCompleter.test_completions_have_type  sl     ]!# 	"$)BLL!,,2261=K[!A	" vv O"OO 		" 	"s   9A--A6zKnown failure on jedi<=0.18.0c           
         t               }|j                  t        j                  d             t	               5  d|j
                  _        t        t        d|j
                  j                  dd                  }d|j
                  _        ddd       t              dk(  s
J d|z         |d	   j                  d
k(  sJ y# 1 sw Y   6xY w)zd
        Test that completions are correctly deduplicated (even if ranges are not the same)
        z.
        class Z:
            zoo = 1
        TzZ.zr5  FNr   z1Completions (Z.z<tab>) correctly deduplicate: %s r   zoo)r   r   textwrapdedentr   rJ   r$  r    r   r  r?   r   )r   rL   r-  s      r   test_deduplicate_completionsz*TestCompleter.test_deduplicate_completions  s    
 ]
OO	
 "# 	*$(BLL!(0H0HPQ0RSA %*BLL!	* 1v{SORSSS{tyyE!!!	* 	*s   AC  C	c                     t               j                  d       j                  d       j                  dd      \  }} j                  d|v d|z          fd}t	               5   |dd	dd
t        d	d	d              |ddddt        d	dd              |ddddt        d	dd              |ddddt        ddd              |ddddt        ddd             d d d        y # 1 sw Y   y xY w)!a-  
        Test the capability of the Greedy completer.

        Most of the test here does not really show off the greedy completer, for proof
        each of the text below now pass with Jedi. The greedy completer is capable of more.

        See the :any:`test_dict_key_completion_contexts`

        za=list(range(5))zd = {'a b': str}r4  za[0].)rr   z.realz$Shouldn't have completed on a[0]: %sc                    t               5  t               5  dj                  _        j	                  d| |      \  }}	j                  ||||z         dj                  _        t               5  j                  j                  | |      }d d d        	j                  |       d d d        d d d        y # 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NFr4  )rr   rq   T)rN   r   rJ   r$  r   r   r  )
rr   rq   expectrD   
completionr   r2   r  rL   r   s
           r   r   z0TestCompleter.test_greedy_completions.<locals>._B  s    "$ 7&:&< 7(-%{{3Tj{I1fa15(,%)+ M"$,,":":4"LKMj+67 7 7M M7 7 7 7s;   CAC1B9C(C9C>CC	
CC   z"Should have completed on a[0].: %sr6  za[0].r   z#Should have completed on a[0].r: %sz
a[0].from_r   z.from_bytesz'Should have completed on a[0].from_: %s
from_byteszassert str.star   zstr.startswithz.Should have completed on `assert str.star`: %s   
startswithzd['a b'].str   z.stripz+Should have completed on `d['a b'].str`: %s	   stripN)r   r   r   r   r   r   )r   r   r2   rL   s   `  @r   test_greedy_completionsz%TestCompleter.test_greedy_completions.  s!    ]
 !
 !{{3W{-1A'MPQ'QR		7 "# $	41a( 51a( 91b,/ ! @2r<0 =1b'*=$	 $	 $	s   ,A4C))C2c                 (   t               }d|_        i |_        |j                  }|j	                  d       t               }d|j                  _        |j                  |       t               5  d|_
        |j                  d      \  }}| j                  d|       | j                  d|       d d d        t               }d|j                  _        |j                  |       t               5  d|_
        |j                  d      \  }}| j                  d|       d d d        t               }d|j                  _        |j                  |       t               5  d|_
        |j                  d      \  }}| j                  d|       | j                  d|       d d d        t               5  d|_
        |j                  d	      \  }}| j                  d
|       d d d        |`|`y # 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   3xY w)Nr   zip=get_ipython()r   Fzip.z
ip.__str__zip._hidden_attrr#  zip._x.z
ip._x.keys)r   _hidden_attr_xrJ   r   r   IPCompleteromit__namesupdate_configr   r$  r   r   assertNotInr   rL   r2   cfgr   r   s         r   test_omit__nameszTestCompleter.test_omit__namess  s   ]LL
 !h&'#	!# 	6AJE*JAwMM,0MM+W5		6 h&'#	!# 	4AJE*JAw\73	4 h&'#	!# 	9AJE*JAw\73.8		9 "# 	1AJH-JAwMM,0	1 OEc	6 	6	4 	4	9 	9	1 	1s2   ,A G#*.G0A G<(.H#G-0G9<HHc                 &   t               }|j                  }d|_        |j                  d       |j                  d       t	               }d|j
                  _        |j                  |       |j                  d      \  }}| j                  d|       y)zW
        Limit to all is deprecated, once we remove it this test can go away. 
        Fzclass D: x=24zd=D()zd.zd.xN)
r   rJ   r$  r   r   r`  limit_to__all__rb  r   r   rd  s         r   test_limit_to__all__False_okz*TestCompleter.test_limit_to__all__False_ok  sq     ]LL

o
gh*/'	ZZ%
7eW%r   c                 r     G d d      }t        j                   |             }| j                  |dg       y )Nc                       e Zd ZddgZy)2TestCompleter.test_get__all__entries_ok.<locals>.Ar   r   N)r   r   r   __all__r   r   r   r   rl    s    AhGr   r   r   r   get__all__entriesr   r   r   wordss      r   test_get__all__entries_okz'TestCompleter.test_get__all__entries_ok  s2    	 	 ++AC0&r   c                 p     G d d      }t        j                   |             }| j                  |g        y )Nc                       e Zd Zy);TestCompleter.test_get__all__entries_no__all__ok.<locals>.ANr   r   r   r   r   ru    r   r   r   rn  rp  s      r   "test_get__all__entries_no__all__okz0TestCompleter.test_get__all__entries_no__all__ok  s0    	 	 ++AC0#r   c                    t               }|j                  }d|_        |j                  d       |j	                  d d      \  }}| j                  d|       |j	                  d dd      \  }}| j                  d|       |j	                  d d      \  }}| j                  d|       |j	                  d d      \  }}| j                  d	|       y )
NFzdef myfunc(a=1,b=2): return a+bz
myfunc(1,bzb=zmyfunc(1,b)r   zmyfunc(a="escaped\")string",bzmin(k, kzkey=)r   rJ   r$  r   r   r   r   rL   r2   r   r   s        r   test_func_kw_completionsz&TestCompleter.test_func_kw_completions  s    ]LL

/0ZZl3
7dG$ZZmR8
7dG$ZZ&FG
7dG$ZZj1
7fg&r   c                    t               }|j                  }|j                  d      }| j                  |dg       |j                  d      }| j                  |g d       |j                  d      }| j                  |g d       y )Nz"min(iterable[, key=func]) -> valuekeyz@Minuit.migrad(self, int ncall=10000, resume=True, int nsplit=1)
)ncallresumensplitzB
 Minuit.migrad(self, int ncall=10000, resume=True, int nsplit=1)
)r   rJ   !_default_arguments_from_docstringr   )r   rL   r2   kwds       r   %test_default_arguments_from_docstringz3TestCompleter.test_default_arguments_from_docstring  s    ]LL112VWug&11O
 	;<11R
 	;<r   c                     t               }|j                  }|j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j                  d|       y )Nlsmagz%lsmagicz%lsmag)r   rJ   r   r   rx  s        r   test_line_magicszTestCompleter.test_line_magics  sV    ]LLZZg.
7j'*ZZh/
7j'*r   c                     ddl m} |d        }t               }|j                  }|j	                  d d      \  }}| j                  d|       |j	                  d d      \  }}| j                  d|       y )Nr   )register_cell_magicc                      y rR   r   rr   cells     r   
_foo_cellmz2TestCompleter.test_cell_magics.<locals>._foo_cellm      r   _foo_cez%%_foo_cellmz	%%_foo_ce)IPython.core.magicr  r   rJ   r   r   )r   r  r  rL   r2   r   r   s          r   test_cell_magicszTestCompleter.test_cell_magics  sm    :		 
	 ]LLZZi0
7ng.ZZk2
7ng.r   c                    ddl m} |d        }t               }|j                  }|j	                  d d      \  }}| j                  d|       | j                  d|       |j	                  d d      \  }}| j                  d|       | j                  d|       |j	                  d d      \  }}| j                  d|       | j                  d|       y )	Nr   )register_line_cell_magicc                      y rR   r   r  s     r   
_bar_cellmz7TestCompleter.test_line_cell_magics.<locals>._bar_cellm  r  r   _bar_cez%_bar_cellmz%%_bar_cellmz%_bar_cez	%%_bar_ce)r  r  r   rJ   r   r   rc  )r   r  r  rL   r2   r   r   s          r   test_line_cell_magicsz#TestCompleter.test_line_cell_magics  s    ?	!	 
"	 ]LL ZZi0
7mW-ng.ZZj1
7mW-ng.ZZk2
70ng.r   c                     t               }|j                  }|j                  d      \  }}| j                  |ddg       y )Ntimeitz%timeitz%%timeit)r   rJ   r   r   r   rL   r2   r   r   s        r   test_magic_completion_orderz)TestCompleter.test_magic_completion_order  s;    ]LL 

8,g9j"9:r   c                 d   t               }|j                  }d|_        |j                  d      \  }}| j	                  |dg       |j                  d       |j                  d      \  }}| j	                  |dg       |j                  d= |j                  d      \  }}| j	                  |dg       y )NFmat%matplotlibmatplotlib = 1
matplotlib)r   rJ   r$  r   r   run_cellr   r  s        r   test_magic_completion_shadowingz-TestCompleter.test_magic_completion_shadowing$  s    ]LL
 

5)g=/2 	$%

5)g<.1 JJ|$

5)g=/2r   c                     t               }|j                  }|j                  d      \  }}| j                  |dg       |j	                  d       |j                  d      \  }}| j                  |dg       y)z
        If the user try to complete a shadowed magic, and explicit % start should
        still return the completions.
        z%matr  r  N)r   rJ   r   r   r  r  s        r   (test_magic_completion_shadowing_explicitz6TestCompleter.test_magic_completion_shadowing_explicit8  sm    
 ]LL 

6*g=/2
$% 

6*g=/2r   c                    t               }|j                  }|j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j	                  d|       |j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j                  dg|       |j                  d d      \  }}| j                  dg|       |j                  d d      \  }}| j                  dg|       |j                  d d	      \  }}| j                  dg|       |j                  d d
      \  }}| j                  d|       |j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j                  dg|       |j                  d d      \  }}| j                  dg|       y )Nconfz%configAliasManagerzconfig z%config z
config Aliz%config Alizconfig AliasManagerz%config AliasManagerzconfig AliasManager.zAliasManager.default_aliasesz%config AliasManager.zconfig AliasManager.der   rJ   r   r   rc  assertListEqualrx  s        r   test_magic_configzTestCompleter.test_magic_configK  s   ]LLZZf-
7i)ZZf-
71ZZi0
7ng.ZZj1
7ng.ZZl3
7n-w7ZZm4
7n-w7ZZ&;<
7n-w7ZZ&<=
7n-w7ZZ&<=
74g>ZZ&=>
74g>ZZ&>?
7<=wGZZ&>?
7<=wGr   c                 V   t               }|j                  }|j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j	                  d|       |j                  d d      \  }}| j	                  d|       |j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j                  d|       |j                  d d      \  }}| j                  dg|       |j                  d d      \  }}| j                  dg|       y )Ncoloz%colorsNoColorzcolors z%colors zcolors NoCoz%colors NoCor  rx  s        r   test_magic_colorzTestCompleter.test_magic_colorh  s   ]LLZZf-
7i)ZZf-
7G,ZZi0
7G,ZZi0
7i)ZZj1
7i)ZZm4
7i['2ZZn5
7i['2r   c                 n   dfd}ddg} ||d      dddgfk(  sJ  ||d	      dddgfk(  sJ  ||d
      dddgfk(  sJ  ||d      dddgfk(  sJ  ||d      dddgfk(  sJ  ||d      dddgfk(  sJ  ||d      dddgfk(  sJ  ||d      dddgfk(  sJ g d} ||d      dddgfk(  sJ  ||d      dddgfk(  sJ g d} ||d      dddgfk(  sJ  ||d      ddddgfk(  sJ  ||d      ddddgfk(  sJ  ||d      dddd gfk(  sJ  ||d!      ddg fk(  sJ  ||d"      ddg fk(  sJ y#)$z
        Test that match_dict_keys works on a couple of use case does return what
        expected, and does not crash
         	
`!@#$^&*()=+[{]}\|;:'",<>?c                  B    t        | di|\  }}}||t        |      fS )Nr   r   r    )argskwargsquoteoffsetr   r   s        r   matchz1TestCompleter.test_match_dict_keys.<locals>.match  s/    %4d%T6%TV%T"E67&$w-//r   r   s   farb'r   r#  farzb'fb"r   zb"fr   z'fz"f)r   W  )r   i    r   )r  rA   33rv   r   3333l   >[= r  i  1999      0xdead
0xdeadbeefr   11111234r   21220b1010b101010b10110
a_variablez'' ''Nr   )r   r  r   r   s      @r   test_match_dict_keysz"TestCompleter.test_match_dict_keys{  s   
 5	0 vT4 S!eW$5555T5!c1ug%6666T4 S!eW$5555T5!c1ug%6666T3CUG#4444T4 S!eW$5555T3CUG#4444T4 S!eW$5555 MT4 S!eW$5555T4 RVH$5555
 T8$Q(????T3BFF+;#<<<<T3BD$<#8888T7#A	9/E'FFFF T<(RBK777 T7#Ar{222r   c                 N   dg d}ddfd
} ||dd      ddd	d
gfk(  sJ  ||dd      ddd	d
gfk(  sJ  ||dd      ddd
gfk(  sJ  ||dd      ddd
gfk(  sJ  ||dd      ddd	gfk(  sJ  ||dd      ddd	gfk(  sJ  ||dd      ddd	gfk(  sJ  ||dd      ddd	gfk(  sJ  ||dd      ddg fk(  sJ  ||dd      ddg fk(  sJ ddg} ||dd      dddgfk(  sJ  ||dd      dddgfk(  sJ  ||dd      dddgfk(  sJ  ||dd      ddg fk(  sJ g d} ||dd      dddgfk(  sJ  ||d d      d d!d"d#gfk(  sJ  ||dd$      ddd	gfk(  sJ  ||d d$      d d!d%d&gfk(  sJ  ||dd'      ddg fk(  sJ  ||d(      d d!d)gfk(  sJ y)*z
        Test that match_dict_keys called with extra prefix works on a couple of use case,
        does return what expected, and does not crash.
        r  )r   r   )r   oof)r   s   bar)otherrA   N)extrac                 D    t        || d|\  }}}||t        |      fS )N)r   extra_prefixr  )r  r  r  r  r  r   r   s         r   r  z7TestCompleter.test_match_dict_keys_tuple.<locals>.match  s6    %4f5&<B&"E67 &$w-//r   r   )r   r   r   r  r   z'oz"or  r#  r  zb'bzb"b)no_foo)fo)foo1foo2foo3foo4)r  r  r   r  z'foo)r  r  )r  r  r  )r  r  r  r  )r  )r   2222r  )r  i\  r  rv   r   r  z'2222')r  'bar'4444)r  r  r  r   )r   r   r  r   s      @r   test_match_dict_keys_tuplez(TestCompleter.test_match_dict_keys_tuple  s   
 5S# 	0 T3h/CUEN3KKKKT3h/CUEN3KKKKT4x0S!eW4EEEET4x0S!eW4EEEET4x0S!eW4EEEET4x0S!eW4EEEET51c1ug5FFFFT51c1ug5FFFF T3k2sArlBBBT3g.32,>>>02QRT63Q7IIIIT6)9:sAx>PPPPT6)ABsAPVxFXXXXT6)IJO
 
 	
 
 MT3h/CVH3EEEET2X.2q68:L2MMMMT3g.3E72CCCCT2W-"a'69J1KKKKT3i0S!RL@@@T4 RVH$5555r   c           	         t               }|j                  j                  }d|j                  _        d d d d d d d d d|j                  d<    |d      \  }}| j                  d|       | j                  d|       | j                  d|       | j                  d	|       | j                  d
|       | j                  d|        |d      \  }}| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       d|j                  _        y )NT))aarW  )bbr  r  cc)M   r   )X   r|   r  c   dd[line_bufferz'aa', z'bb'z'cc']z77, 88z99]zd['aa', z11]z'bb', z'bb']z'cc'z'cc', F)r   rJ   r   auto_close_dict_keysr   r   rc  r   rL   r   r   r   s        r   !test_dict_key_completion_closuresz/TestCompleter.test_dict_key_completion_closures  s;   ]<<((,0) 


3" $/
7h(fg&gw' 	fg&dG$eW%*5
7eW%)7+'*)7+'*,1)r   c                    t               }|j                  j                  }ddi|j                  d<    |d      \  }}| j	                  d|       | j                  d|        |d      \  }}| j	                  d|       | j                  d	|        |d
      \  }}| j	                  d|       | j                  d	|        |d      \  }}| j	                  d|       | j                  d|        |d      \  }}| j	                  d|       | j                  d|        |dd      \  }}| j	                  d|        |dd      \  }}| j	                  d|       | j                  d|       | j                  d	|       ddddddt               dddddddi|j                  d<    |d
      \  }}| j	                  d|       | j	                  d|       | j                  d|       | j                  d|       | j                  d|       t        d |D              rJ |       ddddd|j                  d<    |d
      \  }}| j	                  d|       | j	                  d|       | j	                  d|       | j	                  d |       t        d! |D              rJ |        |d"      \  }}| j	                  d#|        |d$      \  }}| j	                  d%|        |d      \  }}| j	                  d&|        |d'      \  }}| j	                  d%|       d(|j                  j                  j                  vr/d)di|j                  d<    |d*      \  }}| j	                  d)|       d+di|j                  d<    |d      \  }}| j	                  d,|       | j                  d-|       | j                  d.|       | j                  d/|       | j                  d0|        |d1      \  }}| j	                  d/|       | j                  d2|       | j                  d3|        |d4      \  }}| j	                  d/|        |d5      \  }}| j	                  d.|        |d6      \  }}| j	                  d0|       | j                  d/|        |d7      \  }}| j                  d0|       | j                  d/|        |d8d9      \  }}| j	                  d.|       | j                  d0|       | j                  d,|       | j                  d/|        |dd      \  }}| j	                  d/|       t        d: |D              rJ |        |d;d      \  }}| j	                  d/|       t        d< |D              rJ |        |d=d>      \  }}| j	                  d0|       t        d? |D              rJ |        |d@d9      \  }}| j	                  d.|       | j                  d0|       dAdi|j                  d<    |d6      \  }}| j	                  d0|       | j                  d/|       | j                  dB|        |dC      \  }}| j	                  dB|       | j                  d/|       | j                  d0|       y)Dz.Test dictionary key completion for string keysr]   Nr  r  r  'abc''abc']d['abc']zd['azd["zabc"]d["azd[]r#  )r  rq   zd['']r5  abc'abdbadrS  )abeN)Nabfr  r  c              3   >   K   | ]  }|j                  d         yw)]r   r   Nendswithr2  ms     r   r3  z@TestCompleter.test_dict_key_completion_string.<locals>.<genexpr>@       Dqqzz/2D   )za
bza'ba"ba wordza\nbza\'br  r  c              3   >   K   | ]  }|j                  d         ywr  r  r  s     r   r3  z@TestCompleter.test_dict_key_completion_string.<locals>.<genexpr>I  r  r   zd['a wwordzd['a\'r#   z"a'b"zd["a'-zbefore-afterzd['before-afr  z'foo'z'foo']r  r   r   zd['fzfoo']zfoo"]zd['fooz	d['foo', zd['foo', 'bzd['foo', 'fz	d['foo',]   c              3   >   K   | ]  }|j                  d         ywr  r  r  s     r   r3  z@TestCompleter.test_dict_key_completion_string.<locals>.<genexpr>  r  r   zd[""]c              3   >   K   | ]  }|j                  d         ywr  r  r  s     r   r3  z@TestCompleter.test_dict_key_completion_string.<locals>.<genexpr>  r  r   z
d["foo","]rZ  c              3   >   K   | ]  }|j                  d         ywr  r  r  s     r   r3  z@TestCompleter.test_dict_key_completion_string.<locals>.<genexpr>  r  r   z	d["foo",])r   r   foobarr
  zd['foo', 'bar', 'fo)
r   rJ   r   r   r   rc  objectanyrl   r   r  s        r   test_dict_key_completion_stringz-TestCompleter.test_dict_key_completion_string	  sA   ]<<(( $-

3 $/
7gw'7+%0
7eW%'*&1
7eW%'* %0
7eW%'*&1
7eW%'* %A>
7gw''a@
7eW%)'* 444Hdt44


3 &1
7eW%eW%(((DGDDMgMD $(TTR

3&1
7gw'gw'eW%h(DGDDMgMD (3
7fg& )4
7c7# $/
7h( (3
7c7# bll++222-t4BJJsO!n=JAwMM.'2 *40

3$/
7gw'7+'*(( &1
7eW%'*'*(3
7eW% +6
7gw'-8
7eW%( -8
7(( +!D
7gw'('*('a@
7eW%DGDDMgMD'a@
7eW%DGDDMgMD,1E
7eW%DGDDMgMD+!D
7gw'( 4T:

3 -8
7eW%(7+ *?@
7h(((r   c                    t               }|j                  j                  }d d d d d d d|j                  d<    |d      \  }}| j	                  d|       | j	                  d|       | j                  d|       | j                  d|        |d	      \  }}| j	                  d
|        |d      \  }}| j	                  d|       | j	                  d|        |d      \  }}| j	                  d|       | j	                  d|       y )Nr  r  zd[1r  r  r  r  z'1999'zd[0xdeadr  zd[2r  r  zd[0b101r  r  r   rJ   r   r   r   rc  r  s        r    test_dict_key_completion_numbersz.TestCompleter.test_dict_key_completion_numbers  s    ]<<(( 


3 %0
7fg&fg&)7+*5
7lG,%0
7dG$dG$)4
7i)i)r   c                     t               }|j                  j                  ddi|j                  d<    G fdd      }||j                  d<   fd|j                  d<   di|j                  d	<    fd
} fd} |d        |d        |d        |d        |d        |d        |d        |d       t	        d      5  t        j                  t              5   |d       ddd       ddd        fd} |d       t               5   |d        |d        |d        |d        |d       ddd       y# 1 sw Y   axY w# 1 sw Y   exY w# 1 sw Y   yxY w)z<Test expression contexts in which dict key completion occursr]   Nr  c                       e Zd ZW  Zy):TestCompleter.test_dict_key_completion_contexts.<locals>.CN)r   r   r   datar  s   r   Cr    s    Dr   r  c                       S rR   r   r  s   r   r   zATestCompleter.test_dict_key_completion_contexts.<locals>.<lambda>  s    A r   getr   nestedc                       di | \  }}j                  d|       j                  d|       j                  d|       j                  d|       j                  d|       y )Nr]   r  r  r  r  r   )rc  r  r   r   r   r   s      r   assert_no_completionzMTestCompleter.test_dict_key_completion_contexts.<locals>.assert_no_completion  sd    !+F+JAwUG,VW-Wg.Wg.Xw/r   c                  d     di | \  }}j                  d|       j                  d|       y )Nr  r  r   )r   rc  r  s      r   assert_completionzJTestCompleter.test_dict_key_completion_contexts.<locals>.assert_completion  s2    !+F+JAwMM'7+Xw/r   zd['a'r  zd["a"zd['a' + z	d['a' + 'z+ d[z(d[zC.data[znested['x'][minimalc                  @     di | \  }}j                  d|       y )Nzget()['abc']r   )r   r  s      r   r  zJTestCompleter.test_dict_key_completion_contexts.<locals>.assert_completion  s"    !+F+JAwMM.'2r   zget()[zget()['zget()['az	get()['abz
get()['abc)	r   rJ   r   r   rT   pytestraisesr   rN   )r   rL   r  r  r  r   r  s   `    @@r   !test_dict_key_completion_contextsz/TestCompleter.test_dict_key_completion_contexts  sU   ]<<((DM

3	 	 

3%

5 #Qx

8	0	0 	1145 	f-e,i0 	n5y) 	>~. >!n=>	>
	3 	2  	8(3)4*5+6,7	8 	8> >	> 	>	8 	8s0   E$.
E8E$!.E0E!	E$$E-0E9c                     t               }|j                  j                  }ddd|j                  d<    |d      \  }}| j	                  d|       | j	                  d|       y)z-Test handling of bytes in dict key completionN)r]   s   abdr  r  r  r  zb'abd'r  r  s        r   test_dict_key_completion_bytesz,TestCompleter.test_dict_key_completion_bytes  sW    ]<<(("&5

3$/
7gw'h(r   c                    t               }|j                  j                  }ddi|j                  d<   t        j
                  dk7  r |d      \  }}| j                  d|        |d      \  }}| j                  d|       t               5   |d      \  }}| j                  d	|        |d      \  }}| j                  d
|       ddd       y# 1 sw Y   yxY w)z/Test handling of unicode in dict key completionu   aאNr  r[   z
d['a\u05d0r  u05d0u   d['aאzd['a\u05d0']u   d['aא'])r   rJ   r   r   rb   rc   r   rN   r  s        r   $test_dict_key_completion_unicode_py3z2TestCompleter.test_dict_key_completion_unicode_py3  s    ]<<(($d+

3 <<7"!m<JAwMM'7+ ,7
7i)  	3!m<JAwMM/73 "l;JAwMM.'2	3 	3 	3s   =CCnumpyc                 (    ddl t               j                  j                  j	                  g ddg      j
                  d<    d      \  }} j                  d	|        j                  d
|       j                  dddgfdg      j                  d      }|d   j
                  d<    d      \  }} j                  d|        j                  d|        fd}t               5   |        ddd       t        d      5   |        ddd       t        d      5  t        j                  t              5   |        ddd       ddd       y# 1 sw Y   bxY w# 1 sw Y   SxY w# 1 sw Y   *xY w# 1 sw Y   yxY w)z7Test dict key completion applies to numpy struct arraysr   N)hellof)worldr,  dtyper  r  r  r+  r-  my_head)my_dt>u4)my_dfr2  )my_dataz>f4rS  r#  r   r4  c            	         j                  d      j                  d<    d      \  } }j                  t        |D cg c]  }d|v  c}             j                  t        |D cg c]  }d|v  c}             y c c}w c c}w )Nr#  r.  r  zd[1]['my_head']['r  r1  r3  )zerosr   r  r  )r   r   r  r   dtrL   r)  r   s      r   completes_on_nestedzKTestCompleter.test_struct_array_key_completion.<locals>.completes_on_nestedF  su    #kk!2k6BJJsO!.ABJAwOOCw ?!A ?@AOOCw ?!A ?@A !@ ?s   B,Blimitedr  )r)  r   rJ   r   arrayr   r   r/  r6  rN   rT   r!  r"  r   )	r   r   r   r   r8  r   r7  rL   r)  s	   `    @@@@r    test_struct_array_key_completionz.TestCompleter.test_struct_array_key_completion1  sx    	]<<((++b0P+Q

3%0
7gw'gw'[[*,<=>@UV
 KKK$A$

3%0
7i)i)	B 	B   	"!	" y) 	"!	" y) 	&~. &#%&	& 	&	" 	"	" 	"& &	& 	&s<   ;E$E01FE<F$E-0E9<F	FFpandasc                 B   ddl }t               }|j                  j                  }|j	                  dgdgd      |j
                  d<    |d      \  }}| j                  d	|       | j                  d
|        |d      \  }}| j                  d	|       | j                  d
|        |d      \  }}| j                  d	|        |d      \  }}| j                  d	|        |d      \  }}| j                  d	|        |d      \  }}| j                  d	|       y)z5Test dict key completion applies to pandas DataFramesr   Nr   r#  )r+  r-  r  r  r  r+  r-  z
d.loc[:, 'zd.loc[1:, 'zd.loc[1:1, 'zd.loc[1:1:-1, 'zd.loc[::, ')r<  r   rJ   r   	DataFramer   r   )r   r<  rL   r   r   r   s         r   test_dataframe_key_completionz+TestCompleter.test_dataframe_key_completionV  s    	]<<(( **aSA3+GH

3%0
7gw'gw',7
7gw'gw'-8
7gw'.9
7gw'*;<
7gw'-8
7gw'r   c                 v   t               }|j                  j                  }d|j                  d<   g |j                  d<   t        |j                  d<   i |j                  d<   ddi|j                  d<    |d	
      \  }} |d
      \  }} |d
      \  }} |d
      \  }} |d
      \  }} |d
      \  }}y)z1Smoke test cases dict key completion can't handleN
no_getitemno_keyscant_call_keysemptyr]   rS  r  zno_getitem['r  z	no_keys['zcant_call_keys['zempty['zname_error['zd['\)r   rJ   r   r   dictr  s        r   !test_dict_key_completion_invalidsz/TestCompleter.test_dict_key_completion_invalidsm  s    ]<<((#'

<  "

9'+

#$ 

7 !*

3.9
7+6
7*<=
7)4
7.9
7'2
7r   c                     t               }t        ddg      |j                  d<   |j                  j	                  d      \  }}| j                  d|       | j                  d|       y )Nqwertyqwickkey_completablezkey_completable['qwr  )r   r   r   rJ   r   r   r   rL   r   r   s       r   test_object_key_completionz(TestCompleter.test_object_key_completion  sZ    ](6'7J(K

$%\\**7L*M
7h(gw'r   c                     t               }t        d       t        d       t        |j                  d<   |j                  j	                  d      \  }}| j                  d|       | j                  d|       y )NrH  rI  named_instance_classznamed_instance_class['qwr  )r   r   r   rJ   r   r   rK  s       r   test_class_key_completionz'TestCompleter.test_class_key_completion  s`    ]8$7#-?

)*\\**7Q*R
7h(gw'r   c                 $    ddl m}  |d      sJ y)z]
        Test that try-import don't crash on trailing dot, and import modules before
        r   )
try_importzIPython.N)IPython.core.completerlibrQ  )r   rQ  s     r   test_tryimportzTestCompleter.test_tryimport  s     	9*%%%r   c                     t               }|j                  dd      \  }}| j                  d|       | j                  d|       y )Nr!   z
%aimport iior   r   r   r   rc  rK  s       r   test_aimport_module_completerz+TestCompleter.test_aimport_module_completer  s;    ][[l3
7dG$(r   c                     t               }|j                  d dd      \  }}| j                  d|       | j                  d|       | j                  d|       y )Nzimport IPython.co   zIPython.corezimport IPython.corezIPython.displayrV  rK  s       r   #test_nested_import_module_completerz1TestCompleter.test_nested_import_module_completer  sP    ][[':B?
7ng..8*G4r   c                     t               }|j                  dd      \  }}| j                  d|       | j                  d|       y )Nr!   zimport irU  r   rV  rK  s       r   test_import_module_completerz*TestCompleter.test_import_module_completer  s;    ][[j1
7dG$(r   c                     t               }|j                  ddd      \  }}| j                  d|       | j                  d|       y )NBzfrom io import B   BytesIOBaseExceptionrV  rK  s       r   test_from_module_completerz(TestCompleter.test_from_module_completer  s>    ][[&8"=
7i)'2r   c                     t               }d|j                  _        d|j                  d<   d|j                  d<   |j	                  dd      \  }}| j                  d|       | j                  d|       y )NFr5  
some_three   	some_fours_z	print(s_f)r   rJ   r$  r   r   r   rK  s       r   test_snake_case_completionz(TestCompleter.test_snake_case_completion  sa    ] %#$

< "#

;[[{3
7lG,k7+r   c                     t               }ddlm} d|j                  _        |j                   |d             |j                  d d      \  }}| j                  d|       | j                  d|       y )Nr   )rM  FaH  
            class Test:
                def meth(self, meth_arg1):
                    print("meth")

                def meth_1(self, meth1_arg1, meth1_arg2):
                    print("meth1")

                def meth_2(self, meth2_arg1, meth2_arg2):
                    print("meth2")
            test = Test()
            z
test.meth(z
meth_arg1=zmeth2_arg1=)	r   rL  rM  rJ   r$  r   r   r   rc  )r   rL   rM  r   r   s        r   test_mix_termszTestCompleter.test_mix_terms  se    ]# %
	
  [[|4
7lG,0r   c                    t               }|j                  }d}t               5  d|_         |j                  |t        |            }|D ]!  }| j                  |j                  d   d       # 	 d d d        y # 1 sw Y   y xY w)Nz%aTr   r'   )r   rJ   r   r$  r  r?   r   r   )r   rL   r   r   r  r2   s         r   1test_percent_symbol_restrict_to_magic_completionsz?TestCompleter.test_percent_symbol_restrict_to_magic_completions  sy    ]LL	!# 	1!%I/)//c$i@K  1  C01	1 	1 	1s   A
A77B c                    t               }|j                  }d}t               5  d|_         |j                  |t        |            D cg c]  }|j                   }}| j                  |dg       d d d        y c c}w # 1 sw Y   y xY w)Nr   Tr   )r   rJ   r   r$  r  r?   r   r   )r   rL   r   r   rR  r  s         r   test_fwd_unicode_restrictsz(TestCompleter.test_fwd_unicode_restricts  s    ]LL	%!# 	6!%I2G)2G2GcRVi2X$.
K  [8*5	6 	6	6 	6s   &A?	A:A?:A??Bc                 b   t               }|j                  ddi}||j                  d<   dfd} |       }| j                  |dg       t	               }ddi|j
                  _        j                  |        |       }| j                  d|       | j                  t        |      d       y)	z7Test that dict key suppresses non-dict completion itemsr]   Nr  r  c                      t               5  d_        j                  t                    D  cg c]  } | j                   c} cd d d        S c c} w # 1 sw Y   y xY wrI   )r   r$  r  r?   r   )rR  r2   r   s    r   r   z8TestCompleter.test_dict_key_restrict_to_dicts.<locals>._  sU    %' !
67mmD#d)6T(2JOO  s   %AAAAAzIPCompleter.dict_key_matcherFr   )r   rJ   r   r   r   r`  suppress_competing_matchersrb  r   assertGreaterr?   )r   rL   r  r   r  re  r2   r   s         @@r   test_dict_key_restrict_to_dictsz-TestCompleter.test_dict_key_restrict_to_dicts  s    ]LLDM

3	 cug. h*E7
3 	
ce[)3{+Q/r   c                 &    t        d      d        }t        dd      dt        fd       }t        d	      d
        }t        |||g      5  t               }|j                   fd} |dg d        |ddg        |dddg        |dddg       fd} |d        |dg d        |ddi        |dg d        |ddi        |ddg        |ddi        |ddg        |d        |ddg       d d d        y # 1 sw Y   y xY w)N	a_matcher
identifierc                     dgS Ncompletion_ar   r   s    r   ru  z9TestCompleter.test_matcher_suppression.<locals>.a_matcher
      "##r   	b_matcherr#  )rw  api_versioncontextc                     | j                   }dt        d      gi}|dk(  rdh|d<   |j                  d      rd|d<   |dk(  rdh|d	<   |d
k(  rdh|d	<   |S )Nr  completion_bz
suppress c	c_matchersuppresssuppress allTsuppress all but cdo_not_suppresssuppress all but aru  )tokenr   rX  )r  r   results      r   r}  z9TestCompleter.test_matcher_suppression.<locals>.b_matcher  sy    ==D#&6~&F%GHF|#&1]z"~.%)z"//1<F,-//1<F,-Mr   r  c                     dgS )Ncompletion_cr   r{  s    r   r  z9TestCompleter.test_matcher_suppression.<locals>.c_matcher  r|  r   c                 `    d_         j                  |       \  }}j                  ||       y NFr$  r   r   r   expectedr   r   r2   r   s       r   r   z1TestCompleter.test_matcher_suppression.<locals>._'  ,    "
ZZ-
7  73r   zdo not suppress)rz  r  r  r  r  r  rz  r  r  c                 ^    t               }| |j                  _        j                  |       y rR   r   r`  rq  rb  suppression_configre  r2   s     r   	configurez9TestCompleter.test_matcher_suppression.<locals>.configure1  "    h>P;$r   FT)r   r   rV   r   rJ   )r   ru  r}  r  rL   r   r  r2   s   `      @r   test_matcher_suppressionz&TestCompleter.test_matcher_suppression	  sJ   	{	3	$ 
4	$ 
{	B	0 	 
C	  
{	3	$ 
4	$ iI>? "	3BA4
 !QRn~./"^^$DE"^^$DE% enNO{E*+nNO{E*+n~./{D)*.!12dO.!12E"	3 "	3 "	3s   B/DDc                 F    t        d      d        }t        d      d        }t        ||g      5  t               }|j                   fd}fd} |d        |d	d
dg        |d        |d	d
g        |d         |dd
dg       d d d        y # 1 sw Y   y xY w)Nmatcher_returning_iteratorrv  c                     t        dg      S )Ncompletion_iter)iterr{  s    r   r  zXTestCompleter.test_matcher_suppression_with_iterator.<locals>.matcher_returning_iteratorH  s    *+,,r   matcher_returning_listc                     dgS )Ncompletion_listr   r{  s    r   r  zTTestCompleter.test_matcher_suppression_with_iterator.<locals>.matcher_returning_listL  s    %&&r   c                 `    d_         j                  |       \  }}j                  ||       y r  r  r  s       r   r   z?TestCompleter.test_matcher_suppression_with_iterator.<locals>._T  r  r   c                 ^    t               }| |j                  _        j                  |       y rR   r  r  s     r   r  zGTestCompleter.test_matcher_suppression_with_iterator.<locals>.configureY  r  r   Fz---r  r  Tz--)r   rV   r   rJ   )r   r  r  rL   r   r  r2   s   `     @r   &test_matcher_suppression_with_iteratorz4TestCompleter.test_matcher_suppression_with_iteratorG  s    	'C	D	- 
E	- 
'?	@	' 
A	' 8:PQR 	<BA4
%
 ee'):;<dOe'()dOd&(9:;+	< 	< 	<s   ABB c                      t               }|j                  d_        fd} fd} |d        |         |d        |         |d         |        y )NTc                 ^    t               }| |j                  _        j                  |       y rR   r  r  s     r   r  zCTestCompleter.test_matcher_suppression_with_jedi.<locals>.configurep  s"    (C:LCOO7OOC r   c                      t               5  j                  dd      D  cg c]  } | j                   }} j                  d|       d d d        y c c} w # 1 sw Y   y xY w)Nzdict.rS  r   )r   r  r   r   )rR  r   r2   r   s     r   r   z;TestCompleter.test_matcher_suppression_with_jedi.<locals>._u  sW    %' /=>]]7TU=VWz:??WWfg./ /W/ /s   AAAAAF)r   rJ   r$  )r   rL   r  r   r2   s   `   @r   "test_matcher_suppression_with_jediz0TestCompleter.test_matcher_suppression_with_jedig  sM    
 ]LL
	!
	/
 	%	$	$	r   c                     t        d      d        }t        d      d        } fd}t        ||g      5  t               }|j                   |ddg       t	               }dg|j
                  _        j                  |        |dg       g |j
                  _        j                  |       d d d        y # 1 sw Y   y xY w)	Nru  rv  c                     dgS ry  r   r{  s    r   ru  z7TestCompleter.test_matcher_disabling.<locals>.a_matcher  r|  r   r}  c                     dgS )Nr  r   r{  s    r   r}  z7TestCompleter.test_matcher_disabling.<locals>.b_matcher  r|  r   c                 R    j                  d      \  }}j                  | |       y Ncompletion_r   r   r  r   r   r2   r   s      r   r   z/TestCompleter.test_matcher_disabling.<locals>._  %    M2JAwXw/r   rz  r  )r   rV   r   rJ   r   r`  disable_matchersrb  )r   ru  r}  r   rL   re  r2   s   `     @r   test_matcher_disablingz$TestCompleter.test_matcher_disabling  s    	{	3	$ 
4	$ 
{	3	$ 
4	$	0 i34 	!BA~~./(C0;}COO,OOC ~/1COO,OOC 	! 	! 	!s   A9B<<Cc                     t        ddd      d        }t        ddd      d        } fd}t        ||g      5  t               }|j                   |d	g       d
|_         |dg       d d d        y # 1 sw Y   y xY w)Nru  r   r#  )rw  priorityr~  c                      t        d      gddS )Nrz  Tr  r  r   r{  s    r   ru  z6TestCompleter.test_matcher_priority.<locals>.a_matcher      $4^$D#ESWXXr   r}  c                      t        d      gddS )Nr  Tr  r  r{  s    r   r}  z6TestCompleter.test_matcher_priority.<locals>.b_matcher  r  r   c                 R    j                  d      \  }}j                  | |       y r  r  r  s      r   r   z.TestCompleter.test_matcher_priority.<locals>._  r  r   r  r5  rz  )r   rV   r   rJ   matcher_priority)r   ru  r}  r   rL   r2   s   `    @r   test_matcher_priorityz#TestCompleter.test_matcher_priority  s    	{QA	N	Y 
O	Y 
{QA	N	Y 
O	Y	0 i34 	 BA~)*I&~	  	  	 s   0A77B N)Or   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!  markxfailrb   rc   r  r  r  version_inforeleaselevelr'  r>  rE  rI  rN  r\  rf  ri  rr  rv  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r%  r(  decskip_withoutr;  r?  rF  rL  rO  rS  rW  rZ  r\  rb  rh  rj  rl  rn  rs  r  r  r  r  r  r   r   r   r   r      sO   &E1*(&.<.2 @@;; [[(M  &&&3&.6 [[%%3.  O	O$ [[%%3.  !T	!TF [[%%3.  >	> [[%%3.  	P		P [[=>" ?". [[%%3.  ?	?B;z&'$' = +//0;3(3&H:3&-3^-6^.2`Y)v*:88t-834 Sg"& "&H Sh(  (,3$((&)5)3,12	1
60<<3|<@ [[%%3.  	0!8 r   r   zinput, expectedz1.234z+1z-1z-1.0z-1.z+1.z.1z1..z..z.1.z,1r   z, 1z, .1z, +.1z+.1z.1 0b_0011_1111_0100_1110r  0b_1110_0101z1 + 1z, 1 + 1c                 $    t        |       |k(  sJ y rR   )r   )r   r  s     r   'test_match_numeric_literal_for_dict_keyr    s    @ ,E2h>>>r   )/__doc__r  r!  rb   rL  unittest
contextlibr   traitlets.config.loaderr   IPythonr   IPython.corer   IPython.utils.tempdirr   r   IPython.utils.genericsr	   IPython.testingr
   r  r>   r   r   r   r   r   r   r   r   r:   rG   rN   r   rT   rV   ri   rt   r   r   r   TestCaser   r  parametrizer  r   r   r   <module>r     s   5
 
  
   % *  " O 2 -	 	 	 & R&D . . 6# 6 6 - -&R30$ $! !F H%% F R. 	'	t	t				t		t		s			%		!#;<	|$	(	$	D5>??>?r   