ó
    'xáhÖ  ã                   óÊ   • S r SSKrSSKJs  Jr  SSKJr  SSK	J
r
Jr  SSKJr  SSKJr  S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS\4S jr S r!g)z)Tests for quber.core.table_parser module.é    N)ÚPath)ÚMockÚpatch)ÚTableMetadata)ÚEnhancedTableParserc                  óÌ  • [        5       n U R                  nSo!U:H  o3(       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=p2U R                  nS	o!U:H  o3(       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=p2U R                  nSo!UL o3(       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=p2U R                  nSo!UL o3(       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=p2g)z6Test EnhancedTableParser initialization with defaults.z ^ ©ú==©z1%(py2)s
{%(py2)s = %(py0)s.separator
} == %(py5)sÚparser©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7Né
   ©z4%(py2)s
{%(py2)s = %(py0)s.max_lookback
} == %(py5)sT©Úis©z<%(py2)s
{%(py2)s = %(py0)s.enable_consolidation
} is %(py5)sF©z-%(py2)s
{%(py2)s = %(py0)s.debug
} is %(py5)s©r   Ú	separatorÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚmax_lookbackÚenable_consolidationÚdebug©r   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s         Ú*/workspace/tests/core/test_table_parser.pyÚ(test_enhanced_table_parser_init_defaultsr-   
   sÒ  € ä Ó"€Fà×ÑÐ$˜uÐ$˜uÑ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆ6×$×$×$Ñ$ˆ6×$×$Õ$Ð×$×$Ó$˜u×$×$×$×$×$×$Ó$Ø×ÑÐ$ "Ð$ "Ñ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆ6×$×$×$Ñ$ˆ6×$×$Õ$Ð×$×$Ó$ "×$×$×$×$×$×$Ó$Ø×&Ñ&Ð.¨$Ð.¨$Ð.×.×.×.Ò.Ð&×.×.×.×.×.Õ.ˆ6×.×.×.Ñ.ˆ6×.×.Õ.Ð&×.×.Ó.¨$×.×.×.×.×.×.Ó.Ø�<‰<Ð ˜5Ð ˜5Ð × × × Ò ˆ<× × × × × Õ ˆ6× × × Ñ ˆ6× × Õ ˆ<× × Ó ˜5× × × × × × Ô ó    c                  óÐ  • [        SSSSS9n U R                  nSo!U:H  o3(       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=p2U R                  nSo!U:H  o3(       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=p2U R                  nSo!UL o3(       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=p2U R                  nSo!UL o3(       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=p2g)z;Test EnhancedTableParser initialization with custom values.ú | é   FT)r   r#   r$   r%   r	   r   r   r   r   r   Nr   r   r   r   r   r&   s         r,   Ú&test_enhanced_table_parser_init_customr2      sâ  € ä ØØØ"Øñ	€Fð ×ÑÐ$˜uÐ$˜uÑ$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆ6×$×$×$Ñ$ˆ6×$×$Õ$Ð×$×$Ó$˜u×$×$×$×$×$×$Ó$Ø×ÑÐ# !Ð# !Ñ#×#×#×#Ò#Ð×#×#×#×#×#Õ#ˆ6×#×#×#Ñ#ˆ6×#×#Õ#Ð×#×#Ó# !×#×#×#×#×#×#Ó#Ø×&Ñ&Ð/¨%Ð/¨%Ð/×/×/×/Ò/Ð&×/×/×/×/×/Õ/ˆ6×/×/×/Ñ/ˆ6×/×/Õ/Ð&×/×/Ó/¨%×/×/×/×/×/×/Ó/Ø�<‰<Ð˜4Ð˜4Ð×××Òˆ<×××××Õˆ6×××Ñˆ6××Õˆ<××Ó˜4××××××Ôr.   c                  ó   • [        5       n U R                  / 5      nSo!UL o3(       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      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p2g)z&Test consolidating empty headers list.Nr   ©z%(py0)s is %(py3)sÚresult©r   Úpy3úassert %(py5)sr   ©
r   Ú_consolidate_headersr   r   r   r   r   r    r!   r"   ©r   r5   Ú@py_assert2r'   Ú@py_format4r*   s         r,   Útest_consolidate_headers_emptyr>   #   st   € ä Ó"€Fà×(Ñ(¨Ó,€FàÐ�Tˆ>×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�T××××××Òr.   c                  ó¤  • [        5       n U R                  S/5      nSo!U:H  o3(       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      S.-  nSSU0-  n[        [        R                  " U5      5      eS=p2g)	z!Test consolidating single header.úHeader 1r	   ©z%(py0)s == %(py3)sr5   r6   r8   r   Nr9   r;   s         r,   Útest_consolidate_headers_singlerB   ,   sw   € ä Ó"€Fà×(Ñ(¨*¨Ó6€FàÐ�ZÑ×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�Z××××××Òr.   c                  ó¦  • [        5       n U R                  / SQ5      nSo!U:H  o3(       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      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=p2g	)
z$Test consolidating multiple headers.)r@   úHeader 2zHeader 3zHeader 1 ^ Header 2 ^ Header 3r	   rA   r5   r6   r8   r   Nr9   r;   s         r,   Ú!test_consolidate_headers_multiplerE   5   sx   € ä Ó"€Fà×(Ñ(Ò)MÓN€Fà5Ð5Ð5Ñ5×5×5×5Ò5ˆ6×5×5×5×5×5Õ5ˆ6×5×5×5Ñ5ˆ6×5×5Õ5Ð5×5×5×5×5×5×5Ò5r.   c                  ó¤  • [        SS9n U R                  SS/5      nSo!U:H  o3(       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      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS=p2g)z1Test consolidating headers with custom separator.r0   )r   úPart 1úPart 2zPart 1 | Part 2r	   rA   r5   r6   r8   r   Nr9   r;   s         r,   Ú)test_consolidate_headers_custom_separatorrI   >   s~   € ä ¨5Ñ1€Fà×(Ñ(¨(°HÐ)=Ó>€Fà&Ð&Ð&Ñ&×&×&×&Ò&ˆ6×&×&×&×&×&Õ&ˆ6×&×&×&Ñ&ˆ6×&×&Õ&Ð&×&×&×&×&×&×&Ò&r.   c                  ó¤  • [        5       n / nU R                  USSS9nSo2UL 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      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=pCg)z-Test getting preceding text with no elements.r   é   ©ÚlimitNr   r4   r5   r6   r8   r   )
r   Ú_get_preceding_textr   r   r   r   r   r    r!   r"   )r   Úelementsr5   r<   r'   r=   r*   s          r,   Ú#test_get_preceding_text_no_elementsrP   G   s€   € ä Ó"€FØ€Hà×'Ñ'¨°!¸1Ð'Ð=€FàÐ�Tˆ>×××Òˆ6×××××Õˆ6×××Ñˆ6××Õ�T××××××Òr.   c                  óÜ  • [        5       n [        5       nSUl        U[        5       /nU R                  USSS9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      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=pTg)z0Test getting preceding text with single element.zPreceding text contenté   rK   rL   r	   rA   r5   r6   r8   r   N©r   r   ÚtextrN   r   r   r   r   r   r    r!   r"   )r   Ú	mock_elemrO   r5   r<   r'   r=   r*   s           r,   Ú&test_get_preceding_text_single_elementrV   Q   s˜   € ä Ó"€Fä“€IØ-€I„Nàœ4›6Ð"€Hà×'Ñ'¨°!¸1Ð'Ð=€Fà-Ð-Ð-Ñ-×-×-×-Ò-ˆ6×-×-×-×-×-Õ-ˆ6×-×-×-Ñ-ˆ6×-×-Õ-Ð-×-×-×-×-×-×-Ò-r.   c                  ó"  • [        5       n [        5       nSUl        [        5       nSUl        [        5       nSUl        XU[        5       /nU R                  USSS9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      S
.-  nSSU0-  n	[        [        R                  " U	5      5      eS=pvg)z3Test getting preceding text with multiple elements.z
First textzSecond textz
Third textrK   rL   z!First text
Second text
Third textr	   rA   r5   r6   r8   r   NrS   ©
r   Úelem1Úelem2Úelem3rO   r5   r<   r'   r=   r*   s
             r,   Ú)test_get_preceding_text_multiple_elementsr\   _   s¶   € ä Ó"€Fä‹F€EØ€E„Jä‹F€EØ€E„Jä‹F€EØ€E„Jà˜e¤T£VÐ,€Hà×'Ñ'¨°!¸1Ð'Ð=€Fà:Ð:Ð:Ñ:×:×:×:Ò:ˆ6×:×:×:×:×:Õ:ˆ6×:×:×:Ñ:ˆ6×:×:Õ:Ð:×:×:×:×:×:×:Ò:r.   c                  ó  • [        5       n [        5       nSUl        [        5       nSUl        [        5       nSUl        [        5       nSUl        XX4[        5       /nU R                  USSS9nSovU:H  oˆ(       d¥  [        R
                  " S	U4S
Xg4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=p‡So»U;  ow(       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S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS=p·So»U;  ow(       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S.-  n	SSU	0-  n
[        [        R                  " U
5      5      eS=p·g)z2Test that preceding text respects limit parameter.zText 1zText 2zText 3zText 4é   é   rL   zText 3
Text 4r	   rA   r5   r6   r8   r   N©únot in©z%(py1)s not in %(py3)s©Úpy1r7   rS   )r   rY   rZ   r[   Úelem4rO   r5   r<   r'   r=   r*   Ú@py_assert0s               r,   Ú&test_get_preceding_text_respects_limitrg   s   sz  € ä Ó"€Fä‹F€EØ€E„Jä‹F€EØ€E„Jä‹F€EØ€E„Jä‹F€EØ€E„Jà˜e¬D«FÐ3€Hà×'Ñ'¨°!¸1Ð'Ð=€Fà%Ð%Ð%Ñ%×%×%×%Ò%ˆ6×%×%×%×%×%Õ%ˆ6×%×%×%Ñ%ˆ6×%×%Õ%Ð%×%×%×%×%×%×%Ñ%ØÐ!˜6Ñ!×!×!×!Ò!ˆ8×!×!Ô!ˆ8×!×!×!×!×!Ô!˜6×!×!×!Ñ!˜6×!×!×!×!×!×!Ó!ØÐ!˜6Ñ!×!×!×!Ò!ˆ8×!×!Ô!ˆ8×!×!×!×!×!Ô!˜6×!×!×!Ñ!˜6×!×!×!×!×!×!Ô!r.   c                  ó"  • [        5       n [        5       nSUl        [        5       nSUl        [        5       nSUl        XU[        5       /nU R                  USSS9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      S	.-  nS
SU0-  n	[        [        R                  " U	5      5      eS=pvg)z3Test that preceding text skips empty text elements.z
Valid textz   NrK   rL   r	   rA   r5   r6   r8   r   rS   rX   s
             r,   Ú#test_get_preceding_text_skips_emptyri   Œ   s´   € ä Ó"€Fä‹F€EØ€E„Jä‹F€EØ€E„Jä‹F€EØ€E„Jà˜e¤T£VÐ,€Hà×'Ñ'¨°!¸1Ð'Ð=€Fà!Ð!�\Ñ!×!×!×!Ò!ˆ6×!×!×!×!×!Õ!ˆ6×!×!×!Ñ!ˆ6×!×!Õ!�\×!×!×!×!×!×!Ò!r.   c                  óú  • [        5       n [        5       nSUl        [        US5        U[        5       /nU R	                  US5      u  p4/ oSU:H  of(       d¥  [
        R                  " SU4SX54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
=peg
)z7Test finding headers when there are no header elements.zRegular textÚlevelrR   r	   rA   Úheadersr6   r8   r   N)r   r   rT   ÚdelattrÚ_find_preceding_headersr   r   r   r   r   r    r!   r"   )	r   rY   rO   rl   Ú_r<   r'   r=   r*   s	            r,   Ú&test_find_preceding_headers_no_headersrp       s›   € ä Ó"€Fä‹F€EØ€E„JÜˆE�7Ôà”t“vˆ€Hà×/Ñ/°¸!Ó<�J€GàÐ�b‰=×××Òˆ7×××××Õˆ7×××Ñˆ7××Õ�b××××××Òr.   c                  óò  • [        5       n [        5       nSUl        SUl        U[        5       /nU R	                  US5      u  p4S/oSU:H  of(       d¥  [
        R                  " SU4SX54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	=peg	)
z(Test finding single header before table.zTable HeaderrR   r	   rA   rl   r6   r8   r   N©r   r   rT   rk   rn   r   r   r   r   r   r    r!   r"   )	r   ÚheaderrO   rl   ro   r<   r'   r=   r*   s	            r,   Ú)test_find_preceding_headers_single_headerrt   ¯   sŸ   € ä Ó"€Fä‹V€FØ €F„KØ€F„Làœ›Ð€Hà×/Ñ/°¸!Ó<�J€Gà%Ð&Ð&Ð&Ñ&×&×&×&Ò&ˆ7×&×&×&×&×&Õ&ˆ7×&×&×&Ñ&ˆ7×&×&Õ&Ð&×&×&×&×&×&×&Ò&r.   c                  ó$  • [        5       n [        5       nSUl        SUl        [        5       nSUl        SUl        X[        5       /nU R	                  US5      u  pESS/odU:H  ow(       d¥  [
        R                  " SU4SXF4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
=pvg
)z8Test finding multiple consecutive headers of same level.rG   r_   rH   r	   rA   rl   r6   r8   r   Nrr   )
r   Úheader1Úheader2rO   rl   ro   r<   r'   r=   r*   s
             r,   Ú/test_find_preceding_headers_multiple_same_levelrx   ¾   s¶   € ä Ó"€Fä‹f€GØ€G„LØ€G„Mä‹f€GØ€G„LØ€G„Mà¤$£&Ð)€Hà×/Ñ/°¸!Ó<�J€Gà Ð*Ð*Ð*Ñ*×*×*×*Ò*ˆ7×*×*×*×*×*Õ*ˆ7×*×*×*Ñ*ˆ7×*×*Õ*Ð*×*×*×*×*×*×*Ò*r.   c                  óŠ  • [        5       n [        5       nSUl        SUl        [        5       nSUl        SUl        X[        5       /nU R	                  US5      u  pES/odU:H  ow(       d¥  [
        R                  " SU4SXF4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=pvSoªU;  of(       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S.-  nS	S
U0-  n	[        [
        R                  " U	5      5      eS=p¦g)z1Test that header search stops at different level.zLevel 1 HeaderrR   zLevel 2 Headerr_   r	   rA   rl   r6   r8   r   Nr`   rb   rc   rr   )r   rv   rw   rO   rl   ro   r<   r'   r=   r*   rf   s              r,   Ú4test_find_preceding_headers_stops_at_different_levelrz   Ñ   s  € ä Ó"€Fä‹f€GØ#€G„LØ€G„Mä‹f€GØ#€G„LØ€G„Mà¤$£&Ð)€Hà×/Ñ/°¸!Ó<�J€Gà'Ð(Ð(Ð(Ñ(×(×(×(Ò(ˆ7×(×(×(×(×(Õ(ˆ7×(×(×(Ñ(ˆ7×(×(Õ(Ð(×(×(×(×(×(×(Ñ(ØÐ* 7Ñ*×*×*×*Ò*Ð×*×*Ô*Ð×*×*×*×*×*Ô* 7×*×*×*Ñ* 7×*×*×*×*×*×*Ô*r.   c                  ó6  • [        5       n [        5       nSUl        SUl        [        5       nSUR                  l        SUl        X![        5       /nU R                  US5      u  pES/odU:H  ow(       d¥  [        R                  " SU4SXF4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=pvg)z0Test that header search stops at table boundary.ÚHeaderrR   Ú	TableItemNr_   r	   rA   rl   r6   r8   r   )r   r   rT   rk   Ú	__class__Ú__name__rn   r   r   r   r   r   r    r!   r"   )
r   rs   ÚtablerO   rl   ro   r<   r'   r=   r*   s
             r,   Ú*test_find_preceding_headers_stops_at_tabler�   å   s¶   € ä Ó"€Fä‹V€FØ€F„KØ€F„Lä‹F€EØ*€E‡O�OÔØ€E„Jàœt›vÐ&€Hà×/Ñ/°¸!Ó<�J€Gà�jÐ �jÑ × × × Ò ˆ7× × × × × Õ ˆ7× × × Ñ ˆ7× × Õ �j× × × × × × Ò r.   Útmp_pathc           
      ó
  • [        5       n[        SSS/SSSS9[        SSS/SS	S
S9/nU S-  n[        S5         UR                  U[	        U5      5        SSS5        UR
                  oD" 5       oU(       dš  SS[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pESSKn[        U5       nUR                  U5      n	SSS5        W	S   n
SoZU:H  o»(       do  [        R                   " SU4SX¥45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pµU	S   n[#        U5      nSoÕU:H  oî(       d×  [        R                   " SU4SX]45      S[        R                  " 5       ;   d  [        R                  " ["        5      (       a  [        R                  " ["        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=píU	S   S   S   n
SoZU:H  o»(       do  [        R                   " SU4SX¥45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pµU	S   S   S   n
SoZU:H  o»(       do  [        R                   " SU4SX¥45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pµU	S   S   S   n
SoZU:H  o»(       do  [        R                   " SU4SX¥45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pµU	S   S   S   n
SoZU:H  o»(       do  [        R                   " SU4SX¥45      [        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pµg! , (       d  f       GN™= f! , (       d  f       GNÍ= f) z"Test saving metadata to JSON file.r   rR   r@   r1   rK   )Útable_indexÚpage_numberrl   Úconsolidated_headerÚrowsÚcolsr_   rD   r   r^   zmetadata.jsonúbuiltins.printNzAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Úoutput_file)r   r   Úpy4Útotal_tablesr	   )z%(py1)s == %(py4)s)rd   r‹   zassert %(py6)sÚpy6Útables)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sÚlen)r   r   r‹   r   zassert %(py9)sÚpy9r„   r…   r†   )r   r   r   Úsave_metadataÚstrÚexistsr   r   r   r   r    r!   r"   ÚjsonÚopenÚloadr   r�   )r‚   r   Úmetadata_listrŠ   r'   r)   Ú@py_format5r”   ÚfÚdatarf   r<   Ú@py_format7Ú@py_assert6Ú@py_assert5r+   Ú@py_format10s                    r,   Útest_save_metadatarŸ   ø   sP  € ä Ó"€Fô 	ØØØ�LØ *ØØñ	
ô 	ØØØ�LØ *ØØñ	
ð€Mð& ˜_Ñ,€Kä	ÐÕ	 Ø×Ñ˜]¬C°Ó,<Ô=÷ 
!ð ×ÑÐÐÓÐÕ×××××Ñˆ;×××Ñˆ;××ÕÐ××ÓÐ×××××Òãä	ˆkÔ	˜aØ�y‰y˜‹|ˆ÷ 
ð �ÑÐ$ 1Ð$ 1Ñ$×$×$×$Ò$Ð×$×$Ô$Ð×$×$Ó$ 1×$×$×$×$×$×$Ó$Ø�H‰~Ð#Œ3ˆ~ÓÐ# !Ð# !Ñ#×#×#×#Ò#Ð×#×#×#×#×#Õ#Œ3×#×#×#Ñ#Œ3×#×#Õ#ˆ~×#×#Ó#Ð×#×#Ó# !×#×#×#×#×#×#Õ#Ø�‰>˜!Ñ˜]Ñ+Ð0¨qÐ0¨qÑ0×0×0×0Ò0Ð+×0×0Ô0Ð+×0×0Ó0¨q×0×0×0×0×0×0Ó0Ø�‰>˜!Ñ˜]Ñ+Ð0¨qÐ0¨qÑ0×0×0×0Ò0Ð+×0×0Ô0Ð+×0×0Ó0¨q×0×0×0×0×0×0Ó0Ø�‰>˜!ÑÐ2Ñ3ÐA°zÐA°zÑA×A×A×AÒAÐ3×A×AÔAÐ3×A×AÓA°z×A×A×A×A×A×AÓAØ�‰>˜!Ñ˜]Ñ+Ð0¨qÐ0¨qÑ0×0×0×0Ò0Ð+×0×0Ô0Ð+×0×0Ó0¨q×0×0×0×0×0×0Ô0÷ 
!Ö	 ú÷ 
Ö	ús   ¹S'Ä!S9Ó'
S6Ó9
Tc                  óØ  • [        SS9n [        SSSS/SSS	S
SS9n[        S5       nU R                  U5        UR                  o3(       d…  SS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eSnSSS5        g! , (       d  f       g= f)zTest debug info printing.T)r%   r   rR   r@   rD   zHeader 1 ^ Header 2zThis is a test tabler1   rK   zCell A1)r„   r…   rl   r†   Údescriptive_textr‡   rˆ   Úfirst_cell_contentr‰   z*assert %(py2)s
{%(py2)s = %(py0)s.called
}Ú
mock_print)r   r   N)r   r   r   Ú_print_debug_infoÚcalledr   r   r   r   r    r!   r"   )r   Úmetadatar£   r'   Ú@py_format3s        r,   Útest_print_debug_infor¨   #  s©   € ä  tÑ,€FäØØØ˜ZÐ(Ø1Ø/ØØØ$ñ	€Hô 
ÐÔ	  JØ× Ñ  Ô*à× Ñ Ð Õ × × × × × Ñ ˆz× × × Ñ ˆz× × Õ Ð × × × × × Ñ ÷ 
!×	 Ö	 ús   §B+CÃ
C))"Ú__doc__Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úpathlibr   Úunittest.mockr   r   Úquber.core.modelsr   Úquber.core.table_parserr   r-   r2   r>   rB   rE   rI   rP   rV   r\   rg   ri   rp   rt   rx   rz   r�   rŸ   r¨   © r.   r,   Ú<module>r³      s{   ðÙ /ç  „ Õ ß %å +Ý 7ò!ò òò ò6ò'òò.ò;ò("ò2"ò(ò'ò+ò&+ò(!ð&(1 ô (1óV!r.   