ó
ˆ5„Oc           @   sê   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 Z d  d l Z d e j	 f d „  ƒ  YZ
 y) e j d d g d e j d e j ƒWn+ e k
 rÛ e j d ƒ e j d	 ƒ n Xe j ƒ  d S(
   iÿÿÿÿNt   Tc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s$  t  j j t  j j t j d ƒ ƒ } t  j j d d ƒ } t  j j | ƒ |  _ t	 j
 j |  _ t j ƒ  t	 j
 _ t	 j
 j t  j d <t  j j | d ƒ t  j d <t  j j d ƒ rð t  j j |  j d d	 ƒ |  _ t  j j |  j d d
 ƒ |  _ n0 t  j j | d	 ƒ |  _ t  j j | d
 ƒ |  _ d  S(   Ni    t   APPORT_DATA_DIRs   /usr/share/apportt   APPORT_REPORT_DIRt   java_uncaught_exceptiont   APPORT_JAVA_EXCEPTION_HANDLERt   APPORT_TEST_LOCALt   javas	   crash.jars
   apport.jar(   t   ost   patht   dirnamet   realpatht   syst   argvt   environt   gett   srcdirt   apportt	   fileutilst
   report_dirt   orig_report_dirt   tempfilet   mkdtempt   joint   crash_jar_patht   apport_jar_path(   t   selft   mydirt   datadir(    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyt   setUp   s    %!c         C   s&   t  j t j j ƒ |  j t j _ d  S(   N(   t   shutilt   rmtreeR   R   R   R   (   R   (    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyt   tearDown   s    c         C   s­   t  j d d |  j d t j j |  j ƒ d g d t  j d t  j ƒ} | j ƒ  \ } } |  j	 | j
 d d ƒ |  j d	 | k d
 | ƒ |  j t j j |  j ƒ d ƒ d S(   s   Crash in a .class fileR   s
   -classpatht   :t   crasht   stdoutt   stderri    s!   crash must exit with nonzero codes   Can't catch thiss-   crash handler must print original exception:
s   /crash.classN(   t
   subprocesst   PopenR   R   R   R	   R   t   PIPEt   communicatet   assertNotEqualt
   returncodet
   assertTruet   _check_crash_report(   R   t   pt   outt   err(    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyt   test_crash_class#   s    &c         C   s•   t  j d d |  j d |  j d g d t  j d t  j ƒ} | j ƒ  \ } } |  j | j d d ƒ |  j d	 | k d
 | ƒ |  j	 |  j d ƒ d S(   s   Crash in a .jar fileR   s
   -classpathR    R!   R"   R#   i    s!   crash must exit with nonzero codes   Can't catch thiss-   crash handler must print original exception:
s   !/crash.classN(
   R$   R%   R   R   R&   R'   R(   R)   R*   R+   (   R   R,   R-   R.   (    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyt   test_crash_jar/   s    c         C   sü   t  j j ƒ  } |  j t | ƒ d d ƒ t  j ƒ  } | j t | d ƒ ƒ |  j | d d ƒ |  j | d j	 d ƒ ƒ |  j | d j	 d	 ƒ ƒ d
 | k rº |  j | d d | ƒ n |  j | d d | ƒ |  j d | k ƒ |  j d | k ƒ d S(   s<   Check that we have one crash report, and verify its contentsi   s   did not create a crash reporti    t   ProblemTypet   Crasht   ProcCmdlines   java -classpatht
   StackTraces,   java.lang.RuntimeException: Can't catch thiss   .jar!t   MainClassUrls	   jar:file:s   file:t   DistroReleaset   ProcCwdN(
   R   R   t   get_new_reportst   assertEqualt   lent   Reportt   loadt   openR*   t
   startswith(   R   t	   main_filet   reportst   r(    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyR+   ;   s    
(   t   __name__t
   __module__R   R   R/   R0   R+   (    (    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyR       s
   				R   s   -versionR"   R#   s   Java not available, skippingi    (   R   t   unittestR$   R   R   t   os.pathR   R   t   apport.fileutilst   TestCaseR    t
   check_callR&   t   OSErrort   warningt   exitt   main(    (    (    s0   /usr/share/apport/testsuite/test_java_crashes.pyt   <module>
   s   TC