
    ;iF.                        d Z ddlZddlmc mZ ddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlZ ee      j"                  j"                  Zedz  Zej(                  j+                  de      Zg ZdZeeuZeZerej6                  ZdZeeuZeZesB ej>                  defdeef      d	 ej@                         v s ejB                  e      r ejD                  e      nd	 ejD                  e      d
z  Z#dde#iz  Z$ejK                  e$       er ej>                  defdeef      d	 ej@                         v s ejB                  e      r ejD                  e      nd	 ejD                  e       ejD                  e      dz  Z&dde&iz  Z'ejK                  e'        ejP                  ed      i z  Z)dde)iz  Z* e+ ejX                  e*            dxZxZxZxZxZxZZej(                  j[                  e      Z.e.e
j^                  d<   ej6                  ja                  e.       g dZ1dZ2 G d d      Z3 G d d      Z4 G d d      Z5 G d d      Z6 G d d      Z7 G d d       Z8 G d! d"      Z9 G d# d$      Z: G d% d&      Z; G d' d(      Z<y))u3   Tests for gen-skill-docs.py — TDD (RED → GREEN)    N)Path)patchzgen-skill-docs.pygen_skill_docsis not)z%(py2)s is not %(py5)sspec)py2py5z%(py7)spy7)z5%(py11)s
{%(py11)s = %(py9)s.loader
} is not %(py14)s)py9py11py14z%(py16)spy16zassert %(py19)spy19)z# ## Description
## Trigger## Usage## Examples## Filesz# MySkill

## Description
Does something useful.

## Trigger
When user asks.

## Usage
Call it like this.

## Examples
Example 1.

## Files
- skill.py
c                       e Zd Zd Zd Zy)TestEmptySkillsDirc                 B   t         j                  t        |            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d	   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|d
   }d}||k(  }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}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 )N
skills_dirskills_checkedr   ==z%(py1)s == %(py4)spy1py4assert %(py6)spy6	compliantnon_compliantdetails)gsdverify_skillsstr
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanation)selftmp_pathresult@py_assert0@py_assert3@py_assert2@py_format5@py_format7s           8/home/jay/workspace/scripts/tests/test_gen_skill_docs.py"test_empty_dir_returns_zero_skillsz5TestEmptySkillsDir.test_empty_dir_returns_zero_skills/   sb   ""c(m"<&',1,'1,,,,'1,,,',,,1,,,,,,,k"'a'"a''''"a'''"'''a'''''''o&+!+&!++++&!+++&+++!+++++++i &B& B&&&& B&&& &&&B&&&&&&&    c           	         t         j                  t        |            }|j                  } |       }t	        |      }h 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 )
Nr   >   r&   r$   r%   r   r   )zb%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.keys
}()
})
} == %(py10)ssetr1   )py0r    py3r
   r   py10assert %(py12)spy12)r'   r(   r)   keysr;   r*   r+   @py_builtinslocals_should_repr_global_namer,   r-   r.   )
r/   r0   r1   r4   @py_assert4@py_assert6@py_assert9@py_assert8@py_format11@py_format13s
             r7   !test_empty_dir_has_correct_schemaz4TestEmptySkillsDir.test_empty_dir_has_correct_schema6   s    ""c(m"<;;`;=`s=!`%``!%`````!%```````s```s``````6```6```;```=```!```%`````````r9   N)__name__
__module____qualname__r8   rK    r9   r7   r   r   .   s    'ar9   r   c                       e Zd Zd Zd Zy)TestCompliantSkillc                    |dz  }|j                          |dz  j                  t               t        j	                  t        |            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}y )NmyskillSKILL.mdr   r$      r   r   r   r"   r#   r%   r   mkdir
write_textCOMPLIANT_SKILL_MDr'   r(   r)   r*   r+   r,   r-   r.   	r/   r0   	skill_dirr1   r2   r3   r4   r5   r6   s	            r7   "test_compliant_skill_passes_verifyz5TestCompliantSkill.test_compliant_skill_passes_verify?   s    y(		Z	++,>?""c(m"<k"'a'"a''''"a'''"'''a'''''''o&+!+&!++++&!+++&+++!+++++++r9   c                    |dz  }|j                          |dz  j                  t               t        j	                  t        |            }|d   d   }|d   }d}||k(  }|slt        j                  d|fd	||f      t        j                  |      t        j                  |      d
z  }dd|iz  }	t        t        j                  |	            d x}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 )NrS   rT   r   r&   r   statusr$   r   r   r   r"   r#   missing_sectionsrV   )
r/   r0   r[   r1   detailr2   r3   r4   r5   r6   s
             r7   "test_compliant_skill_detail_statusz5TestCompliantSkill.test_compliant_skill_detail_statusH   s    y(		Z	++,>?""c(m"<	"1%h.;.;....;......;.......()/R/)R////)R///)///R///////r9   N)rL   rM   rN   r\   ra   rO   r9   r7   rQ   rQ   >   s    ,0r9   rQ   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestMissingSectionsc                    |dz  }|j                          t        j                  dd      }|dz  j                  |       t        j                  t        |            }|d   d   }d}|d	   }||v }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y )NrS   z## Examples
Example 1.

 rT   r   r&   r   Examplesr_   inz%(py1)s in %(py4)sr   r"   r#   rW   rY   replacerX   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r[   contentr1   r`   r2   r3   r4   r5   r6   s              r7   test_missing_examples_detectedz2TestMissingSections.test_missing_examples_detectedW   s    y(	$,,-JBO	Z	++G4""c(m"<	"1%7V$677z77777z7777z77777777777r9   c                    |dz  }|j                          t        j                  dd      }|dz  j                  |       t        j                  t        |            }|d   d   }d}|d	   }||v }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y )NrS   z## Files
- skill.py
re   rT   r   r&   r   Filesr_   rg   ri   r   r"   r#   rj   rl   s              r7   test_missing_files_detectedz/TestMissingSections.test_missing_files_detecteda   s    y(	$,,-ErJ	Z	++G4""c(m"<	"1%4&!344w44444w4444w44444444444r9   c                    |dz  }|j                          |dz  j                  d       t        j                  t	        |            }|d   d   }|d   }d}||v }|st        j                  d	|fd
||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d x}}d}||v }|st        j                  d	|fd
||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d x}}d}||v }|st        j                  d	|fd
||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d x}}d}||v }|st        j                  d	|fd
||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d x}}y )NrS   rT   z%# MySkill

## Description
Only this.
r   r&   r   r_   Triggerrg   z%(py1)s in %(py3)smissingr    r=   assert %(py5)sr
   Usagerf   rp   )rW   rX   r'   r(   r)   r*   r+   r,   rB   rC   rD   r-   r.   )
r/   r0   r[   r1   r`   ru   r2   r4   @py_format4@py_format6s
             r7   test_multiple_missing_sectionsz2TestMissingSections.test_multiple_missing_sectionsk   s   y(		Z	++,WX""c(m"<	"1%+,#yG####yG###y######G###G#######!w'!!!!w'!!!w!!!!!!'!!!'!!!!!!!$zW$$$$zW$$$z$$$$$$W$$$W$$$$$$$!w'!!!!w'!!!w!!!!!!'!!!'!!!!!!!r9   c                 P   |dz  }|j                          t        j                  t        |            }|d   }d}||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d x}x}}|d
   d   }	|	d   }
t        |
      }d}||kD  }|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 )NrS   r   r%   rU   r   r   r   r"   r#   r&   r   r_   )>)z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)slen)r<   r	   r!   r   zassert %(py9)sr   )rW   r'   r(   r)   r*   r+   r,   r-   r.   r~   rB   rC   rD   )r/   r0   r[   r1   r2   r3   r4   r5   r6   r`   @py_assert1rF   @py_assert5@py_format8@py_format10s                  r7   %test_no_skill_md_all_sections_missingz9TestMissingSections.test_no_skill_md_all_sections_missingx   s   y(	 ""c(m"<o&+!+&!++++&!+++&+++!+++++++	"1%,-2s-.22.2222.222222s222s222-222.2222222222r9   c                    dD ]+  }||z  }|j                          |dz  j                  d       - t        j                  t	        |            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}}y )N)skill_askill_brT   z# Title
r   r%      r   r   r   r"   r#   r$   r   )
rW   rX   r'   r(   r)   r*   r+   r,   r-   r.   
r/   r0   namedr1   r2   r3   r4   r5   r6   s
             r7    test_non_compliant_count_correctz4TestMissingSections.test_non_compliant_count_correct   s    * 	5D4AGGI^''4	5
 ""c(m"<o&+!+&!++++&!+++&+++!+++++++k"'a'"a''''"a'''"'''a'''''''r9   N)rL   rM   rN   rn   rq   r{   r   r   rO   r9   r7   rc   rc   V   s    85"3(r9   rc   c                   $    e Zd Zd Zd Zd Zd Zy)TestGenerateSkillMdc                    |dz  }|j                          t        j                  t        |      d       d}||z  }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}}y )Nnewskillr[   
skill_namerT   zMassert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}r[   r<   r	   r
   r   rW   r'   generate_skill_mdr)   existsrB   rC   r*   rD   r,   r-   r.   )r/   r0   r[   r   r3   rE   rF   r   s           r7   test_generate_creates_skill_mdz2TestGenerateSkillMd.test_generate_creates_skill_md   s    z)	I:N&0	J&0&..0.00000000	000	000J000.0000000000r9   c                    |dz  }|j                          t        j                  t        |      d       t        j	                  t        |            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}y )Nr   r   r   r$   rU   r   r   r   r"   r#   )
rW   r'   r   r)   r(   r*   r+   r,   r-   r.   rZ   s	            r7   %test_generated_skill_md_passes_verifyz9TestGenerateSkillMd.test_generated_skill_md_passes_verify   s    z)	I:N""c(m"<k"'a'"a''''"a'''"'''a'''''''r9   c                 >   |dz  }|j                          t        j                  t        |      d       |dz  j	                         }dD ]  }||v }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            d } y )Nsr   rT   )r   r   r   r   r   rg   )z%(py0)s in %(py2)ssectionrm   r<   r	   assert %(py4)sr!   )rW   r'   r   r)   	read_textr*   r+   rB   rC   rD   r,   r-   r.   )r/   r0   r[   rm   r   r   @py_format3r5   s           r7   #test_generate_includes_all_sectionsz7TestGenerateSkillMd.test_generate_includes_all_sections   s    sN	I3Gz)446^ 	&Gg%%%%7g%%%%%%7%%%7%%%%%%g%%%g%%%%%%%	&r9   c                    |dz  }|j                          t        j                  t        |      d       |dz  j	                         }d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd	|iz  }t        t        j                  |            d x}}y )
Nawesomer   rT   rg   rt   rm   rv   rw   r
   )rW   r'   r   r)   r   r*   r+   r,   rB   rC   rD   r-   r.   )r/   r0   r[   rm   r2   r4   ry   rz   s           r7   test_generate_fills_skill_namez2TestGenerateSkillMd.test_generate_fills_skill_name   s    y(	I9Mz)446#yG####yG###y######G###G#######r9   N)rL   rM   rN   r   r   r   r   rO   r9   r7   r   r      s    1(&$r9   r   c                       e Zd Zd Zd Zd Zy)
TestDryRunc                    |dz  }|j                          t        j                  t        |      dd       d}||z  }|j                  } |       }| }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}x}}y )NdryskillTr[   r   dry_runrT   zQassert not %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}r[   r   r   )	r/   r0   r[   r   r3   rE   rF   rH   @py_format9s	            r7   !test_dry_run_does_not_create_filez,TestDryRun.test_dry_run_does_not_create_file   s    z)	I:W[\ *4I
*4*224244444444444I444I444
444244444444444r9   c                    |dz  }|j                          t        j                  t        |      dd      }d }||u}|st	        j
                  d|fd||f      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}}d
}||v }|st	        j
                  d|fd||f      t	        j                  |      dt        j                         v st	        j                  |      rt	        j                  |      nddz  }dd	|iz  }t        t	        j                  |            d x}}y )Nr   Tr   r   )z%(py0)s is not %(py3)spreview)r<   r=   rw   r
   r   rg   rt   rv   )rW   r'   r   r)   r*   r+   rB   rC   rD   r,   r-   r.   )	r/   r0   r[   r   r4   r   ry   rz   r2   s	            r7   $test_dry_run_returns_preview_contentz/TestDryRun.test_dry_run_returns_preview_content   s    z)	''#i.Zae'f""wd""""wd""""""w"""w"""d"""""""*7****7*********7***7*******r9   c                    |dz  }|j                          d}|dz  j                  |       t        j                  t	        |      dd       d}||z  }|j
                  } |       }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }	dd|	iz  }
t        t        j                  |
            d x}x}x}x}}y )Nexistingz# Original
rT   Tr   r   )zT%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_text
}()
} == %(py9)sr[   original)r<   r	   r
   r   r   zassert %(py11)sr   )rW   rX   r'   r   r)   r   r*   r+   rB   rC   rD   r,   r-   r.   )r/   r0   r[   r   r   r3   rE   rF   rH   r   @py_format12s              r7   (test_dry_run_does_not_overwrite_existingz3TestDryRun.test_dry_run_does_not_overwrite_existing   s    z)	!	Z	++H5I:W[\&?	J&?&11?13?3x????3x??????	???	???J???1???3??????x???x????????r9   N)rL   rM   rN   r   r   r   rO   r9   r7   r   r      s    5+@r9   r   c                       e Zd Zd Zd Zy)TestSpecificSkillc                    dD ]/  }||z  }|j                          |dz  j                  t               1 t        j	                  t        |      d      }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}}|d   d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      d	z  }d
d|iz  }	t        t        j                  |	            d x}x}}y )N)alphabetagammarT   r   r   r   r   rU   r   r   r   r"   r#   r&   r   skillrV   r   s
             r7   test_verify_specific_skill_onlyz1TestSpecificSkill.test_verify_specific_skill_only   s    . 	<D4AGGI^''(:;	<
 ""c(m"P&',1,'1,,,,'1,,,',,,1,,,,,,,i #G,77,7777,777,7777777777r9   c                    dD ]  }||z  j                           t        j                  t        |dz        d       d}||z  }d}||z  }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }	t        t        j                  |	            d x}x}x}x}x}}d}||z  }d}||z  }|j                  } |       }| }
|
sd	dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}x}x}x}}
y )
N)r   r   r   r   rT   z[assert %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = ((%(py0)s / %(py2)s) / %(py5)s).exists
}()
}r0   )r<   r	   r
   py8r>   r   z_assert not %(py10)s
{%(py10)s = %(py8)s
{%(py8)s = ((%(py0)s / %(py2)s) / %(py5)s).exists
}()
}r   )r/   r0   r   r   r3   rE   rF   @py_assert7rG   rI   @py_assert11r   s               r7   !test_generate_specific_skill_onlyz3TestSpecificSkill.test_generate_specific_skill_only   sw   % 	&D_##%	& 	Hw,>(?GT"97"9Z9"Z/9/7797999999999999997999Z999799999999999%<Hv%<
<%
2<2::<:<<<<<<<<<<<H<<<H<<<v<<<
<<<:<<<<<<<<<<<r9   N)rL   rM   rN   r   r   rO   r9   r7   r   r      s    8=r9   r   c                       e Zd Zd Zd Zd Zy)TestNonExistentSkillc                     t        j                  t        j                        5  t        j	                  d       d d d        y # 1 sw Y   y xY w)Nz/no/such/path/skillsr   )pytestraisesr'   SkillsErrorr(   r/   s    r7   )test_verify_nonexistent_skills_dir_raisesz>TestNonExistentSkill.test_verify_nonexistent_skills_dir_raises   s=    ]]3??+ 	A)?@	A 	A 	As   AAc                     t        j                  t        j                        5  t        j	                  t        |      d       d d d        y # 1 sw Y   y xY w)Nghostr   )r   r   r'   r   r(   r)   )r/   r0   s     r7   )test_verify_specific_missing_skill_raisesz>TestNonExistentSkill.test_verify_specific_missing_skill_raises   sB    ]]3??+ 	LX7K	L 	L 	Ls   !AAc                     t        j                  t        j                        5  t        j	                  dd       d d d        y # 1 sw Y   y xY w)Nz/no/such/skillr   r   )r   r   r'   r   r   r   s    r7   $test_generate_nonexistent_dir_raisesz9TestNonExistentSkill.test_generate_nonexistent_dir_raises   s?    ]]3??+ 	R!!,<!Q	R 	R 	Rs   AAN)rL   rM   rN   r   r   r   rO   r9   r7   r   r      s    ALRr9   r   c                       e Zd Zd Zd Zy)TestJsonSerializablec                    |dz  }|j                          |dz  j                  t               t        j	                  t        |            }t        j                  |      }t        j                  |      }|d   }|d   }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd	|	iz  }
t        t        j                  |
            d x}x}}y )
NrS   rT   r   r   r   r   r   r"   r#   )rW   rX   rY   r'   r(   r)   jsondumpsloadsr*   r+   r,   r-   r.   )r/   r0   r[   r1   dumpedreloadedr2   r3   r4   r5   r6   s              r7   'test_verify_result_is_json_serializablez<TestJsonSerializable.test_verify_result_is_json_serializable   s    y(		Z	++,>?""c(m"<F#::f%()EV4D-EE)-EEEEE)-EEEE)EEE-EEEEEEEEr9   c                    |dz  }|j                          |dz  j                  t               t        j	                  t        |            }|d   d   }d}||v }|st        j                  d|fd||f      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }dd|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }dd|iz  }t        t        j                  |            d x}}d}||v }|st        j                  d|fd||f      t        j                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }dd|iz  }t        t        j                  |            d x}}y )NrS   rT   r   r&   r   r   rg   rt   r`   rv   rw   r
   r_   r^   )rW   rX   rY   r'   r(   r)   r*   r+   r,   rB   rC   rD   r-   r.   )	r/   r0   r[   r1   r`   r2   r4   ry   rz   s	            r7   )test_verify_details_contain_required_keysz>TestJsonSerializable.test_verify_details_contain_required_keys  s^   y(		Z	++,>?""c(m"<	"1% w&    w&   w      &   &       !+!V++++!V+++!++++++V+++V+++++++!x6!!!!x6!!!x!!!!!!6!!!6!!!!!!!r9   N)rL   rM   rN   r   r   rO   r9   r7   r   r      s    F	"r9   r   c                       e Zd Zd Zd Zy)TestGenerateAllSkillsc           	         dD ]  }||z  j                           t        j                  t        |             dD ]  }||z  }d}||z  }|j                  } |       }|sddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}x}} y )N)abcr   rT   zYassert %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = ((%(py0)s / %(py1)s) / %(py4)s).exists
}()
}r0   r   )r<   r    r!   r   r   )rW   r'   generate_all_skillsr)   r   rB   rC   r*   rD   r,   r-   r.   )	r/   r0   r   r4   r3   r   rF   rH   r   s	            r7   +test_generate_all_creates_missing_skill_mdszATestGenerateAllSkills.test_generate_all_creates_missing_skill_mds  s    # 	&D_##%	& 	3x=9# 	;DtO:j:Oj0:088:8::::::::H:::H::::::t:::t:::j:::8:::::::::::	;r9   c                    |dz  }|j                          |dz  j                  t               t        j	                  t        |             |dz  j                         }|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              nddz  }d	d
|iz  }t        t        j                  |            d }y )Nr   rT   r   r   )z%(py0)s == %(py2)srm   rY   r   r   r!   )rW   rX   rY   r'   r   r)   r   r*   r+   rB   rC   rD   r,   r-   r.   )r/   r0   r[   rm   r   r   r5   s          r7   .test_generate_all_preserves_compliant_existingzDTestGenerateAllSkills.test_generate_all_preserves_compliant_existing!  s    z)		Z	++,>?3x=9z)446,,,,,w,,,,,,,w,,,w,,,,,,,,,,,,,,,,,,r9   N)rL   rM   rN   r   r   rO   r9   r7   r   r     s    ;-r9   r   c                       e Zd Zd Zd Zd Zy)TestCheckSectionc           	         d}t         j                  }d} |||      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      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}x}}y )N# Title

## Description
Hello
DescriptionTisz]%(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.check_section
}(%(py3)s, %(py5)s)
} is %(py10)sr'   rm   r<   r	   r=   r
   r   r>   r?   r@   
r'   check_sectionr*   r+   rB   rC   rD   r,   r-   r.   	r/   rm   r   rE   rF   rG   rH   rI   rJ   s	            r7   test_section_presentz%TestCheckSection.test_section_present0  s    6  @-@ -8@D@8D@@@@8D@@@@@@s@@@s@@@ @@@@@@@@@@@@-@@@8@@@D@@@@@@@@r9   c           	         d}t         j                  }d} |||      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      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}x}}y )Nr   rx   Fr   r   r'   rm   r   r?   r@   r   r   s	            r7   test_section_absentz$TestCheckSection.test_section_absent4  s    6  ;'; '2;e;2e;;;;2e;;;;;;s;;;s;;; ;;;;;;;;;;;;';;;2;;;e;;;;;;;;r9   c           
         dD ]O  }t         j                  }d} |||      }d}||u }|st        j                  d|fd||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                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}x}x}}R y )N)r   rs   rx   rf   rp   re   Fr   )z]%(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.check_section
}(%(py4)s, %(py5)s)
} is %(py10)sr'   r   )r<   r	   r!   r
   r   r>   r?   r@   r   )	r/   r   r   r3   rF   rG   rH   rI   rJ   s	            r7   test_empty_content_all_absentz.TestCheckSection.test_empty_content_all_absent8  s    O 	;G$$:R:$R1:U:1U::::1U::::::3:::3:::$:::R::::::::::::1:::U::::::::	;r9   N)rL   rM   rN   r   r   r   rO   r9   r7   r   r   /  s    A<;r9   r   )=__doc__builtinsrB   _pytest.assertion.rewrite	assertionrewriter*   importlib.util	importlibr   syspathlibr   unittest.mockr   r   __file__parent_SCRIPTS_DIR_MODULE_PATHutilspec_from_file_locationr   r   rE   r3   r2   loader@py_assert10@py_assert13@py_assert12r+   rC   rD   r,   rz   r   append@py_format15@py_format17_format_boolop@py_format18@py_format20r-   r.   module_from_specr'   modulesexec_moduleREQUIRED_SECTIONSrY   r   rQ   rc   r   r   r   r   r   r   r   rO   r9   r7   <module>r     s   9      
    H~$$++11~~--.>M 34 3t4 3DKK 3t 3Kt3 3 3 3t4 3 3 3 3 3t 3 3 3t 3 3 34 3 3 3 3 3 3 3Kt 3 3 3 3 3D 3 3 3D 3 3 3K 3 3t 3 3 3 3 3 3 3 3 3 3 3 3 3nn%%d+ #     a  .
a 
a 0 004( 4(t$ $H@ @@= =0R R"" "4- -0; ;r9   