ó
    …¦0j€  ã                   ó°  • S r SSKrSSKJs  Jr  SSKJrJ	r	  SSK
r
SSKJr  SSKJr  \
R                  S\4S j5       rS\4S	 jrS\4S
 jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\4S jr S\4S jr!S\4S jr"S r#S r$S\4S jr%S\4S jr&S\4S jr'g) z-Tests for quber.cli module (non-async parts).é    N)Ú	MagicMockÚpatch©Ú	CliRunner)ÚcliÚreturnc                  ó   • [        5       $ )zCreate Click CLI test runner.r   © ó    Ú(/home/mande/repo/quber/tests/test_cli.pyÚrunnerr      s   € ô ‹;Ðr   r   c                 ó8  • U R                  [        S/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒg	)zTest CLI help output.ú--helpr   ©ú==©z1%(py2)s
{%(py2)s = %(py0)s.exit_code
} == %(py5)sÚresult©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7NÚQuber©Úin©z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.output
}©Úpy1Úpy3r   zAdvanced table extraction©Úinvoker   Ú	exit_codeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚoutput©	r   r   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert0Ú@py_assert2s	            r   Útest_cli_helpr5      sc  € à�]‰]œ3  
Ó+€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ#—m‘mÐ#�mÑ#×#×#×#Ò#ˆ7×#×#Ô#ˆ7×#×#×#×#×#Ô#�f×#×#×#Ñ#�f×#×#Õ#�m×#×#×#×#×#×#Ó#Ø&Ð7¯-©-Ð7¨-Ñ7×7×7×7Ò7Ð&×7×7Ô7Ð&×7×7×7×7×7Ô7¨&×7×7×7Ñ7¨&×7×7Õ7¨-×7×7×7×7×7×7Ô7r   c                 ó
  • U R                  [        S/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o3R                  oˆ" 5       o—U	;   oª(       dä  [        R                  " SU
4SXy45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=n
=n=p‰g	)zTest CLI version output.z	--versionr   r   r   r   r   r   r   NÚversionr   ©z`%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.output
}.lower
}()
}©r   r    r   r   Úpy9úassert %(py11)sÚpy11©r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Úlower©r   r   r.   r/   r0   r1   r2   r3   Ú@py_assert6Ú@py_assert8r4   Ú@py_format10Ú@py_format12s                r   Útest_cli_versionrD      s"  € à�]‰]œ3  Ó.€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ-Ÿ™Ð-×+Ñ+Ð-Ð+Ó-Ð-Ð-Ñ-×-×-×-Ò-ˆ9×-×-Ô-ˆ9×-×-×-×-×-Ô-˜×-×-×-Ñ-˜×-×-Õ-˜×-×-Ó-Ð+×-×-Ó-Ð-×-×-×-×-×-×-×-Ð-r   c                 óæ  • U R                  [        SS/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒg
)zTest analyze command help.Úanalyzer   r   r   r   r   r   r   r   NÚPDFr   r   r   z--outputú
--providerr!   r-   s	            r   Útest_analyze_helprI   "   sÑ  € à�]‰]œ3 ¨HÐ 5Ó6€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ!—M‘MÐ!�MÑ!×!×!×!Ò!ˆ5×!×!Ô!ˆ5×!×!×!×!×!Ô!�F×!×!×!Ñ!�F×!×!Õ!�M×!×!×!×!×!×!Ó!ØÐ&Ÿ™Ð&˜Ñ&×&×&×&Ò&ˆ:×&×&Ô&ˆ:×&×&×&×&×&Ô&˜×&×&×&Ñ&˜×&×&Õ&˜×&×&×&×&×&×&Ó&ØÐ(Ÿ=™=Ð(˜=Ñ(×(×(×(Ò(ˆ<×(×(Ô(ˆ<×(×(×(×(×(Ô(˜6×(×(×(Ñ(˜6×(×(Õ(˜=×(×(×(×(×(×(Ô(r   c                 óæ  • U R                  [        SS/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒg
)zTest batch command help.Úbatchr   r   r   r   r   r   r   r   NÚ	directoryr   r   r   z--output-dirz	--patternr!   r-   s	            r   Útest_batch_helprM   ,   sÑ  € à�]‰]œ3 ¨(Ð 3Ó4€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ'Ÿ-™-Ð'˜-Ñ'×'×'×'Ò'ˆ;×'×'Ô'ˆ;×'×'×'×'×'Ô'˜&×'×'×'Ñ'˜&×'×'Õ'˜-×'×'×'×'×'×'Ó'ØÐ*Ÿ]™]Ð*˜]Ñ*×*×*×*Ò*ˆ>×*×*Ô*ˆ>×*×*×*×*×*Ô*˜V×*×*×*Ñ*˜V×*×*Õ*˜]×*×*×*×*×*×*Ó*ØÐ'Ÿ-™-Ð'˜-Ñ'×'×'×'Ò'ˆ;×'×'Ô'ˆ;×'×'×'×'×'Ô'˜&×'×'×'Ñ'˜&×'×'Õ'˜-×'×'×'×'×'×'Ô'r   c                 ó¸  • U R                  [        SS/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCSoqR                  o3R                  oˆ" 5       o—U	;   oª(       dä  [        R                  " SU
4SXy45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      [        R                  " U	5      S.-  nSSU0-  n[        [        R                  " U5      5      eS
=n=n
=n=p‰SoqR                  o7U;   oª(       dº  [        R                  " SU
4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=p£g
)zTest models command help.Úmodelsr   r   r   r   r   r   r   r   Nzavailable modelsr   r8   r9   r;   r<   rH   r   r   r=   r?   s                r   Útest_models_helprP   6   s‘  € à�]‰]œ3 ¨8Ð 4Ó5€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ6§¡Ð6×!4Ñ!4Ð6Ð!4Ó!6Ð6Ð!6Ñ6×6×6×6Ò6Ð×6×6Ô6Ð×6×6×6×6×6Ô6 ×6×6×6Ñ6 ×6×6Õ6 ×6×6Ó6Ð!4×6×6Ó6Ð!6×6×6×6×6×6×6×6ØÐ(Ÿ=™=Ð(˜=Ñ(×(×(×(Ò(ˆ<×(×(Ô(ˆ<×(×(×(×(×(Ô(˜6×(×(×(Ñ(˜6×(×(Õ(˜=×(×(×(×(×(×(Ô(r   c                 óD  • [        S5       n[        5       nS/UR                  l        SSS/0UR                  l        X!l        U R                  [        S/5      nUR                  nSoTU:H  of(       dº  [        R                  " SU4SXE45      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=peSo“R                   oYU;   oª(       dº  [        R                  " SU
4SX•45      [        R                  " U	5      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n	=p¥SSS5        g! , (       d  f       g= f)z+Test models command displays provider list.ú!quber.agents.factory.AgentFactoryÚ	anthropicúclaude-3-5-sonnet-latestzclaude-3-5-haiku-latestrO   r   r   r   r   r   r   r   NúModel Providersr   r   r   ©r   r   Úget_available_providersÚreturn_valueÚlist_available_modelsr"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   ©r   Úmock_factory_classÚmock_factoryr   r.   r/   r0   r1   r2   r3   r4   s              r   Útest_models_command_basicr]   ?   sI  € ä	Ð2Ô	3Ð7IÜ “{ˆØ=H¸Mˆ×,Ñ,Ô9àÐ4Ð6OÐPð;
ˆ×*Ñ*Ô7ð +7Ô'à—‘œs X JÓ/ˆà×ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆv×$×$×$Ñ$ˆv×$×$Õ$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$Ø Ð1§M¡MÐ1 MÑ1×1×1×1Ò1Ð ×1×1Ô1Ð ×1×1×1×1×1Ô1 F×1×1×1Ñ1 F×1×1Õ1 M×1×1×1×1×1×1Ó1÷ 
4×	3Ö	3úó   ŒG<HÈ
Hc                 óD  • [        S5       n[        5       nS/UR                  l        SS/0UR                  l        X!l        U R                  [        / SQ5      nUR                  nSoTU:H  of(       dº  [        R                  " SU4SXE45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS=n=peSo“R                   oYU;   oª(       dº  [        R                  " SU
4SX•45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS
SU0-  n[        [        R                  " U5      5      eS=n	=p¥SSS5        g! , (       d  f       g= f)z+Test models command with specific provider.rR   rS   rT   )rO   rH   rS   r   r   r   r   r   r   r   NÚ	ANTHROPICr   r   r   rV   rZ   s              r   Ú%test_models_command_specific_providerra   O   s?  € ä	Ð2Ô	3Ð7IÜ “{ˆØ=H¸Mˆ×,Ñ,Ô9Ø;FÐIcÐHdÐ:eˆ×*Ñ*Ô7Ø*6Ô'à—‘œsÒ$IÓJˆà×ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆv×$×$×$Ñ$ˆv×$×$Õ$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$ØÐ+Ÿm™mÐ+˜mÑ+×+×+×+Ò+ˆ{×+×+Ô+ˆ{×+×+×+×+×+Ô+˜f×+×+×+Ñ+˜f×+×+Õ+˜m×+×+×+×+×+×+Ó+÷ 
4×	3Ö	3úr^   c                 óø  • U R                  [        S/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒ/ nSo�R                  o˜U	;   o3os(       d*  So¡R                  oºU;   oÌo|(       d  SoÑR                  oíU;   oÿnU(       GdU  [        R                  " SU4SX‰45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U	5      S.-  nSSU0-  nUR                  U5        U(       Gda  [        R                  " SW4SW
W45      [        R                  " U
5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  nUR                  U5        U(       d­  [        R                  " SW4SWW45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  nUR                  U5        [        R                  " US5      0 -  nSSU0-  n[        [        R                  " U5      5      eS	=n=n=n=n=n	=n
=n=n=n=pþg	) z*Test models command shows model providers.rO   r   r   r   r   r   r   r   NrU   r   r   r   r`   ÚOPENAIÚOLLAMA)z.%(py3)s in %(py7)s
{%(py7)s = %(py5)s.output
})r    r   r   z%(py9)sr:   )z2%(py12)s in %(py16)s
{%(py16)s = %(py14)s.output
})Úpy12Úpy14Úpy16z%(py18)sÚpy18)z2%(py21)s in %(py25)s
{%(py25)s = %(py23)s.output
})Úpy21Úpy23Úpy25z%(py27)sÚpy27é   zassert %(py30)sÚpy30)r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   ÚappendÚ_format_boolop)r   r   r.   r/   r0   r1   r2   r3   r4   r@   Ú@py_assert11Ú@py_assert15Ú@py_assert13Ú@py_assert20Ú@py_assert24Ú@py_assert22rB   Ú@py_format17Ú@py_format19Ú@py_format26Ú@py_format28Ú@py_format29Ú@py_format31s                          r   Útest_models_command_no_api_keysr}   ]   sT  € à�]‰]œ3  
Ó+€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ-§¡Ð- Ñ-×-×-×-Ò-Ð×-×-Ô-Ð×-×-×-×-×-Ô- ×-×-×-Ñ- ×-×-Õ- ×-×-×-×-×-×-Ó-áaˆ;ÐaŸ-™-Ða˜-Ñ'×a¨8Ða·}±}Ða°}Ñ+D×aÈÐa×TaÑTaÐaÐTaÑHa×a×a×aÕaˆ;×a×aÔaˆ;×a×a×a×a×aÔa˜&×a×a×aÑa˜&×a×aÕa˜-×a×a×a×a×a×a×aÔa¨8°}×a×aÔa¨8×a×a×a×a×aÔa°v×a×a×aÑa°v×a×aÕa°}×a×a×a×a×a×a×aÓaÈÐTa×a×aÔaÈ×a×a×a×a×aÔaÐTZ×a×a×aÑaÐTZ×a×aÕaÐTa×a×a×a×a×a×a×a×a×a×a×a×a×a×aÖar   c                 óŽ  • U R                  [        SS/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒg
)z6Test models command with --all flag runs successfully.rO   z--allr   r   r   r   r   r   r   NrU   r   r   r   r!   r-   s	            r   Ú!test_models_command_with_all_flagr   g   sù   € à�]‰]œ3 ¨7Ð 3Ó4€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ-§¡Ð- Ñ-×-×-×-Ò-Ð×-×-Ô-Ð×-×-×-×-×-Ô- ×-×-×-Ñ- ×-×-Õ- ×-×-×-×-×-×-Ô-r   c                 óŒ  • U R                  [        S/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒg	)z2Test models command may truncate long model lists.rO   r   r   r   r   r   r   r   NrU   r   r   r   r!   r-   s	            r   Ú'test_models_command_truncates_long_listr�   o   sö   € à�]‰]œ3  
Ó+€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó àÐ-§¡Ð- Ñ-×-×-×-Ò-Ð×-×-Ô-Ð×-×-×-×-×-Ô- ×-×-×-Ñ- ×-×-Õ- ×-×-×-×-×-×-Ô-r   c                 óŒ  • U R                  [        S/5      nUR                  nSo2U:g  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒg	)z&Test analyze command without PDF path.rF   r   ©ú!=©z1%(py2)s
{%(py2)s = %(py0)s.exit_code
} != %(py5)sr   r   r   r   NúMissing argumentr   r   r   r!   r-   s	            r   Útest_analyze_missing_pdf_pathr‡   x   sö   € à�]‰]œ3  Ó,€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ.§¡Ð. Ñ.×.×.×.Ò.Ð×.×.Ô.Ð×.×.×.×.×.Ô. ×.×.×.Ñ. ×.×.Õ. ×.×.×.×.×.×.Ô.r   c                 óŒ  • U R                  [        S/5      nUR                  nSo2U:g  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒg	)z%Test batch command without directory.rK   r   rƒ   r…   r   r   r   r   Nr†   r   r   r   r!   r-   s	            r   Útest_batch_missing_directoryr‰   €   sö   € à�]‰]œ3  	Ó*€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ.§¡Ð. Ñ.×.×.×.Ò.Ð×.×.Ô.Ð×.×.×.×.×.Ô. ×.×.×.Ñ. ×.×.Õ. ×.×.×.×.×.×.Ô.r   c                 ó¦  • U R                  5          [        SS5       nUR                  S5        SSS5        U R                  [        / SQ5      nUR
                  nSoCU:g  oU(       dº  [        R                  " SU4SX445      S	[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pTSSS5        g! , (       d  f       GN= f! , (       d  f       g= f)z+Test analyze command with invalid provider.útest.pdfÚwÚdummyN)rF   r‹   rH   Úinvalidr   rƒ   r…   r   r   r   r   )Úisolated_filesystemÚopenÚwriter"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r   Úfr   r.   r/   r0   r1   r2   s           r   Útest_analyze_invalid_providerr“   ˆ   sÉ   € à	×	#Ñ	#Õ	%Ü�*˜cÔ" aØ�G‰G�GÔ÷ #ð —‘œsÒ$TÓUˆà×ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆv×$×$×$Ñ$ˆv×$×$Õ$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$÷ 
&Ð	%ß"Ö"ú÷ 
&Õ	%ús"   ‘EžD0°C7EÄ0
D?	Ä:EÅ
Ec                 óâ  • U R                  [        SS/5      nUR                  nSo2U:g  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCg
)z/Test batch command with non-existent directory.rK   z/nonexistent/directoryr   rƒ   r…   r   r   r   r   N)r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r   r   r.   r/   r0   r1   r2   s          r   Ú test_batch_nonexistent_directoryr•   “   s‹   € à�]‰]œ3 Ð*BÐ CÓD€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ô r   c                 óä  • U R                  [        S/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
oqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pƒg	)z$Test that CLI has expected commands.r   r   r   r   r   r   r   r   NrF   r   r   r   rK   rO   r!   r-   s	            r   Útest_cli_has_three_commandsr—   š   sÎ  € à�]‰]œ3  
Ó+€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó ØÐ%Ÿ™Ð%˜Ñ%×%×%×%Ò%ˆ9×%×%Ô%ˆ9×%×%×%×%×%Ô%˜×%×%×%Ñ%˜×%×%Õ%˜×%×%×%×%×%×%Ó%ØÐ#—m‘mÐ#�mÑ#×#×#×#Ò#ˆ7×#×#Ô#ˆ7×#×#×#×#×#Ô#�f×#×#×#Ñ#�f×#×#Õ#�m×#×#×#×#×#×#Ó#ØÐ$—}‘}Ð$�}Ñ$×$×$×$Ò$ˆ8×$×$Ô$ˆ8×$×$×$×$×$Ô$�v×$×$×$Ñ$�v×$×$Õ$�}×$×$×$×$×$×$Ô$r   c                 ó:  • U R                  [        SS/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒg
)z1Test analyze command has correct default options.rF   r   r   r   r   r   r   r   r   Nz"Output directory (default: output)r   r   r   z
default: 5r!   r-   s	            r   Útest_analyze_default_optionsr™   ¤   sf  € à�]‰]œ3 ¨HÐ 5Ó6€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó Ø/Ð@·=±=Ð@°=Ñ@×@×@×@Ò@Ð/×@×@Ô@Ð/×@×@×@×@×@Ô@°6×@×@×@Ñ@°6×@×@Õ@°=×@×@×@×@×@×@Ó@ØÐ(Ÿ=™=Ð(˜=Ñ(×(×(×(Ò(ˆ<×(×(Ô(ˆ<×(×(×(×(×(Ô(˜6×(×(×(Ñ(˜6×(×(Õ(˜=×(×(×(×(×(×(Ô(r   c                 ó:  • U R                  [        SS/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒSoqR                  o7U;   oˆ(       dº  [        R                  " SU4SXs45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pƒg
)z/Test batch command has correct default options.rK   r   r   r   r   r   r   r   r   Nz.Output directory for results (default: output)r   r   r   z*.pdfr!   r-   s	            r   Útest_batch_default_optionsr›   ­   sf  € à�]‰]œ3 ¨(Ð 3Ó4€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó Ø;ÐL¿}¹}ÐL¸}ÑL×L×L×LÒLÐ;×L×LÔLÐ;×L×L×L×L×LÔL¸v×L×L×LÑL¸v×L×LÕL¸}×L×L×L×L×L×LÓLØÐ#—m‘mÐ#�mÑ#×#×#×#Ò#ˆ7×#×#Ô#ˆ7×#×#×#×#×#Ô#�f×#×#×#Ñ#�f×#×#Õ#�m×#×#×#×#×#×#Ô#r   c                 óF  • [        S5       n[        5       nS/UR                  l        SnSU/0UR                  l        X!l        U R                  [        S/5      nUR                  nSoeU:H  ow(       dº  [        R                  " SU4SXV45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S	.-  nS
SU0-  n	[        [        R                  " U	5      5      eS=n=pvSo¤R                   ojU;   o»(       dº  [        R                  " SU4SX¦45      [        R                  " U
5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS
SU0-  n	[        [        R                  " U	5      5      eS=n
=p¶SSS5        g! , (       d  f       g= f)z4Test models command truncates very long model names.rR   rS   ÚAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarO   r   r   r   r   r   r   r   Nz...r   r   r   rV   )r   r[   r\   Ú
long_modelr   r.   r/   r0   r1   r2   r3   r4   s               r   Ú&test_models_truncates_long_model_namesrŸ   ¶   sC  € ä	Ð2Ô	3Ð7IÜ “{ˆØ=H¸Mˆ×,Ñ,Ô9àˆ
Ø;FÈÈÐ:Uˆ×*Ñ*Ô7Ø*6Ô'à—‘œs X JÓ/ˆà×ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆv×$×$×$Ñ$ˆv×$×$Õ$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$ØÐ%Ÿ™Ð%˜Ñ%×%×%×%Ò%ˆu×%×%Ô%ˆu×%×%×%×%×%Ô%˜×%×%×%Ñ%˜×%×%Õ%˜×%×%×%×%×%×%Ó%÷ 
4×	3Ö	3ús   ŒG=HÈ
H c                  óÒ  • [         R                  S   o R                  n[         R                  S   o"R                  o1UL oD(       d™  [        R                  " SU4SX45      [        R
                  " U 5      [        R
                  " U5      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=n=p#g)	z<`document` and `parse` resolve to the same command callback.ÚdocumentÚparse©Úis©zN%(py3)s
{%(py3)s = %(py1)s.callback
} is %(py8)s
{%(py8)s = %(py6)s.callback
}©r   r    Úpy6Úpy8úassert %(py10)sÚpy10N©r   ÚcommandsÚcallbackr$   r%   r)   r*   r+   ©r3   r4   Ú@py_assert5Ú@py_assert7r/   Ú@py_format9Ú@py_format11s          r   Útest_document_is_alias_of_parser³   Æ   sŽ   € ä�<‰<˜
Ñ#ÐN×,Ñ,ÐN´·±¸WÑ0EÐN×0NÑ0NÐNÐ0NÐN×N×N×NÒNÐ,×N×NÔNÐ#×N×NÓNÐ,×N×NÓNÐ0E×N×NÓNÐ0N×N×N×N×N×N×N×NÐNr   c                  óÒ  • [         R                  S   o R                  n[         R                  S   o"R                  o1UL oD(       d™  [        R                  " SU4SX45      [        R
                  " U 5      [        R
                  " U5      [        R
                  " U5      [        R
                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n =n=n=p#g)	z;`table` and `extract` resolve to the same command callback.ÚtableÚextractr£   r¥   r¦   r©   rª   Nr«   r®   s          r   Útest_table_is_alias_of_extractr·   Ë   sŽ   € ä�<‰<˜Ñ ÐM×)Ñ)ÐM¬S¯\©\¸)Ñ-DÐM×-MÑ-MÐMÐ-MÐM×M×M×MÒMÐ)×M×MÔMÐ ×M×MÓMÐ)×M×MÓMÐ-D×M×MÓMÐ-M×M×M×M×M×M×M×MÐMr   c                 ó  • U R                  [        S/5      nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCS
 GH  nUR                  oGU;   o"(       dð  [        R                  " SU4SXt45      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS	=p$GM     g	)z<Canonical and back-compat names are all listed in root help.r   r   r   r   r   r   r   r   N)r¡   rµ   r¢   r¶   r   )z.%(py0)s in %(py4)s
{%(py4)s = %(py2)s.output
}Úname)r   r   Úpy4zassert %(py6)sr§   r!   )
r   r   r.   r/   r0   r1   r2   r¹   Ú@py_format5Ú@py_format7s
             r   Ú$test_document_and_table_in_root_helpr½   Ð   s  € à�]‰]œ3  
Ó+€Fà×ÑÐ ˜qÐ ˜qÑ × × × Ò Ð× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ Ð× × Ó ˜q× × × × × × Ó Ü9ˆØ—}‘}Ð$�}Ñ$×$×$×$Ò$ˆt×$×$×$×$×$Õ$ˆt×$×$×$Ñ$ˆt×$×$×$×$×$Ö$�v×$×$×$Ñ$�v×$×$Õ$�}×$×$×$×$×$×$Ô$ò :r   c                 ó  • U R                  [        SS/5      nU R                  [        SS/5      nUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=pTUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=pTSo�R                  oHU;   o™(       dº  [        R                  " SU	4SX„45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=p”So�R                  oHU;   o™(       dº  [        R                  " SU	4SX„45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=p”g)z=`document --help` exposes the same options as `parse --help`.r¡   r   r¢   r   r   r   Údocument_helpr   r   r   NÚ
parse_helpz--presetr   r   r   z--image-moder!   )
r   r¿   rÀ   r.   r/   r0   r1   r2   r3   r4   s
             r   Ú test_document_help_matches_parserÁ   Ù   sô  € à—M‘M¤#¨
°HÐ'=Ó>€MØ—‘œs W¨hÐ$7Ó8€Jà×"Ñ"Ð' aÐ' aÑ'×'×'×'Ò'Ð"×'×'×'×'×'Õ'ˆ=×'×'×'Ñ'ˆ=×'×'Õ'Ð"×'×'Ó' a×'×'×'×'×'×'Ó'Ø×ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆ:×$×$×$Ñ$ˆ:×$×$Õ$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$ØÐ-×-Ñ-Ð-Ð-Ñ-×-×-×-Ò-ˆ:×-×-Ô-ˆ:×-×-×-×-×-Ô-˜×-×-×-Ñ-˜×-×-Õ-Ð-×-×-×-×-×-×-Ó-ØÐ1×1Ñ1Ð1Ð1Ñ1×1×1×1Ò1ˆ>×1×1Ô1ˆ>×1×1×1×1×1Ô1˜]×1×1×1Ñ1˜]×1×1Õ1Ð1×1×1×1×1×1×1Ô1r   c                 ó  • U R                  [        SS/5      nU R                  [        SS/5      nUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=pTUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX445      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=pTSo�R                  oHU;   o™(       dº  [        R                  " SU	4SX„45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=p”So�R                  oHU;   o™(       dº  [        R                  " SU	4SX„45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=p”g)z<`table --help` exposes the same options as `extract --help`.rµ   r   r¶   r   r   r   Ú
table_helpr   r   r   NÚextract_helpz--enginer   r   r   z--reviewr!   )
r   rÃ   rÄ   r.   r/   r0   r1   r2   r3   r4   s
             r   Útest_table_help_matches_extractrÅ   ä   sô  € à—‘œs W¨hÐ$7Ó8€JØ—=‘=¤ y°(Ð&;Ó<€Là×ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆ:×$×$×$Ñ$ˆ:×$×$Õ$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$Ø×!Ñ!Ð& QÐ& QÑ&×&×&×&Ò&Ð!×&×&×&×&×&Õ&ˆ<×&×&×&Ñ&ˆ<×&×&Õ&Ð!×&×&Ó& Q×&×&×&×&×&×&Ó&ØÐ*×*Ñ*Ð*Ð*Ñ*×*×*×*Ò*ˆ:×*×*Ô*ˆ:×*×*×*×*×*Ô*˜×*×*×*Ñ*˜×*×*Õ*Ð*×*×*×*×*×*×*Ó*ØÐ*×*Ñ*Ð*Ð*Ñ*×*×*×*Ò*ˆ:×*×*Ô*ˆ:×*×*×*×*×*Ô*˜×*×*×*Ñ*˜×*×*Õ*Ð*×*×*×*×*×*×*Ô*r   )(Ú__doc__Úbuiltinsr&   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter$   Úunittest.mockr   r   ÚpytestÚclick.testingr   Ú	quber.clir   Úfixturer   r5   rD   rI   rM   rP   r]   ra   r}   r   r�   r‡   r‰   r“   r•   r—   r™   r›   rŸ   r³   r·   r½   rÁ   rÅ   r
   r   r   Ú<module>rÐ      sB  ðÙ 3ç  „ × *ã Ý #å ð ‡�ð�	ó ó ðð
8˜)ô 8ð.˜Yô .ð)˜iô )ð(˜Iô (ð)˜Yô )ð2 iô 2ð ,°)ô ,ðb¨Iô bð.¨iô .ð.°Iô .ð/¨)ô /ð/¨ô /ð%¨)ô %ð!¨Yô !ð%¨	ô %ð)¨ô )ð$ yô $ð&°9ô &ò Oò
Nð
%°ô %ð2¨Yô 2ð+¨Iõ +r   