a
    F^it3                     @   s  d dl mZmZmZmZmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlZd dlmZmZ G dd dejjZe ZG dd deZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd deZ$G dd deZ%G dd deZ&G dd  d eZ'G d!d" d"eZ(G d#d$ d$eZ)G d%d& d&eZ*G d'd( d(eZ+dS ))    )divisionabsolute_importwith_statementprint_functionunicode_literals)PY2
basestringbchrbordchropenpystrrangeroundstrtobytesunicodeN)click_mouse
move_mousec                   @   s   e Zd Zdd ZdS )TestSettingsc                 C   s   d| _ d| _d| _d| _d S )NTg      @F)maximum_frameratetimeoutforcetransition_timeoutself r   VC:\Program Files (x86)\Steam\steamapps\common\Selene ~Apoptosis~\renpy\test\testast.py__init__   s    zTestSettings.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )Nodez(
    An AST node for a test script.
    c                 C   s   |\| _ | _d S N)filename
linenumber)r   locr   r   r   r   5   s    zNode.__init__c                 C   s   dS )z
        Called once when the node starts execution.

        This is expected to return a state, or None to advance to the next
        node.
        Nr   r   r   r   r   start8   s    z
Node.startc                 C   s   |S )z
        Called once each time the screen is drawn.

        `state`
            The last state that was returned from this node.

        `t`
            The time since start was called.
        r   r   statetr   r   r   execute@   s    zNode.executec                 C   s   dS )zT
        Returns True if this node is ready to execute, or False otherwise.
        Tr   r   r   r   r   readyM   s    z
Node.readyc                 C   s   | j | jftjj_dS )z
        Reports the location of this statement. This should only be called
        in the execute method of leaf nodes of the test tree.
        N)r$   r%   renpytesttestexecutionZnode_locr   r   r   r   reportT   s    zNode.reportN)	r   r    r!   __doc__r   r'   r+   r,   r0   r   r   r   r   r"   0   s   r"   c                   @   s>   e Zd ZdZdZdddZdd Zdd Zd	d
 Zdd Z	dS )PatternNFc                 C   s   t | | || _d S r#   r"   r   patternr   r&   r4   r   r   r   r   b   s    zPattern.__init__c                 C   s   dS NTr   r   r   r   r   r'   f   s    zPattern.startc                 C   s   |    tjjjr |tjk r |S | jd ur:tj	| j}nd}tj
j| j}|d u r`d\}}ntj
j||\}}|d u r| jr|S tj \}}| ||||S )N)NN)r0   r-   display	interfacetrans_pause_testr   positionpythonpy_evalr.   	testfocus
find_focusr4   find_positionexportsget_mouse_posperform)r   r)   r*   r;   fxyr   r   r   r+   i   s    

zPattern.executec                 C   s.   | j r
dS tjj| j}|d ur&dS dS d S NTF)alwaysr-   r.   r>   r?   r4   r   rD   r   r   r   r,      s    zPattern.readyc                 C   s   d S r#   r   r   rE   rF   r)   r*   r   r   r   rC      s    zPattern.perform)N)
r   r    r!   r;   rH   r   r'   r+   r,   rC   r   r   r   r   r2   ]   s   
r2   c                   @   s   e Zd ZdZdd ZdS )Click   c                 C   s   t | j|| d S r#   )r   buttonrJ   r   r   r   rC      s    zClick.performN)r   r    r!   rM   rC   r   r   r   r   rK      s   rK   c                   @   s   e Zd Zdd ZdS )Movec                 C   s   t || d S r#   )r   rJ   r   r   r   rC      s    
zMove.performN)r   r    r!   rC   r   r   r   r   rN      s   rN   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )ScrollNc                 C   s   t | | || _d S r#   r3   r5   r   r   r   r      s    zScroll.__init__c                 C   s   dS r6   r   r   r   r   r   r'      s    zScroll.startc                 C   s~   |    tjj| j}|d u r$dS t|jtjj	j
s:dS |jj}|j|jkrTd}n|j|j }||jkrp|j}|| d S )NTr   )r0   r-   r.   r>   r?   r4   
isinstancewidgetr7   behaviorBar
adjustmentvaluer   pagechange)r   r)   r*   rD   Zadjnewr   r   r   r+      s    

zScroll.executec                 C   s$   t jj| j}|d urdS dS d S rG   )r-   r.   r>   r?   r4   rI   r   r   r   r,      s    zScroll.ready)Nr   r    r!   r   r'   r+   r,   r   r   r   r   rO      s   
rO   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Dragc                 C   s(   t | | || _d | _d| _d| _d S )NrL   
   )r"   r   pointsr4   rM   steps)r   r&   r\   r   r   r   r      s
    zDrag.__init__c                 C   s   dS r6   r   r   r   r   r   r'      s    z
Drag.startc              
      s~  |    tjjjr|S | jr:tjj| j  d u r>|S nd  |du r:tj	
| j} fdd|D }t|dk r|tdg }|d \}}|||f |dd  D ]b\}}td| jd D ]@}	d|	 | j }
|t||
||   t||
||   f q|}|}q|d\}}tjj|| tjj| j n"|}|d\}}tjj|| |svtjj| j d S |S d S )	NTc                    s   g | ]}t jj |qS r   )r-   r.   r>   r@   ).0irD   r   r   
<listcomp>       z Drag.execute.<locals>.<listcomp>   z$A drag requires at least two points.r   rL   g      ?)r0   r-   r7   r8   r9   r4   r.   r>   r?   r<   r=   r\   len	Exceptionappendr   r]   intpop	testmouser   press_mouserM   release_mouse)r   r)   r*   r\   ZinterpointsZxaZyaxbZybr_   donerE   rF   r   r`   r   r+      sF    

zDrag.executec                 C   s2   | j d u rdS tjj| j }|d ur*dS dS d S rG   )r4   r-   r.   r>   r?   rI   r   r   r   r,     s    
z
Drag.readyNrY   r   r   r   r   rZ      s   =rZ   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	Typeg{Gz?c                 C   s   t | | || _d S r#   )r2   r   keys)r   r&   ro   r   r   r   r   ,  s    zType.__init__c                 C   s   dS )Nr   r   r   r   r   r   r'   0  s    z
Type.startc                 C   sN   |t | jkrd S t|| | j| }tjj| | tjj| | |d S NrL   )rd   ro   r   r-   r.   testkeydownup)r   rE   rF   r)   r*   keysymr   r   r   rC   3  s    

zType.performN)r   r    r!   intervalr   r'   rC   r   r   r   r   rn   (  s   rn   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Actionc                 C   s   t | | || _d S r#   r"   r   exprr   r&   rx   r   r   r   r   C  s    zAction.__init__c                 C   s   t j| jt jj_dS r6   )r-   r<   r=   rx   r.   r/   actionr   r   r   r   r'   G  s    zAction.startc                 C   s   |    tjjjrdS d S d S r6   r0   r-   r.   r/   rz   r(   r   r   r   r+   K  s    
zAction.executec                 C   s$   |    tj| j}tjj|S r#   )r0   r-   r<   r=   rx   r7   rR   is_sensitive)r   rz   r   r   r   r,   T  s    zAction.readyNrY   r   r   r   r   rv   A  s   	rv   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Pausec                 C   s   t | | || _d S r#   rw   ry   r   r   r   r   ^  s    zPause.__init__c                 C   s   t tj| jS r#   )floatr-   r<   r=   rx   r   r   r   r   r'   b  s    zPause.startc                 C   s   |    ||k r|S d S d S r#   )r0   r(   r   r   r   r+   e  s    zPause.executeNr   r    r!   r   r'   r+   r   r   r   r   r}   \  s   r}   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Labelc                 C   s   t | | || _d S r#   )r"   r   name)r   r&   r   r   r   r   r   q  s    zLabel.__init__c                 C   s   dS r6   r   r   r   r   r   r'   u  s    zLabel.startc                 C   s   | j tjjjv rd S |S d S r#   r   r-   r.   r/   labelsr(   r   r   r   r+   x  s    zLabel.executec                 C   s   | j tjjjv S r#   r   r   r   r   r   r,   ~  s    zLabel.readyNrY   r   r   r   r   r   o  s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )Untilzl
    Executes `left` repeatedly until `right` is ready, then executes `right`
    once before quitting.
    c                 C   s   t | | || _|| _d S r#   )r"   r   leftright)r   r&   r   r   r   r   r   r     s    zUntil.__init__c                 C   s   dS N)NNr   r   r   r   r   r   r'     s    zUntil.startc                 C   s   |\}}}| j  r*|| j ur*| j }d }n|d u r8| j}|d u rL| }|}|d urd|||| }|d u rz|| j u rzd S |||fS r#   )r   r,   r   r'   r+   )r   r)   r*   childchild_stater'   r   r   r   r+     s    
zUntil.executec                 C   s   | j  p| j S r#   )r   r,   r   r   r   r   r   r,     s    zUntil.readyN)r   r    r!   r1   r   r'   r+   r,   r   r   r   r   r     s
   r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	Ifz]
    If `condition` is ready, runs the block. Otherwise, goes to the next
    statement.
    c                 C   s   t | | || _|| _d S r#   )r"   r   	conditionblock)r   r&   r   r   r   r   r   r     s    zIf.__init__c                 C   s   dS r   r   r   r   r   r   r'     s    zIf.startc                 C   sV   |\}}}|d u r&| j  s d S | j}tjj||||\}}}|d u rLd S |||fS r#   )r   r,   r   r-   r.   r/   execute_noder   r)   r*   noder   r'   r   r   r   r+     s    

z
If.executeN)r   r    r!   r1   r   r'   r+   r   r   r   r   r     s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Pythonc                 C   s   t | | || _d S r#   )r"   r   code)r   r&   r   r   r   r   r     s    zPython.__init__c                 C   s   | t jj_dS r6   r-   r.   r/   rz   r   r   r   r   r'     s    
zPython.startc                 C   s   |    tjjjrdS d S d S r6   r{   r(   r   r   r   r+     s    
zPython.executec                 C   s   t j| jj d S r#   )r-   r<   py_exec_bytecoder   bytecoder   r   r   r   __call__  s    zPython.__call__Nr   r    r!   r   r'   r+   r   r   r   r   r   r     s   	r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Assertc                 C   s   t | | || _d S r#   rw   ry   r   r   r   r     s    zAssert.__init__c                 C   s   | t jj_dS r6   r   r   r   r   r   r'     s    
zAssert.startc                 C   s   |    tjjjrdS d S d S r6   r{   r(   r   r   r   r+     s    
zAssert.executec                 C   s*   t j| js&td| j| j| jd S )Nz#On line {}:{}, assertion {} failed.)r-   r<   r=   rx   re   formatr$   r%   r   r   r   r   r     s    zAssert.__call__Nr   r   r   r   r   r     s   	r   c                   @   s   e Zd Zdd Zdd ZdS )Jumpc                 C   s   t | | || _d S r#   r"   r   targetr   r&   r   r   r   r   r     s    zJump.__init__c                 C   s$   t jj| j| }t jj|d S r#   )r-   r.   r/   lookupr   ZTestJumpr   r   r   r   r   r'     s    z
Jump.startN)r   r    r!   r   r'   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Callc                 C   s   t | | || _d S r#   r   r   r   r   r   r   
  s    zCall.__init__c                 C   s(   t d| j tjj| j| }|d dfS )Nz	Call testr   )printr   r-   r.   r/   r   r   r   r   r   r'     s    z
Call.startc                 C   s:   |\}}}t jj||||\}}}|d u r0d S |||fS r#   )r-   r.   r/   r   r   r   r   r   r+     s
    
zCall.executeNr   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Blockc                 C   s   t | | || _d S r#   )r"   r   r   )r   r&   r   r   r   r   r   $  s    zBlock.__init__c                 C   s   dS )N)r   NNr   r   r   r   r   r'   (  s    zBlock.startc                 C   sn   |\}}}|t | jkrd S |d u r6| j|  }|}|d urT| j| ||| }|d u rd|d7 }|||fS rp   )rd   r   r'   r+   )r   r)   r*   r_   r'   sr   r   r   r+   +  s    
zBlock.executeNr   r   r   r   r   r   "  s   r   ),
__future__r   r   r   r   r   renpy.compatr   r   r	   r
   r   r   r   r   r   r   r   r   r-   renpy.test.testmouser   r   objectObjectr   r:   r"   r2   rK   rN   rO   rZ   rn   rv   r}   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s,   8-6
-W( 