
    iia                         d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZmZmZ ej        d             Z G d d          Z G d d	          ZdS )
u   TmuxWrapper 单元测试。    N)Mock)TmuxWrapperPtyStateSessionModec                  "    t          d          S )u   创建 TmuxWrapper 实例。test_)session_prefix)r        -/root/projects/qq-shell/tests/test_wrapper.pytmux_wrapperr      s     g....r   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestTmuxWrapperBasicu!   TmuxWrapper 基础功能测试。c                    t          d          |_        |                    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  }d	d
|iz  }t          t          j
        |                    dx}}|                                 |j        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S )u   测试创建 tmux session。r   
returncodeuser123test_user123==z%(py0)s == %(py3)ssession_namepy0py3assert %(py5)spy5Ntmuxinz%(py1)s in %(py3)sargspy1r   znew-session)r   return_valuecreate_session
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationassert_called_once	call_args)
selfmock_subprocessr   r   @py_assert2@py_assert1@py_format4@py_format6r"   @py_assert0s
             r   test_create_sessionz(TestTmuxWrapperBasic.test_create_session   sY   '+q'9'9'9$#229==--|~----------|~------------|-----|------~-------------------------**,,,(+A.v~vv$}$$$$$$$$$$}$$$$$}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%~%%%%%%%%%%~%%%%%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r   c                    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S )u'   测试 session 存在检测 - 存在。r   r   r   Tisz%(py0)s is %(py3)sresultr   r   r   Nr   r%   session_existsr'   r(   r)   r*   r+   r,   r-   r.   r1   r2   r   r=   r3   r4   r5   r6   s           r   test_session_exists_truez-TestTmuxWrapperBasic.test_session_exists_true   s    '+q'9'9'9$,,^<<v~vvvr   c                    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S )u*   测试 session 存在检测 - 不存在。   r   r   Fr:   r<   r=   r   r   r   Nr>   r@   s           r   test_session_exists_falsez.TestTmuxWrapperBasic.test_session_exists_false&   s    '+q'9'9'9$,,^<<vvvvr   c                    |                     d           |j        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
S )u   测试销毁 session。r   r   zkill-sessionr   r!   r"   r#   r   r   N)
kill_sessionr0   r'   r(   r,   r)   r*   r+   r-   r.   r1   r2   r   r"   r7   r3   r5   r6   s           r   test_kill_sessionz&TestTmuxWrapperBasic.test_kill_session.   s   !!.111(+A.%~%%%%%%%%%%~%%%%%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%~%%%%%%%%%%~%%%%%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r   c                    |                     ddd           |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   测试发送普通命令。test_sessionls -laTenter   r   z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)sr2   r   py2r   assert %(py7)spy7N
	send_keys
call_countr'   r(   r)   r*   r+   r,   r-   r.   r1   r2   r   r4   @py_assert4@py_assert3r6   @py_format8s           r   test_send_keys_normalz*TestTmuxWrapperBasic.test_send_keys_normal6   s   ~xtDDD).Q.)Q..........)Q.......................)....Q.............................r   c                    |                     ddd           |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%   测试发送不含 Enter 的命令。rJ   rK   FrL   rC   r   rO   r2   rP   rR   rS   NrT   rW   s           r   test_send_keys_no_enterz,TestTmuxWrapperBasic.test_send_keys_no_enter<   s   ~xuEEE).Q.)Q..........)Q.......................)....Q.............................r   c                    |                     dd           |j        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
S )u   测试发送特殊键。rJ   zC-cr   r   r!   r"   r#   r   r   N)
rU   r0   r'   r(   r,   r)   r*   r+   r-   r.   rG   s           r   test_send_keys_special_keyz/TestTmuxWrapperBasic.test_send_keys_special_keyB   s    ~u555(+A.u}uur   c                    |                     dd           |j        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S )u   测试发送原始数据。rJ   zraw datar   z-lr   r!   r"   r#   r   r   N)
send_rawr0   r'   r(   r,   r)   r*   r+   r-   r.   rG   s           r   test_send_rawz"TestTmuxWrapperBasic.test_send_rawI   s   nj999(+A.tt|ttttt!zT!!!!!!!!!!zT!!!!!z!!!!!!!!!!!T!!!!!T!!!!!!!!!!!!!!!!!!!!!!!!!!!!!r   c                    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}}|j        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S )u   测试抓取终端内容。zline1
line2
line3r   stdoutr   rJ   line1r   r!   r=   r#   r   r   Nzcapture-paner"   )r   r%   capture_paner'   r(   r,   r)   r*   r+   r-   r.   r0   )	r1   r2   r   r=   r7   r3   r5   r6   r"   s	            r   test_capture_panez&TestTmuxWrapperBasic.test_capture_paneQ   s   '+3HUV'W'W'W$**>:: w&          w&     w           &     &                           (+A.%~%%%%%%%%%%~%%%%%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%r   N)__name__
__module____qualname____doc__r8   rA   rD   rH   r[   r]   r_   rb   rh   r
   r   r   r   r      s        ++& & &    & & &/ / // / /  " " "& & & & &r   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestTmuxWrapperModeDetectionu!   TmuxWrapper 模式检测测试。c                    t          dd          t          dd          g|_        |                    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  }dd|iz  }t          t          j
        |                    dx}}dS )u   测试检测 vim 进程。12345
r   rd   	vim
bash
rJ   vimr   r   procr   r   r   Nr   side_effectget_active_processr'   r(   r)   r*   r+   r,   r-   r.   r1   r2   r   rs   r3   r4   r5   r6   s           r   test_get_active_process_vimz8TestTmuxWrapperModeDetection.test_get_active_process_vim_   
    	a000!444'
#
 ..~>>tu}tuttur   c                    t          dd          t          dd          g|_        |                    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  }dd|iz  }t          t          j
        |                    dx}}dS )u   测试检测 top 进程。rp   r   rd   z	top
bash
rJ   topr   r   rs   r   r   r   Nrt   rw   s           r   test_get_active_process_topz8TestTmuxWrapperModeDetection.test_get_active_process_topi   ry   r   c                    t          dd          t          dd          g|_        |                    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$   测试只有 shell 时返回 None。rp   r   rd   bash
rJ   Nr:   r<   rs   r   r   r   rt   rw   s           r   "test_get_active_process_shell_onlyz?TestTmuxWrapperModeDetection.test_get_active_process_shell_onlys   s
    	a000Q///'
#
 ..~>>tt|tttttr   c                 l   t          dd          t          dd          g|_        |                    d          }t          j        }||k    }|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	        t                    rt          j
        t                    nd	t          j
        |          d
z  }dd|iz  }t          t          j        |                    dx}}dS )u    测试 vim 触发交互模式。rp   r   rd   rq   rJ   r   )z3%(py0)s == %(py4)s
{%(py4)s = %(py2)s.INTERACTIVE
}moder   r   rQ   py4assert %(py6)spy6N)r   ru   detect_moder   INTERACTIVEr'   r(   r)   r*   r+   r,   r-   r.   r1   r2   r   r   rY   r4   @py_format5@py_format7s           r   test_detect_mode_vimz1TestTmuxWrapperModeDetection.test_detect_mode_vim}   sK    	a000!444'
#
 ''77"..t...........t.............t.....t.............{.....{..................................r   c                 l   t          dd          t          dd          g|_        |                    d          }t          j        }||k    }|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	        t                    rt          j
        t                    nd	t          j
        |          d
z  }dd|iz  }t          t          j        |                    dx}}dS )u-   测试普通命令保持自然语言模式。rp   r   rd   r~   rJ   r   )z8%(py0)s == %(py4)s
{%(py4)s = %(py2)s.NATURAL_LANGUAGE
}r   r   r   r   r   N)r   ru   r   r   NATURAL_LANGUAGEr'   r(   r)   r*   r+   r,   r-   r.   r   s           r   test_detect_mode_normalz4TestTmuxWrapperModeDetection.test_detect_mode_normal   sK    	a000Q///'
#
 ''77"33t33333333333t3333333333333t33333t3333333333333{33333{3333333333333333333333333333333333r   N)	ri   rj   rk   rl   rx   r|   r   r   r   r
   r   r   rn   rn   \   se        ++      / / /4 4 4 4 4r   rn   )rl   builtinsr)   _pytest.assertion.rewrite	assertionrewriter'   pytestunittest.mockr   butler.session.wrapperr   r   r   fixturer   r   rn   r
   r   r   <module>r      s    ! !                     E E E E E E E E E E / / /
K& K& K& K& K& K& K& K&\34 34 34 34 34 34 34 34 34 34r   