
    _Aih                        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
Z
ddlZddlZddlZddlmZ ddlZddlZdZdZd Z ej,                         d        Z ej,                         d        Z G d	 d
      Zd Z G d d      Z G d d      Z G d d      ZdZdZ G d d      Z  G d d      Z! G d d      Z" G d d      Z#y)up   
아르고스 (테스터) — event-queue.py 전체 테스트
대상: /home/jay/workspace/memory/event-queue.py
    N)Path)/home/jay/workspace/memory/event-queue.pyz/home/jay/workspace/promptsc                      t         j                  j                  dt              } t         j                  j	                  |       }| j
                  j                  |       |S )uJ   event-queue.py를 importlib로 로드 (하이픈 포함 파일명 대응).event_queue)	importlibutilspec_from_file_locationEVENT_QUEUE_PYmodule_from_specloaderexec_module)specmodules     2/home/jay/workspace/teams/dev1/test_event_queue.py_import_event_queuer      sC    >>11-PD^^,,T2FKKF#M    c                 "    t        | dz        }|S )uF   테스트마다 독립적인 임시 큐 파일 경로를 제공한다.ztest-event-queue.json)str)tmp_pathqfs     r   tmp_queue_filer   &   s     
X//	0BIr   c                 :    t               }|j                  |       S )u3   EventQueue 인스턴스 (임시 큐 파일 사용).
queue_file)r   
EventQueue)r   r   s     r   eqr   -   s      !"F77r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestFIFOOrderu6   enqueue 3건 후 FIFO 순서대로 peek/dequeue 확인c                 L   |j                  dddd       |j                  dddd       |j                  ddd	d
       |j                         }d}||u}|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z   d|iz  }t        t        j                  |            dx}}|d   }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	t        j                  d|d    d      dz   d|	iz  }
t        t        j                  |
            dx}x}}y)uO   enqueue 3건 후 peek은 가장 먼저 넣은 이벤트를 반환해야 한다.task_completetask-A	dev1-team
/path/a.mdtask-B	dev2-team
/path/b.mdtask-C	dev3-team
/path/c.mdNis notz%(py0)s is not %(py3)sfirstpy0py3u,   peek()은 None을 반환하면 안 됩니다
>assert %(py5)spy5task_id==z%(py1)s == %(py4)spy1py4u&   첫 peek은 task-A이어야 하지만     반환
>assert %(py6)spy6)enqueuepeek
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanation)selfr   r-   @py_assert2@py_assert1@py_format4@py_format6@py_assert0@py_assert3@py_format5@py_format7s              r   test_fifo_enqueue_and_peekz(TestFIFOOrder.test_fifo_enqueue_and_peek;   s   


?Hk<H


?Hk<H


?Hk<H	 PuD PPPuDPPPPPPuPPPuPPPDPPP"PPPPPPPYo8o8+ooo8oooooo8ooo/UV[\eVfUggn-oooooooor   c                 
   |j                  dddd       |j                  dddd       |j                  ddd	d
       |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}}|j                  |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   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}|j                         }d}||u}	|	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z   d|
iz  }t        t        j                  |            dx}	}|d   }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d|d    d      dz   d|iz  }t        t        j                  |            dx}x}}|j                  |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}}|j                         }d}||u}	|	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z   d|
iz  }t        t        j                  |            dx}	}|d   }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }t        j                  d!|d    d      dz   d|iz  }t        t        j                  |            dx}x}}y)"u?   dequeue 순서가 enqueue 순서와 동일해야 한다 (FIFO).r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r3   r4   r6   r7   assert %(py6)sr<   Nidr*   r,   	removed_ar.   assert %(py5)sr2   secondu4   task-A dequeue 후 peek은 task-B이어야 합니다r1   u-   두 번째 peek은 task-B이어야 하지만 r:   r;   thirdu4   task-B dequeue 후 peek은 task-C이어야 합니다u-   세 번째 peek은 task-C이어야 하지만 )r=   r>   r?   r@   rD   rF   rG   dequeuerA   rB   rC   rE   )rH   r   r-   rM   rN   rI   rO   rP   rU   rJ   rK   rL   rW   	removed_brX   s                  r   test_fifo_dequeue_orderz%TestFIFOOrder.test_fifo_dequeue_orderE   sv   


?Hk<H


?Hk<H


?Hk<H 	Y+8+8++++8++++++8+++++++JJuT{+	 $$y$$$$y$$$$$$y$$$y$$$$$$$$$$#/x/#x////#x///#///x/////// !YvT!YYYvTYYYYYYvYYYvYYYTYYY#YYYYYYYi xHx H,xxx Hxxx xxxHxxx0]^den^o]ppw.xxxxxxxxJJvd|,	#/x/#x////#x///#///x/////// 	 XuD XXXuDXXXXXXuXXXuXXXDXXX"XXXXXXXYv8v8+vvv8vvvvvv8vvv/\]bcl]m\nnu-vvvvvvvvr   c                 j   |j                  dddd       |j                  dddd       |j                  d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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}}|j                         }|j                  |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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}}|j                         }	|j                  |	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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}}y)u)   dequeue 후 count가 감소해야 한다.r    r!   r"   r#   r$   r%   r&   r'   r(   r)      r4   zD%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.count
}()
} == %(py7)sr   r/   py2r9   py7assert %(py9)spy9NrT         )r=   countr?   r@   rA   rB   rC   rD   rF   rG   r>   rY   )
rH   r   rJ   rN   @py_assert6@py_assert5@py_format8@py_format10r-   rW   s
             r   'test_fifo_count_decreases_after_dequeuez5TestFIFOOrder.test_fifo_count_decreases_after_dequeue^   s   


?Hk<H


?Hk<H


?Hk<HxxxzQzQzQrrxzQ	


5;xxxzQzQzQrrxzQ


6$< xxxzQzQzQrrxzQr   c                 B   |j                  dddd       |j                         }|j                  |d          |j                  d      }|d   D cg c]  }|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  }t	        j                  d      dz   d|iz  }	t        t	        j                  |	            dx}}yc c}w )u@   dequeue된 이벤트는 processed 목록에 존재해야 한다.r    r!   r"   r#   rT   Tinclude_processed	processedr3   inz%(py1)s in %(py3)sprocessed_idsr8   r0   u.   dequeue된 task-A가 processed에 없습니다r1   r2   N)r=   r>   rY   list_eventsr?   r@   rD   rA   rB   rC   rE   rF   rG   )
rH   r   r-   resulters   rM   rI   rK   rL   s
             r   test_fifo_processed_listz&TestFIFOOrder.test_fifo_processed_listn   s    


?Hk<H	


5;$7/5k/BC!9CCZx=(ZZZx=ZZZxZZZZZZ=ZZZ=ZZZZ*ZZZZZZZ Ds   DN)__name__
__module____qualname____doc__rQ   r[   rk   rx    r   r   r   r   8   s    @pw2 [r   r   c                 8   | \  }}ddl m} |j                  dd      }|j                  |      }|j                  j                  |       |j                  |      }	 |j                  dd| d| d	d
| d      }|d   S # t        $ r}d| cY d}~S d}~ww xY w)uK   멀티프로세스 워커: 각 프로세스가 이벤트 하나씩 enqueue.r   Nr   r   r   r    ztask-Pdevz-teamz/path/pz.mdrT   ERROR:)	importlib.utilr   r	   r   r   r   r   r=   	Exception)	argsr   idx_ilur   r   r   evtrw   s	            r   _worker_enqueuer   }   s    OJ!''7bcD""4(FKKF#			j		1BjjF3%.CuE:JgVYUZZ]L^_4y s|s   #B 	B
BBBc                       e Zd ZdZd Zd Zy)TestConcurrentEnqueueuN   멀티프로세스 동시 enqueue — 파일 잠금으로 충돌 없음 확인c           	      p   d}t        j                  |      5 }|j                  t        t	        |      D cg c]  }||f c}      }ddd       D cg c]'  }t        |t              s|j                  d      s&|) }}| }|s~t        j                  d|       dz   ddt        j                         v st        j                  |      rt        j                  |      ndiz  }	t        t        j                  |	            d}t!               }
|
j#                  |	      }|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                  |      rt        j                  |      nddz  }t        j                  d| d| d      dz   d|iz  }t        t        j                  |            d}yc c}w # 1 sw Y   xY wc c}w )uF   5개 프로세스가 동시에 enqueue 후 count == 5이어야 한다.   	processesNr   u   enqueue 중 에러 발생: z
>assert not %(py0)sr/   errorsr   r4   )z%(py0)s == %(py2)srf   	num_procsr/   r`   u	   count가 u   이어야 하지만 r:   
>assert %(py4)sr9   )multiprocessingPoolmapr   range
isinstancer   
startswithr?   rE   rA   rB   rC   rD   rF   rG   r   r   rf   r@   )rH   r   r   pooliresultsrr   rJ   @py_format2r   r   rf   @py_format3rO   s                  r   test_concurrent_enqueue_countz3TestConcurrentEnqueue.test_concurrent_enqueue_count   s   	!!I6 	a$hheT]N^0_.!1D0_`G	a %V
1c(:q||H?U!VVzAzAA8AAAAAAA6AAA6AAAAAA %&.9
	!\\\u	\\\\\\u\\\u\\\\\\	\\\	\\\\Yyk9MeWT[#\\\\\\\ 1`	a 	a Ws.   H&H!H&H3+H3=H3!H&&H0c                 B   d}t        j                  |      5 }|j                  t        t	        |      D cg c]  }||f c}      }ddd       D cg c]&  }t        |t              r|j                  d      r%|( }}t        |      }||k(  }	|	sIt        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                  |      d	t        j                         v st        j                  |      rt        j                  |      nd	d
z  }
t        j                  d| dt        |       d      dz   d|
iz  }t!        t        j"                  |            dx}}	t        |      }t%        |      }t        |      }||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                  |      dt        j                         v st        j                  t              rt        j                  t              nd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  }t        j                  d|       dz   d|iz  }t!        t        j"                  |            dx}x}	x}}yc c}w # 1 sw Y   xY wc c}w )u@   동시 enqueue된 이벤트 ID가 모두 유니크해야 한다.r   r   Nr   r4   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)slenidsr   r/   r8   r0   r2   u   성공한 enqueue가 u   개여야 하지만 u   개
>assert %(py7)sra   )zn%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py11)s
{%(py11)s = %(py5)s(%(py9)s
{%(py9)s = %(py6)s(%(py7)s)
})
}set)r/   r8   r0   r2   r<   ra   rc   py11u   중복 ID 발생: z
>assert %(py13)spy13)r   r   r   r   r   r   r   r   r   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   )rH   r   r   r   r   r   r   r   rI   @py_assert4rL   ri   @py_assert8@py_assert10@py_format12@py_format14s                   r   "test_concurrent_enqueue_unique_idsz8TestConcurrentEnqueue.test_concurrent_enqueue_unique_ids   s^   	!!I6 	a$hheT]N^0_.!1D0_`G	a "YQ*Q*<hAWqYY3xjx9$jjjx9jjjjjjsjjjsjjjjjj3jjj3jjjxjjjjjj9jjj9jjjj(=i[H\]`ad]e\ffi&jjjjjjj3xDs3xD3x=Dx=(DDDx=DDDDDDsDDDsDDDDDD3DDD3DDDxDDDDDD3DDD3DDDDDDsDDDsDDDDDD3DDD3DDDxDDD=DDD,>se*DDDDDDDD 1`	a 	a Zs(   PP
P&P<P
PPN)ry   rz   r{   r|   r   r   r}   r   r   r   r      s    X] 	Er   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestEmptyQueueuF   빈 큐에서 peek/dequeue 호출 시 에러 없이 None 반환 확인c                    |j                         }d}||u }|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)
u4   빈 큐에서 peek()은 None을 반환해야 한다.Nisz%(py0)s is %(py3)srv   r.   u(   빈 큐 peek은 None이어야 하지만 r:   r1   r2   )
r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   rv   rI   rJ   rK   rL   s          r   test_peek_empty_queuez$TestEmptyQueue.test_peek_empty_queue   sx    Yv~YYYvYYYYYYvYYYvYYYYYY!I&QXYYYYYYYr   c                    |j                  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  }t        j                  d| d      d	z   d
|iz  }t        t        j                  |            dx}}y)uB   존재하지 않는 ID로 dequeue 시 None을 반환해야 한다.nonexistentNr   r   rv   r.   u:   존재하지 않는 ID dequeue는 None이어야 하지만 r:   r1   r2   )
rY   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   s          r   test_dequeue_nonexistent_eventz-TestEmptyQueue.test_dequeue_nonexistent_event   s}    M*kv~kkkvkkkkkkvkkkvkkkkkk![\b[ccjkkkkkkkr   c                    |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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}}y)	u2   빈 큐에서 count()는 0을 반환해야 한다.r   r4   r^   r   r_   rb   rc   N)	rf   r?   r@   rA   rB   rC   rD   rF   rG   )rH   r   rJ   rN   rg   rh   ri   rj   s           r   test_count_empty_queuez%TestEmptyQueue.test_count_empty_queue   s    xxxzQzQzQrrxzQr   c                 $   |j                         }|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)u@   빈 큐에서 list_events()는 빈 queue를 반환해야 한다.queuer4   r6   r7   rS   r<   Nru   r?   r@   rD   rF   rG   rH   r   rv   rM   rN   rI   rO   rP   s           r   test_list_empty_queuez$TestEmptyQueue.test_list_empty_queue   s\    !g$"$"$$$$"$$$$$$"$$$$$$$r   c                 (   |j                  d      }|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}}|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	)uZ   빈 큐에서 list_events(include_processed=True)는 빈 processed도 반환해야 한다.Trm   r   r4   r6   r7   rS   r<   Nro   r   r   s           r   test_list_all_empty_queuez(TestEmptyQueue.test_list_all_empty_queue   s    $7g$"$"$$$$"$$$$$$"$$$$$$$k"(b("b(((("b((("(((b(((((((r   N)	ry   rz   r{   r|   r   r   r   r   r   r}   r   r   r   r      s     PZ
l
%
)r   r   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestCLIu,   subprocess를 이용한 CLI 명령 테스트c                 r    t         j                  t        g|z   d|gz   }t        j                  |dd      }|S )u   CLI 명령 실행 헬퍼.z--queue-fileT)capture_outputtext)sys
executabler
   
subprocessrun)rH   r   r   cmdrv   s        r   _runzTestCLI._run   s6    ~~~.58TTDtDr   c                    | j                  g 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  }t        j                  d|j                         dz   d	|iz  }t        t        j                  |            d
x}x}}t        j                  |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}
}|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}	|	|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
)u2   enqueue CLI 명령이 JSON을 반환해야 한다.	r=   --typer    	--task-idtask-99--teamr"   --reportz/tmp/test.mdr   r4   z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)srv   r/   r`   r2   u   enqueue 실패: r   ra   Nr3   r   r6   r7   rS   r<   typer    statuspendingrT   rp   rr   datart   rV   r2   r   
returncoder?   r@   rA   rB   rC   rD   rE   stderrrF   rG   jsonloadsstdout)rH   r   rv   rJ   r   rN   rL   ri   r   rM   rI   rO   rP   rK   s                 r   test_cli_enqueue_returns_jsonz%TestCLI.test_cli_enqueue_returns_json   s   @

   IAI A%III AIIIIIIvIIIvIII IIIAIII)9&--'IIIIIIIIzz&--(I+)+)++++)++++++)+++++++F|..|....|...|..........H~**~****~***~**********tt|tttttr   c                 f   | j                  g d|       | j                  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  }t        j                  d|j                         d	z   d
|iz  }t        t        j                  |            dx}x}}t        j                  |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)u/   peek CLI 명령이 JSON을 반환해야 한다.r   r>   r   r4   r   rv   r   u   peek 실패: r   ra   Nr3   r   r6   r7   rS   r<   r   )rH   r   rv   rJ   r   rN   rL   ri   r   rM   rI   rO   rP   s                r   test_cli_peek_returns_jsonz"TestCLI.test_cli_peek_returns_json   s    			@	

 F8^4  FAF A%FFF AFFFFFFvFFFvFFF FFFAFFFv}}o'FFFFFFFFzz&--(I+)+)++++)++++++)+++++++r   c                    | j                  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  }t        j                  d|j                         dz   d	|iz  }t        t        j                  |            d
x}x}}t        j                  |j                        }ddi}	||	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z   d|
iz  }t        t        j                  |            d
x}}	y
)uE   빈 큐에서 peek CLI는 {"status": "empty"}를 반환해야 한다.r>   r   r4   r   rv   r   u   빈 큐 peek 실패: r   ra   Nr   emptyz%(py0)s == %(py3)sr   r.   u%   예상: {"status": "empty"}, 실제: r1   r2   r   )rH   r   rv   rJ   r   rN   rL   ri   r   rI   rK   s              r    test_cli_peek_empty_returns_jsonz(TestCLI.test_cli_peek_empty_returns_json   s"   F8^4  NAN A%NNN ANNNNNNvNNNvNNN NNNANNN)>v}}o'NNNNNNNNzz&--( '*`t**```t*``````t```t```*```.YZ^Y_,```````r   c                    | j                  g d|       | j                  g d|       | j                  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  }t        j                  d	|j                         d
z   d|iz  }t        t        j                  |            dx}x}}t        |j                  j                               }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)u2   count CLI 명령이 숫자를 반환해야 한다.)	r=   r   r    r   task-1r   r"   r   z
/tmp/t1.md)	r=   r   r    r   task-2r   r"   r   z
/tmp/t2.mdrf   r   r4   r   rv   r   u   count 실패: r   ra   Nrd   r   r.   u   count는 2이어야 하지만 r:   r1   r2   )r   r   r?   r@   rA   rB   rC   rD   rE   r   rF   rG   intr   strip)rH   r   rv   rJ   r   rN   rL   ri   rf   rI   rK   s              r   test_cli_count_returns_numberz%TestCLI.test_cli_count_returns_number   sK    			>	

 			>	

 G9n5  GAG A%GGG AGGGGGGvGGGvGGG GGGAGGG'GGGGGGGGFMM'')*JuzJJJuJJJJJJuJJJuJJJJJJ;E7'JJJJJJJr   c           
         | j                  g d|      }t        j                  |j                        d   }| j                  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  }t        j                  d	|j                         d
z   d|iz  }	t        t        j                  |	            dx}x}}t        j                  |j                        }
|
d   }||k(  }|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   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}| j                  dg|      }|j                  }|j                  } |       }t!        |      }d}||k(  }|s2t        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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}x}x}}y)uZ   dequeue CLI 명령이 이벤트를 제거하고 처리 완료 JSON을 반환해야 한다.r   rT   rY   r   r4   r   rv   r   u   dequeue 실패: r   ra   N)z%(py1)s == %(py3)sevent_idrt   rV   r2   r   ro   r6   r7   rS   r<   rf   )z%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.stdout
}.strip
}()
})
} == %(py12)sr   count_result)r/   r8   r0   r2   ra   rc   py12zassert %(py14)spy14)r   r   r   r   r   r?   r@   rA   rB   rC   rD   rE   r   rF   rG   r   r   )rH   r   
enq_resultr   rv   rJ   r   rN   rL   ri   r   rM   rI   rK   rO   rP   r   rg   r   @py_assert11r   @py_format13@py_format15s                          r   test_cli_dequeue_removes_eventz&TestCLI.test_cli_dequeue_removes_event  s    YY@


 ::j//06 Ix0.A  IAI A%III AIIIIIIvIIIvIII IIIAIII)9&--'IIIIIIIIzz&--(Dz%zX%%%%zX%%%z%%%%%%X%%%X%%%%%%%H~,,~,,,,~,,,~,,,,,,,,,, yy'N;&&4&,,4,.4s./414/14444/1444444s444s444444<444<444&444,444.444/444144444444r   c                 p   | j                  ddg|      }|j                  }d}||k7  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }t        j                  d      d	z   d
|iz  }t        t        j                  |            dx}x}}t        j                  |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)uK   존재하지 않는 ID dequeue CLI는 에러 코드를 반환해야 한다.rY   zevt-999r   )!=)z2%(py2)s
{%(py2)s = %(py0)s.returncode
} != %(py5)srv   r   uF   존재하지 않는 ID dequeue는 nonzero 반환코드여야 합니다r   ra   Nerrorrp   rr   r   rt   rV   r2   )r   r   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   r   r   )rH   r   rv   rJ   r   rN   rL   ri   r   rM   rI   rK   s               r   *test_cli_dequeue_nonexistent_returns_errorz2TestCLI.test_cli_dequeue_nonexistent_returns_error"  s    Iy1>B  oAo A%ooo Aoooooovooovooo oooAooo'oooooooozz&--(w$w$w$$r   c                    | j                  g d|       | j                  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  }t        j                  d	|j                         d
z   d|iz  }t        t        j                  |            dx}x}}t        j                  |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}	}
|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}}|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) uK   list --pending CLI 명령이 pending 이벤트 JSON을 반환해야 한다.)	r=   r   r    r   task-L1r   r"   r   z
/tmp/l1.mdlistz	--pendingr   r4   r   rv   r   u   list --pending 실패: r   ra   Nr   rp   rr   r   rt   rV   r2   re   z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   r_   rb   rc   r3   r   r6   r7   rS   r<   )r   r   r?   r@   rA   rB   rC   rD   rE   r   rF   rG   r   r   r   r   )rH   r   rv   rJ   r   rN   rL   ri   r   rM   rI   rK   rg   rh   rj   rO   rP   s                    r   test_cli_list_pendingzTestCLI.test_cli_list_pending)  s    		>	

 FK0.A  PAP A%PPP APPPPPPvPPPvPPP PPPAPPP)@'PPPPPPPPzz&--(w$w$w$$=&s=!&Q&!Q&&&&!Q&&&&&&s&&&s&&&=&&&!&&&Q&&&&&&&G}Q	*7i7*i7777*i777*777i7777777r   c                 H   | j                  g d|      }t        j                  |j                        d   }| j                  d|g|       | j                  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  }t        j                  d|j                         dz   d|iz  }	t        t        j                  |	            dx}x}}t        j                  |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}}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   }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}}|
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)#uD   list --all CLI 명령이 processed 이벤트도 포함해야 한다.)	r=   r   r    r   task-L2r   r"   r   z
/tmp/l2.mdrT   rY   r   z--allr   r4   r   rv   r   u   list --all 실패: r   ra   Nr   rp   rr   r   rt   rV   r2   ro   re   r   r   r_   rb   rc   r3   r   r6   r7   rS   r<   )r   r   r   r   r   r?   r@   rA   rB   rC   rD   rE   r   rF   rG   r   )rH   r   r   r   rv   rJ   r   rN   rL   ri   r   rM   rI   rK   rg   rh   rj   rO   rP   s                      r   $test_cli_list_all_includes_processedz,TestCLI.test_cli_list_all_includes_processed7  s    YY>


 ::j//06 			9h'8FG,n=  LAL A%LLL ALLLLLLvLLLvLLL LLLALLL)<V]]O'LLLLLLLLzz&--(w$w$w$$"{d""""{d"""{""""""d"""d"""""""$*s$%**%****%******s***s***$***%**********K #I.;);.);;;;.);;;.;;;);;;;;;;r   N)ry   rz   r{   r|   r   r   r   r   r   r   r   r   r  r}   r   r   r   r      s4    6,aK$5*8<r   r   z-/home/jay/.claude/hooks/user-prompt-submit.shz%/home/jay/.cokacdir/workspace/autosetc                   "    e Zd ZdZd Zd Zd Zy)TestUserPromptSubmitHookuM   user-prompt-submit.sh 훅 실행 시 이벤트 큐 count 포함 출력 확인c                 	   d}t        |dd      5 }|j                         }ddd       	 t               }|j                         }|j	                  d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                  |	      dz  }t        j                  d      dz   d|iz  }t        t        j                  |            dx}
}	t        j                   dt"        i      }t%        j&                  dt(        g|ddd      }|j*                  |j,                  z   }g }
d}	|	|v }|}|rd}||v }|}|sqt        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  }|
j/                  |       |rt        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  }|
j/                  |       t        j0                  |
d#      i z  }t        j                  d$|       d%z   d&|iz  }t        t        j                  |            dx}x}
x}	x}x}}t3        |      }	|	|v }|s?t        j                  d|fd'|	|f      d(t        j                         v st        j                  t2              rt        j                  t2              nd(dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      dt        j                         v st        j                  |      rt        j                  |      ndd)z  }t        j                  d*| d+|       d,z   d|iz  }t        t        j                  |            dx}	}t        |d-d      5 }|j5                         ddd       y# 1 sw Y   kxY w# 1 sw Y   yxY w# t        |d-d      5 }|j5                         ddd       w # 1 sw Y   w xY wxY w).uj   큐에 이벤트가 있을 때 훅 실행 시 '미처리 이벤트 N건' 메시지를 출력해야 한다.2/home/jay/workspace/memory/events/event-queue.jsonr   utf-8encodingNr    ztask-hook-testr"   z/tmp/hook-test.mdre   )>=)z%(py0)s >= %(py3)scount_beforer.   u%   훅 테스트 전 count가 0입니다r1   r2   cwdbashT   inputr   r   timeout   미처리 이벤트u   건rp   )z%(py3)s in %(py5)soutputr0   r2   %(py7)sra   z%(py10)s in %(py12)spy10r   %(py14)sr   r   uL   훅 출력에 '미처리 이벤트 N건' 메시지가 없습니다.
출력:

>assert %(py17)spy17)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} in %(py5)sr   r   u   훅 출력에 count (u/   )가 포함되어 있지 않습니다.
출력:
r   w)openreadr   r   r=   rf   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   dumpsANU_CWDr   r   HOOK_SCRIPTr   r   append_format_boolopr   write)rH   r   default_queueforiginal_contentr   
eq_default
test_eventr
  rI   rJ   rK   rL   
hook_inputrv   r  r   rM   @py_assert9r   ri   r   r   @py_format16@py_format18s                            r   /test_hook_shows_pending_count_when_events_existzHTestUserPromptSubmitHook.test_hook_shows_pending_count_when_events_existY  s$    M -w7 	(1 vvx	(%	*(*F**,J#++!1;@SJ
 &++-L#$M<1$MMM<1MMMMMM<MMM<MMM1MMM&MMMMMMM UG$45J^^% #F ]]V]]2F( (F2 u u   (F  I )  v   -3  I -3   v u  I 8=  v   AG  I AG   v    aag`hi     
 |$ $.   $  v     I   v   $  I $  I %  v   )/  I )/    (~5fgmfno     mS7; *q()* *O	( 	(N* *mS7; *q()* * *s;   RP7R$ 0RRR!$S3S	SSSc                    d}t        |dd      5 }|j                         }t        j                  |      }ddd       j	                  d      rt        j                  d       	 t        j                  dt        i      }t        j                  d	t        g|d
d
d      }|j                  |j                  z   }g }d}	|	|v}
|
}|
sd}||v }|}|sqt        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  }|j)                  |       |
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  }|j)                  |       t        j*                  |d      i z  }t        j,                  d|       dz   d|iz  }t/        t        j0                  |            dx}x}x}	x}
x}}t        |dd      5 }|j3                         ddd       y# 1 sw Y   BxY w# 1 sw Y   yxY w# t        |dd      5 }|j3                         ddd       w # 1 sw Y   w xY wxY w)u[   큐가 비어있을 때 훅 실행 시 '미처리 이벤트' 메시지가 없어야 한다.r  r   r  r  Nr   uB   현재 큐가 비어있지 않아 이 테스트를 건너뜁니다r  r  Tr  r  r  u   0건not in)z%(py3)s not in %(py5)sr  r  r  ra   rp   r  r  r  r   re   uJ   빈 큐인데 '미처리 이벤트' 메시지가 출력됩니다.
출력:
r  r  r  )r  r  r   r   getpytestskipr  r  r   r   r   r   r   r?   r@   rD   rA   rB   rC   r!  r"  rE   rF   rG   r#  )rH   r$  r%  r&  original_datar)  rv   r  rJ   rI   r   rM   r*  r   rL   ri   r   r   r+  r,  s                       r   -test_hook_no_pending_message_when_queue_emptyzFTestUserPromptSubmitHook.test_hook_no_pending_message_when_queue_empty  s   L -w7 	91 vvx JJ'78M	9
 W%KK\]	*UG$45J^^% #F ]]V]]2F( (6 & &F:J   (  I )  v   17  I 17   v &F  I ;A  v   EK  I EK   v    __e^fg      mS7; *q()* *3	9 	92* *mS7; *q()* * *s<   &I7&G(J J7JJKJ:1	K:K?Kc                 $   d}t        j                  d|i      }t        j                  dt        g|ddd      }|j
                  |j                  z   }d}||v}|st        j                  d|fd	||f      t        j                  |      d
t        j                         v st        j                  |      rt        j                  |      nd
dz  }t        j                  d|       dz   d|iz  }t        t        j                  |            dx}}y)uP   anu가 아닌 cwd로 훅 실행 시 이벤트 큐 메시지가 없어야 한다.z/home/jay/workspace/teams/dev1r  r  Tr  r  r  r/  z%(py1)s not in %(py3)sr  rt   uC   dev1 cwd인데 이벤트 큐 메시지가 출력됩니다.
출력:
r1   r2   N)r   r  r   r   r   r   r   r?   r@   rD   rA   rB   rC   rE   rF   rG   )	rH   dev1_cwdr)  rv   r  rM   rI   rK   rL   s	            r   %test_hook_non_anu_cwd_no_queue_outputz>TestUserPromptSubmitHook.test_hook_non_anu_cwd_no_queue_output  s    3ZZ 12
[!
 .$ 	
$F2 	
 	
$F 	
 	
 		 % 	
 	
	6	
 	
  -3 	
 	
 		 -3 	
 	
  TTZS[\	
 	
 	
 	
 	
r   N)ry   rz   r{   r|   r-  r5  r9  r}   r   r   r  r  V  s    W.*`*B
r   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestBuildPromptEnqueueuY   team_prompts.py build_prompt()가 event-queue.py enqueue 명령을 포함하는지 확인c                     ddl }|j                  j                  dd      }|j                  j                  |      }|j                  j                  |       |j                  S )u1   team_prompts.build_prompt를 import하여 반환.r   Nteam_promptsz+/home/jay/workspace/prompts/team_prompts.py)r   r   r	   r   r   r   build_prompt)rH   r   r   r   s       r   _get_build_promptz(TestBuildPromptEnqueue._get_build_prompt  sS    ~~559
 006'"""r   c                    | j                         } |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  }t        j                  d	|d
d  d      dz   d|iz  }t        t        j                  |            d
x}}y
)ub   dev1-team (direct 타입) 프롬프트에 event-queue.py enqueue 명령이 포함되어야 한다.r"   	task-test	test descevent-queue.py enqueuerp   rr   promptrt   uc   dev1-team 프롬프트에 'event-queue.py enqueue' 문자열이 없습니다.
프롬프트 일부:
N  ...r1   r2   
r?  r?   r@   rD   rA   rB   rC   rE   rF   rG   rH   r>  rD  rM   rI   rK   rL   s          r   &test_dev1_team_prompt_contains_enqueuez=TestBuildPromptEnqueue.test_dev1_team_prompt_contains_enqueue      --/k;D' 	
'61 	
 	
'6 	
 	
 
	 ( 	
 	
 
6	
 	
  ,2 	
 	
 
	 ,2 	
 	
 %%+DS\N#7	
 	
 	
 	
 	
r   c                    | j                         } |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  }t        j                  d	|d
d  d      dz   d|iz  }t        t        j                  |            d
x}}y
)u_   dev3-team (glm 타입) 프롬프트에 event-queue.py enqueue 명령이 포함되어야 한다.r(   rA  rB  rC  rp   rr   rD  rt   uc   dev3-team 프롬프트에 'event-queue.py enqueue' 문자열이 없습니다.
프롬프트 일부:
NrE  rF  r1   r2   rG  rH  s          r   &test_dev3_team_prompt_contains_enqueuez=TestBuildPromptEnqueue.test_dev3_team_prompt_contains_enqueue  rJ  r   c                    | j                         } |ddd      }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  }t        j                  d
| d      dz   d|iz  }t        t        j                  |            d} y)uk   dev1-team 프롬프트의 enqueue 명령에 --type, --task-id, --team, --report 인수가 있어야 한다.r"   rA  rB  r   r   r   r   rp   z%(py0)s in %(py2)sargrD  r   u*   dev1-team 프롬프트에 enqueue 인수 '   '가 없습니다r   r9   N
r?  r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r>  rD  rP  rJ   r   rO   s          r   .test_dev1_team_prompt_enqueue_has_correct_argszETestBuildPromptEnqueue.test_dev1_team_prompt_enqueue_has_correct_args      --/k;D@ 	fC&=eee3&eeeeee3eee3eeeeee&eee&eeee$NseSd"eeeeeee	fr   c                    | j                         } |ddd      }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  }t        j                  d
| d      dz   d|iz  }t        t        j                  |            d} y)uk   dev3-team 프롬프트의 enqueue 명령에 --type, --task-id, --team, --report 인수가 있어야 한다.r(   rA  rB  rN  rp   rO  rP  rD  r   u*   dev3-team 프롬프트에 enqueue 인수 'rQ  r   r9   NrR  rS  s          r   .test_dev3_team_prompt_enqueue_has_correct_argszETestBuildPromptEnqueue.test_dev3_team_prompt_enqueue_has_correct_args  rU  r   c                    | j                         } |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  }t        j                  d	      d
z   d|iz  }t        t        j                  |            dx}}y)ue   dev2-team (direct 타입) 프롬프트에도 event-queue.py enqueue 명령이 포함되어야 한다.r%   rA  rB  rC  rp   rr   rD  rt   uM   dev2-team 프롬프트에 'event-queue.py enqueue' 문자열이 없습니다.r1   r2   NrG  rH  s          r   &test_dev2_team_prompt_contains_enqueuez=TestBuildPromptEnqueue.test_dev2_team_prompt_contains_enqueue  s    --/k;D' 	
'61 	
 	
'6 	
 	
 		 ( 	
 	
	6	
 	
  ,2 	
 	
 		 ,2 	
 	
  \	
 	
 	
 	
 	
r   N)
ry   rz   r{   r|   r?  rI  rL  rT  rW  rY  r}   r   r   r;  r;    s%    c	#

ff
r   r;  c                       e Zd ZdZd Zd Zy)TestEventIdFormatu   이벤트 ID 형식 검증c                 $   |j                  dddd      }|d   }|j                  }d} ||      }|st        j                  d|d          dz   t        j                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }t        t        j                  |            d
x}x}x}}|d   dd
 }|j                  }	 |	       }
|
st        j                  d|       dz   dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      t        j                  |
      dz  }t        t        j                  |            d
x}	}
y
)u=   enqueue된 이벤트의 ID는 evt-NNN 형식이어야 한다.r    ztask-Xr"   z
/path/x.mdrT   zevt-u-   ID 형식이 evt-로 시작해야 하지만: zN
>assert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})r8   r0   r2   ra   N   u,   ID 숫자 부분이 숫자여야 하지만: zD
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.isdigit
}()
}suffix)r/   r`   r9   )r=   r   r?   rE   rD   rF   rG   isdigitrA   rB   rC   )rH   r   r   rM   rI   r   rg   ri   r^  rJ   rN   rO   s               r   test_event_id_formatz&TestEventIdFormat.test_event_id_format  s   jj(KN4yhy##hFh#F+h+hh/\]`ae]f\g-hhhhyhhh#hhhFhhh+hhhhhhT12~~X~XXX#OPVx!XXXXXXXvXXXvXXX~XXXXXXXXXr   c                 X   |j                  dddd      }|j                  dddd      }|j                  dddd      }t        |d	   d
d       }t        |d	   d
d       }t        |d	   d
d       }||k  }||k  }	|r|	s(t        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t	        j
                         v st        j                  |      rt        j                  |      nddz  }
t        j                  d| d| d|       dz   d|
iz  }t        t        j                  |            dx}}	y)u>   순차 enqueue 시 ID 시퀀스 번호가 증가해야 한다.r    r   r"   z
/path/1.mdr   z
/path/2.mdztask-3z
/path/3.mdrT   r]  N)<rb  )z%(py0)s < %(py3)sz%(py3)s < %(py4)sseq1seq2seq3)r/   r0   r9   u(   ID 시퀀스가 증가해야 하지만: z, r;   r<   )r=   r   r?   r@   rA   rB   rC   rD   rE   rF   rG   )rH   r   evt1evt2evt3rc  rd  re  rJ   rI   rO   rP   s               r   "test_sequential_ids_are_increasingz4TestEventIdFormat.test_sequential_ids_are_increasing  s5   zz/8[,Ozz/8[,Ozz/8[,O4:ab>"4:ab>"4:ab>"d!ddT!ddddtdTddddddtdddtdddddddddddddddddTdddTdddd%MdVSUVZU[[]^b]c#dddddddr   N)ry   rz   r{   r|   r`  ri  r}   r   r   r[  r[    s    $Y
er   r[  c                       e Zd ZdZd Zd Zy)TestListEventsu%   list_events() 필터링 동작 검증c                    |j                  dddd       |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}}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)uU   list_events()는 기본적으로 queue만 포함하고 processed는 없어야 한다.r    r!   r"   r#   r   rp   rr   rv   rt   rV   r2   Nro   r/  r7  )
r=   ru   r?   r@   rD   rA   rB   rC   rF   rG   )rH   r   rv   rM   rI   rK   rL   s          r   test_list_pending_onlyz%TestListEvents.test_list_pending_only  s    


?Hk<H! w&    w&   w      &   &       ({&(((({&((({((((((&(((&(((((((r   c                    |j                  dddd      }|j                  |d          |j                  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   }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)uU   list_events(include_processed=True)는 queue와 processed 모두 포함해야 한다.r    r!   r"   r#   rT   Trm   r   rp   rr   rv   rt   rV   r2   Nro   re   r4   r   r   r_   rb   rc   )r=   rY   ru   r?   r@   rD   rA   rB   rC   rF   rG   r   )rH   r   r   rv   rM   rI   rK   rL   rJ   rN   rg   rh   ri   rj   s                 r   test_list_all_includes_bothz*TestListEvents.test_list_all_includes_both   sp   jj(KN


3t9$7 w&    w&   w      &   &       ${f$$$${f$$${$$$$$$f$$$f$$$$$$$+&,s&',1,'1,,,,'1,,,,,,s,,,s,,,&,,,',,,1,,,,,,,r   N)ry   rz   r{   r|   rm  ro  r}   r   r   rk  rk    s    /)-r   rk  )$r|   builtinsrA   _pytest.assertion.rewrite	assertionrewriter?   r   r   osr   r   tempfiletimepathlibr   r   r   r2  r
   PROMPTS_DIRr   fixturer   r   r   r   r   r   r   r   r  r  r;  r[  rk  r}   r   r   <module>rz     s   
    	  
      =+   8 8>[ >[JE EF) )Bz< z<B >
1c
 c
T4
 4
ve e6- -r   