
    Ti                         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Z
ej                  j                  de
       d Zd Zd Zd Zd Zd	 Zd
 Zy)uN   test_task_1919.py - test_runner MANDATORY 복원 + full_suite 검증 테스트    Nz!/home/jay/workspace/teams/dev1/qcc                     ddl m}  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)uD   test_runner는 MANDATORY이므로 --skip으로 건너뛸 수 없다.r   )MANDATORY_CHECKStest_runnerinz%(py1)s in %(py3)sr   py1py3u0   test_runner가 MANDATORY_CHECKS에 있어야 함
>assert %(py5)spy5N)	qc_verifyr   
@pytest_ar_call_reprcompare	_saferepr@py_builtinslocals_should_repr_global_name_format_assertmsgAssertionError_format_explanation)r   @py_assert0@py_assert2@py_format4@py_format6s        +/home/jay/workspace/tests/test_task_1919.py*test_skip_test_runner_blocked_by_mandatoryr      sp    
 +`=,,```=,```=``````,```,````.```````    c                  Z   ddl m}  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
)u6   full_suite_check가 ALL_CHECKS에 포함되어 있다.r   )
ALL_CHECKSfull_suite_checkr   r   r    r	   assert %(py5)sr   N)
r   r    r   r   r   r   r   r   r   r   )r    r   r   r   r   s        r   #test_full_suite_check_in_all_checksr#      sa    $++++++++++++++++++++++++r   c                    ddl m} | dz  }|j                          |dz  }|j                  d       |dz  }|j                  d       |j	                  dt        |              |j                  d	
      }|d   }d}||k(  }	|	st        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
t        j                  d|       dz   d|
iz  }t        t        j                  |            dx}x}	}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  }t        j                  d|       dz   d|iz  }t        t        j                  |            dx}}	y)u;   full_suite=True면 workspace tests/ 전체를 실행한다.r   Ntestsz	test_a.pyzdef test_a():
    assert True
z	test_b.pyzdef test_b():
    assert True
WORKSPACE_ROOTT
full_suitestatusPASS==z%(py1)s == %(py4)sr
   py4u8   full_suite=True로 모든 테스트 통과 기대, got: 
>assert %(py6)spy6
detailsr   r   details_strr	   u7   tests 디렉토리 경로가 포함되어야 함, got: r   r   )verifiers.test_runnerr   mkdir
write_textsetenvstrverifyr   r   r   r   r   r   joinr   r   r   )tmp_pathmonkeypatchtr	tests_dirtest1test2resultr   @py_assert3r   @py_format5@py_format7r4   r   r   s                  r   test_full_suite_runs_all_testsrF      sZ   & 7"IOO#E	78#E	78'X7YY$Y'F(jvjv%jjjvjjjjjjvjjj)abhai'jjjjjjjj))F9-.Kj7k!jjj7kjjj7jjjjjjkjjjkjjjj%\]h\i#jjjjjjjr   c                    ddl m} | dz  }|j                          |dz  }|j                  d       |j	                  dt        |              |j                  d      }|d	   }d
}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	t        j                  d|       dz   d|	iz  }
t        t        j                  |
            dx}x}}y)u9   full_suite=True에서 테스트 실패하면 FAIL 반환.r   Nr%   test_failing.pyz6def test_fail():
    assert False, 'intentional fail'
r&   Tr'   r)   FAILr+   r-   r.   u0   실패 테스트가 있으면 FAIL 기대, got: r0   r1   )r5   r   r6   r7   r8   r9   r:   r   r   r   r   r   r   )r<   r=   r>   r?   	test_failrB   r   rC   r   rD   rE   s              r    test_full_suite_fails_on_failurerK   6   s    &7"IOO--IST'X7YY$Y'F(bvbv%bbbvbbbbbbvbbb)YZ`Ya'bbbbbbbbr   c           	         ddl }ddlm} t        t        j
                  j                               D ]M  }|j                  d      st        t        j
                  |   |j                        s=t        j
                  |= O dt        j
                  v r"|j                  t        j
                  d          ddlm} | dz  }|j                          |dz  }|j                  d       |j                  d	t!        |               |d
g ddg dg       }|d   }	d}
|	|
k(  }|st#        j$                  d|fd|	|
f      t#        j&                  |	      t#        j&                  |
      dz  }t#        j(                  d|       dz   d|iz  }t+        t#        j,                  |            dx}	x}}
dj/                  |d         }d}	|	|v }|st#        j$                  d|fd|	|f      t#        j&                  |	      dt1        j2                         v st#        j4                  |      rt#        j&                  |      nddz  }dd|iz  }t+        t#        j,                  |            dx}	}y)uD   full_suite_check에서 FAIL이 발생하면 WARN으로 변환된다.r   N	verifiersr   )	run_checkr%   rH   z"def test_fail():
    assert False
r&   r!   z	task-test )name	skip_listtask_idapi_baseapi_endpointstest_dir
file_pathsr)   WARNr+   r-   r.   u-   full_suite FAIL → WARN 변환 기대, got: r0   r1   r2   r3   u   WARN 변환r   r   r4   r	   r"   r   )	importlibunittest.mockmocklistsysmoduleskeys
startswith
isinstance	MagicMockreloadr   rN   r6   r7   r8   r9   r   r   r   r   r   r   r;   r   r   r   )r<   r=   rX   _um_nrN   r?   rJ   rB   r   rC   r   rD   rE   r4   r   r   s                    r   'test_full_suite_check_fail_becomes_warnre   G   s    3;;##%&  ==%*S[[_cmm*TB  ckk![12# 7"IOO--I?@'X7F (_v_v%___v______v___)VW]V^'________))F9-.K'=K''''=K'''=''''''K'''K'''''''r   c                     ddl } | j                  j                  dd       ddlm} 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}}	|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}||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}}	|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)u5   보고서에서 passed/failed 숫자를 파싱한다.r   N/home/jay/workspace/scriptsparse_report_test_resultsu*   pytest 결과: 12 passed, 0 failed in 1.5s)is not)z%(py0)s is not %(py3)srB   py0r   r"   r   passed   r+   r-   r.   zassert %(py6)sr1   failedz5 passed, 3 failed in 2.1sresult2      r\   pathinsertg3_independent_verifierri   r   r   r   r   r   r   r   r   )r\   ri   contentrB   r   @py_assert1r   r   r   rC   rD   rE   content2rp   s                 r   test_parse_report_test_resultsrz   k   s3   HHOOA45A:G&w/F6666(!r!r!!!!r!!!!!!r!!!!!!!( q q    q      q       +H'1G7$7$77$8!!!!!!!!!!!!!!!!!!!8!!!!!!!!!!!!!!!!!!!r   c                     ddl } | j                  j                  dd       ddlm} 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}}y)u*   테스트 결과가 없으면 None 반환.r   Nrg   rh   u5   이 보고서에는 테스트 결과가 없습니다.)is)z%(py0)s is %(py3)srB   rk   r"   r   rs   )r\   ri   rw   rB   r   rx   r   r   s           r   )test_parse_report_test_results_no_patternr}   ~   s    HHOOA45AEG&w/F6T>6T66Tr   )__doc__builtinsr   _pytest.assertion.rewrite	assertionrewriter   osr\   pytestQC_DIRrt   ru   r   r#   rF   rK   re   rz   r}    r   r   <module>r      sU    T   	 
  
- 6 a,k0c" (H"&r   