
    jf                       d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlZddlmZmZmZmZmZmZmZ  ee      j-                         j.                  j.                  dz  dz  Zg dZ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%ejL                  jO                  d	e      d        Z(d Z)ddZ*ddZ+ddZ,y)u   tests.regression.test_canonical_root_resolver — task-2636.

Spec: memory/specs/system_callback_collector_canonical_root_spec_260523.md §8.
    )annotationsN)Path)CANONICAL_ROOT_DEFAULTCLASS_FOUNDCLASS_MISSING_PATH_FIELDCLASS_NOT_FOUNDfind_artifactresolve_canonical_rootresolve_pathfixtures!callback_collector_canonical_root)canonical_root_explicitcanonical_root_missing_defaultcanonical_root_wrong_absolute relative_paths_resolve_correctlyabsolute_paths_passthrough%cwd_in_autoset_canonical_in_workspacesendfile_only_not_triggernormal_callback_is_triggerscenarioc                    t         | z  }t        j                  |dz  j                  d            }t        j                  |dz  j                  d            }||fS )Nzevidence.jsonzutf-8)encodingzexpected.json)FIXTURE_ROOTjsonloads	read_text)r   baseevidenceexpecteds       D/home/jay/workspace/tests/regression/test_canonical_root_resolver.py_load_fixturer!   *   sY    ("Dzz4/1<<g<NOHzz4/1<<g<NOHX    c                 p   d} t         | k(  }|st        j                  d|fdt         | f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |       dz  }dd|iz  }t        t        j                  |            d x}} y )N/home/jay/workspace==z%(py0)s == %(py3)sr   py0py3assert %(py5)spy5)	r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)@py_assert2@py_assert1@py_format4@py_format6s       r    $test_canonical_root_default_constantr9   1   sb    %::!%:::::!%:::::::!:::!:::%::::::::r"   c                 ,   ddi} t        |       }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}y )
Ncanonical_rootz/explicit/rootr%   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr
   env)r)   py1r*   py6assert %(py8)spy8)	r
   r-   r.   r/   r0   r1   r2   r3   r4   )r<   r5   @py_assert5@py_assert4@py_format7@py_format9s         r    -test_resolve_canonical_root_envelope_overriderE   5   s    -
.C!#&:*::&*:::::&*:::::::!:::!::::::#:::#:::&:::*::::::::r"   c                    i } t        |       }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}dd i} t        |       }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}dd	i} t        |       }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}y )
Nr%   z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py6)sr
   r   r)   py2py4r>   r?   r@   r;    
r
   r   r-   r.   r/   r0   r1   r2   r3   r4   r6   @py_assert3rA   rC   rD   s        r    0test_resolve_canonical_root_default_when_missingrO   :   s   "$?!"%?%)?????%)???????!???!???"???%??????)????)????????#3T":U!":;U;?UUUUU;?UUUUUUU!UUU!UUU":UUU;UUUUUU?UUUU?UUUUUUUU#3R"8S!"89S9=SSSSS9=SSSSSSS!SSS!SSS"8SSS9SSSSSS=SSSS=SSSSSSSSr"   c                 ~    t        j                  t        d      5  t        ddi       d d d        y # 1 sw Y   y xY w)Nabsolutematchr;   relative/pathpytestraises
ValueErrorr
    r"   r    5test_resolve_canonical_root_rejects_relative_enveloperZ   @   s7    	z	4 D 0/BCD D D   3<c                 ~    t        j                  t        d      5  t        i d       d d d        y # 1 sw Y   y xY w)NrQ   rR   rT   )defaultrU   rY   r"   r    4test_resolve_canonical_root_rejects_relative_defaultr^   E   s/    	z	4 <r?;< < <r[   c                    d } t        |       }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}d} t        |       }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d x} x}}y )	Nr%   rG   r
   r   rH   r?   r@   stringrL   rM   s        r    -test_resolve_canonical_root_non_dict_envelopera   J   s0   "&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A+AAAA+AAAAAAAA"*E!(+E+/EEEEE+/EEEEEEE!EEE!EEE(EEE+EEEEEE/EEEE/EEEEEEEEr"   c                 b   ddd} d}t        | |      }d}||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}x}}y )Nr$   z/tmp/x.jsonr;   result_pathrd   r%   z9%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py3)s)
} == %(py8)sr   r<   r)   r=   r*   r,   r@   assert %(py10)spy10	r   r-   r.   r/   r0   r1   r2   r3   r4   r<   r5   rB   @py_assert7@py_assert6rD   @py_format11s          r    &test_resolve_path_absolute_passthroughrn   O   s    2=
QC*<<]+<}<+}<<<<+}<<<<<<<<<<<<<<<<<<<<<<<]<<<+<<<}<<<<<<<r"   c                 b   ddd} d}t        | |      }d}||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               ndd	t        j                         v st        j
                  |       rt        j                  |       nd	t        j                  |      t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}x}}y )N/rootzmemory/reports/t.mdr;   report_pathrr   z/root/memory/reports/t.mdr%   re   r   r<   rf   rg   rh   ri   rj   s          r    !test_resolve_path_relative_concatrs   T   s    $5J
KC*J<]+J/JJ+/JJJJJ+/JJJJJJJ<JJJ<JJJJJJJJJJJJ]JJJ+JJJ/JJJJJJJJr"   c                 f   ddi} d}t        | |      }d}||k(  }|s
t        j                  d|fd||f      dt        j                         v st        j
                  t               rt        j                  t               nddt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}x}}ddd}d}t        ||      }	d}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}x}	x}}
y )Nr;   rp   rd   rK   r%   re   r   r<   rf   rg   rh   rq   rr   )z9%(py6)s
{%(py6)s = %(py0)s(%(py2)s, %(py4)s)
} == %(py9)s)r)   rI   rJ   r>   py9zassert %(py11)spy11ri   )r<   r5   rB   rk   rl   rD   rm   r6   rN   rA   @py_assert8@py_format10@py_format12s                r    'test_resolve_path_missing_returns_emptyrz   Y   sO   W
%C*1<]+1r1+r1111+r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1111111+22F\\<FV\Z\\VZ\\\\\VZ\\\\\\\<\\\<\\\F\\\\\\V\\\Z\\\\\\\\\r"   c            	        ddd} d}d}t        | ||      }d}||k(  }|st        j                  d|fd	||f      d
t        j                         v st        j
                  t               rt        j                  t               nd
dt        j                         v st        j
                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}y )Nz/from/envelopex.jsonrc   rd   z/otherr;   z/other/x.jsonr%   )zR%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, canonical_root=%(py5)s)
} == %(py10)sr   r<   )r)   r=   r*   r,   py7rh   zassert %(py12)spy12ri   )r<   r5   rB   rl   @py_assert9rw   rm   @py_format13s           r    2test_resolve_path_explicit_root_overrides_enveloper   _   s    -h
GC*W8W<]8DWWDWWWWDWWWWWW<WWW<WWWWWWWWWWWW]WWW8WWWDWWWWWWWWWWWr"   c                     ddi} t        j                  t        d      5  t        | dd       d d d        y # 1 sw Y   y xY w)Nrd   r|   rQ   rR   relativer}   )rV   rW   rX   r   )r<   s    r    1test_resolve_path_rejects_relative_canonical_rootr   d   s?    (
#C	z	4 DS-
CD D Ds	   8Ac                
   t        |       \  }}|d   }t        |      }|d   }||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        j                  d|  d      d	z   d
|iz  }t        t        j                  |            d x}}t        |d|      }	t        |d|      }
|d   }|	|k(  }|st        j                  d|fd|	|f      dt	        j
                         v st        j                  |	      rt        j                  |	      ndt        j                  |      dz  }t        j                  d|  d      d	z   d
|iz  }t        t        j                  |            d x}}|d   }|
|k(  }|st        j                  d|fd|
|f      dt	        j
                         v st        j                  |
      rt        j                  |
      ndt        j                  |      dz  }t        j                  d|  d      d	z   d
|iz  }t        t        j                  |            d x}}y )Nenveloper;   r%   r'   	canonicalr(   z	scenario=z canonical mismatchz
>assert %(py5)sr,   rd   r}   rr   result_path_resolvedz result_path resolve mismatchreport_path_resolvedz report_path resolve mismatch)r!   r
   r-   r.   r/   r0   r1   r2   _format_assertmsgr3   r4   r   )r   r   r   r   r   r5   r6   r7   r8   rd   rr   s              r    &test_fixture_canonical_root_resolutionr   j   sC   &x0Hh
#H&x0I !12 922  92              3    H:01     xyQKxyQK"#9: ;::  ;:              ;    H::;     ##9: ;::  ;:              ;    H::;    r"   c                    t        i d      } | d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}| d	   }|t        k(  }|st        j                  d
|fd|t        f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t	        t        j
                  |            d x}}| d   }g }||k(  }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t	        t        j
                  |            d x}x}}y )Nrd   foundFisz%(py1)s is %(py4)sr=   rJ   assert %(py6)sr>   classificationr%   z%(py1)s == %(py3)sr   r=   r*   r+   r,   lookup_attempts)z%(py1)s == %(py4)s)
r	   r-   r.   r2   r3   r4   r   r/   r0   r1   )out@py_assert0rN   r5   @py_format5rC   r7   r8   s           r    %test_find_artifact_missing_path_fieldr   }   s   
M
*Cw< 5 <5    <5   <   5        < $<<<<< $<<<< <<<<<<$<<<<$<<<<<<<< !'R'!R''''!R'''!'''R'''''''r"   c                8   | dz  dz  }|j                   j                  d       |j                  d       t        |       dd}t	        |d      }|d	   }d}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d   }|t        k(  }|st        j                  d|fd|t        f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }	dd|	iz  }
t        t        j                  |
            d x}}|d   }t        |      }||k(  }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nreportsr|   Tparents{}zreports/x.jsonrc   rd   r   r   r   r   r   r>   r   r%   r   r   r   r+   r,   resolved_pathz0%(py1)s == %(py6)s
{%(py6)s = %(py3)s(%(py4)s)
}strtargetr=   r*   rJ   r>   r?   r@   )parentmkdir
write_textr   r	   r-   r.   r2   r3   r4   r   r/   r0   r1   )tmp_pathr   r<   r   r   rN   r5   r   rC   r7   r8   rA   rD   s                r    &test_find_artifact_found_via_canonicalr      s   	!H,F
MM%
dh-'C ]
+Cw<4<4<4<4 / K//// K/// //////K///K///////.3v;.;....;.........3...3......v...v...;.......r"   c                |   t        |       dd}t        |d      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|d   }|t        k(  }|st        j                  d|fd|t        f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }	t        t        j                  |	            d x}}|d   }
t        |
      }d}||k\  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |
      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}
x}x}}y )Nzmissing/nope.jsonrc   rd   r   Fr   r   r   r   r>   r   r%   r   r   r   r+   r,   r      )>=)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)slenr)   rI   rJ   r~   assert %(py9)sru   )r   r	   r-   r.   r2   r3   r4   r   r/   r0   r1   r   )r   r<   r   r   rN   r5   r   rC   r7   r8   r6   rl   rA   @py_format8rx   s                  r    test_find_artifact_not_foundr      sZ   h-*C ]
+Cw< 5 <5    <5   <   5        3 O3333 O333 333333O333O3333333$%+3%&+!+&!++++&!++++++3+++3+++%+++&+++!+++++++r"   c                
   | dz  }|dz  dz  dz  }|j                   j                  d       |j                  d       | dz  }|j                          |j                  d	t	        |             t	        |      d
d}t        |d      }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|d   }t	        |      }||k(  }	|	st        j                  d|	fd||f      t        j                  |      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}	}|d   }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      dz  }d d!|iz  }t        t        j                  |            d x}x}x}}y )"Ndefault_rootmemoryr   r|   Tr   r   primary_rootz4utils.canonical_root_resolver.CANONICAL_ROOT_DEFAULTzmemory/reports/x.jsonrc   rd   r   r   r   r   r   r>   r   r%   r   r   r   r   r?   r@   r      )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   r   r   ru   )r   r   r   setattrr   r	   r-   r.   r2   r3   r4   r/   r0   r1   r   )r   monkeypatchfake_defaultr   r   r<   r   r   rN   r5   r   rC   rA   rD   r6   rl   r   rx   s                     r    &test_find_artifact_fallback_to_defaultr      s     n,LH$y08;F
MM%
dn,L>L@Q l+.C ]
+Cw<4<4<4<4.3v;.;....;.........3...3......v...v...;.......$%+3%&+!+&!++++&!++++++3+++3+++%+++&+++!+++++++r"   )r   r   )r   r   )-__doc__
__future__r   builtinsr/   _pytest.assertion.rewrite	assertionrewriter-   r   pathlibr   rV   utils.canonical_root_resolverr   r   r   r   r	   r
   r   __file__resolver   r   	SCENARIOSr!   r9   rE   rO   rZ   r^   ra   rn   rs   rz   r   r   markparametrizer   r   r   r   r   rY   r"   r    <module>r      s    #        	N##**)* 		;;
TD
<
F
=
K
]X
D Y/ 0$(/,,r"   