
    iV                         d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
mZmZ  G d de	          Z G d d          Z G d d	          ZdS )
u   Skill 系统测试。    N)	SkillBaseSkillContextSkillResultSkillRegistryc                   2    e Zd ZdZdZdZddgZdedefdZ	d	S )
	MockSkillu   测试用 Skill。mockzMock skill for testingz/mock/testctxreturnc                 8   K   t          dd|j                   S )NTzExecuted with args: )successoutput)r   args)selfr   s     ,/root/projects/qq-shell/tests/test_skills.pyexecutezMockSkill.execute   s$      40Qsx0Q0QRRRR    N)
__name__
__module____qualname____doc__namedescriptiontriggersr   r   r    r   r   r   r      sX        D*K!HS S+ S S S S S Sr   r   c                   $    e Zd ZdZd Zd Zd ZdS )TestSkillBaseu   Skill 基类测试。c                    t                      }|j        }d} ||          }d}||u }|st          j        d|fd||f          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}}|j        }d
} ||          }d}||u }|st          j        d|fd||f          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}}|j        }d} ||          }d}||u }|st          j        d|fd||f          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}}d	S )u   测试触发器匹配。
/mock arg1Tis)zM%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.matches
}(%(py4)s)
} is %(py9)sskill)py0py2py4py6py9zassert %(py11)spy11Nr
   z/otherF)
r   matches
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)	r   r#   @py_assert1@py_assert3@py_assert5@py_assert8@py_assert7@py_format10@py_format12s	            r   test_skill_matches_triggerz(TestSkillBase.test_skill_matches_trigger   se   }2\2}}\**2d2*d2222222222*d222222222222u22222u222222}2222\2222*2222d2222222222222222222222222222222}-W-}}W%%--%----------%------------u-----u------}----W----%-----------------------------------}/X/}}X&&/%/&%//////////&%////////////u/////u//////}////X////&////%/////////////////////////////////r   c                 8   t          ddi ddg          }|j        }d}||k    }|st          j        d|fd||f          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}}|j
        }ddg}||k    }|st          j        d|fd||f          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}}dS )u   测试上下文创建。test_sessionuser123arg1arg2)session_nameuser_idsession_stater   ==)z4%(py2)s
{%(py2)s = %(py0)s.session_name
} == %(py5)sr   r$   r%   py5assert %(py7)spy7N)z,%(py2)s
{%(py2)s = %(py0)s.args
} == %(py5)s)r   r@   r+   r,   r-   r.   r/   r0   r1   r2   r   )r   r   r3   @py_assert4r4   @py_format6@py_format8s          r   test_skill_context_creationz)TestSkillBase.test_skill_context_creation   s   '&!	
 
 
 1>1>1111111111>111111111111s11111s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1x+FF++x+++++++++++x+++++++++++++s+++++s++++++x++++++++++++++++++++++++++++++++++r   c                 .   t          ddddi          }|j        }d}||u }|st          j        d|fd||f          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}}|j
        }d}||k    }|st          j        d|fd||f          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}}dS )u   测试结果创建。TDonekeyvalue)r   r   metadatar!   )z/%(py2)s
{%(py2)s = %(py0)s.success
} is %(py5)sresultrE   rG   rH   NrC   )z.%(py2)s
{%(py2)s = %(py0)s.output
} == %(py5)s)r   r   r+   r,   r-   r.   r/   r0   r1   r2   r   )r   rR   r3   rI   r4   rJ   rK   s          r   test_skill_result_creationz(TestSkillBase.test_skill_result_creation'   s   T&E7CSTTT~%%~%%%%%%%%%%~%%%%%%%%%%%%v%%%%%v%%%%%%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%}&&}&&&&&&&&&&}&&&&&&&&&&&&v&&&&&v&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&r   N)r   r   r   r   r:   rL   rS   r   r   r   r   r      sG        0 0 0	, 	, 	,' ' ' ' 'r   r   c                   $    e Zd ZdZd Zd Zd ZdS )TestSkillRegistryu   Skill 注册表测试。c                    t                      }t                      }|                    |           d}|j        }||v }|st	          j        d|fd||f          t	          j        |          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S )	u   测试注册 Skill。r	   )in)z/%(py1)s in %(py5)s
{%(py5)s = %(py3)s._skills
}registry)py1py3rF   rG   rH   N)r   r   register_skillsr+   r,   r0   r-   r.   r/   r1   r2   )r   rX   r#   @py_assert0rI   @py_assert2rJ   rK   s           r   test_register_skillz%TestSkillRegistry.test_register_skill1   s    ??%   )))v)))))))))))v))))))v))))))))))))))))))))))))))))))))))))))))))))))))))))r   c                 V   t                      }|                    t                                 |                    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}}|j        }d	}||k    }|st	          j        d
|fd||f          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}}dS )u   测试查找匹配的 Skill。r    N)is not)z%(py0)s is not %(py3)sfoundr$   rZ   assert %(py5)srF   r	   rC   )z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)srE   rG   rH   )r   r[   r   find_matchingr+   r,   r-   r.   r/   r0   r1   r2   r   )
r   rX   rb   r^   r3   @py_format4rJ   rI   r4   rK   s
             r   test_find_matching_skillz*TestSkillRegistry.test_find_matching_skill:   s    ??)++&&&&&|44  uD          uD            u     u      D                         z#V#zV##########zV############u#####u######z####V#############################r   c                    t                      }|                    t                                 |                    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S )	u    测试无匹配时返回 None。z/unknownNr!   )z%(py0)s is %(py3)srb   rc   rd   rF   )r   r[   r   re   r+   r,   r-   r.   r/   r0   r1   r2   )r   rX   rb   r^   r3   rf   rJ   s          r   test_find_no_matching_skillz-TestSkillRegistry.test_find_no_matching_skillC   s     ??)++&&&&&z22u}uuur   N)r   r   r   r   r_   rg   ri   r   r   r   rU   rU   .   sG        ""* * *$ $ $    r   rU   )r   builtinsr-   _pytest.assertion.rewrite	assertionrewriter+   pytestbutler.skills.baser   r   r   r   r   r   rU   r   r   r   <module>rp      s                    R R R R R R R R R R R RS S S S S	 S S S' ' ' ' ' ' ' '8         r   