
    Ae                     ~    d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
  G d d	ej                        Zy)
z
Test libpython.py. This is already partly tested by test_libcython_in_gdb and
Lib/test/test_gdb.py in the Python source. These tests are run in gdb and
called from test_libcython_in_gdb.main()
    N)	libcython)	libpython   )test_libcython_in_gdb)_debuginferior_python_versionc                   d     e Zd ZdZ fdZd ZddZd ZddZddZ	d Z
d	 Zd
 Zd Zd Z xZS )TestPrettyPrintersa  
    Test whether types of Python objects are correctly inferred and that
    the right libpython.PySomeTypeObjectPtr classes are instantiated.

    Also test whether values are appropriately formatted (don't be too
    laborious as Lib/test/test_gdb.py already covers this extensively).

    Don't take care of decreffing newly allocated objects as a new
    interpreter is started for every test anyway.
    c                 L    t         t        |           | j                  d       y )Nzb = c = d = 0)superr
   setUpbreak_and_run)self	__class__s    Klib/python3.12/site-packages/Cython/Debugger/Tests/test_libpython_in_gdb.pyr   zTestPrettyPrinters.setUp!   s     $-/?+    c                 d    t        j                  |      }t        j                  |      dk7  sJ |S )Nr   )gdbparse_and_evalr   pointervalue)r   codevalues      r   get_pyobjectzTestPrettyPrinters.get_pyobject%   s-    ""4(%%e,11r   c                     |"||d}t        j                  d|z         d|z   }t        j                  j	                  | j                  |            S )N)varnamer   zset $%(varname)s = %(code)s$)r   executer   PyObjectPtrfrom_pyobject_ptrr   )r   r   gdbvards       r   pyobject_fromcodez$TestPrettyPrinters.pyobject_fromcode*   sO    !$/AKK59:<D$$66t7H7H7NOOr   c                 @    |j                  t        j                        S N)get_truncated_reprr   MAX_OUTPUT_LEN)r   pyobjects     r   get_reprzTestPrettyPrinters.get_repr2   s    **9+C+CDDr   c                     t         dk  rd}nd}d|vsJ d||j                  d      t        |      fz  }| j                  ||      S )N   r   PyString_FromStringAndSizePyBytes_FromStringAndSize   "z(PyObject *) %s("%s", %d)	iso8859-1r    )r   decodelenr"   )r   stringr    funcnamer   s        r   alloc_bytestringz#TestPrettyPrinters.alloc_bytestring5   sX    "V+3H2H6!! +hk8RTWX^T_-``%%d6%::r   c                     t        j                         }d|d}|j                  d      j                  d      }| j	                  d||j                  dd      j                  dd	      t        |      fz  |
      S )N	PyUnicode_DecodeUnicodeEscapeunicode_escaper/   z#(PyObject *) %s("%s", %d, "strict")"z\"\z\\r0   )r   get_inferior_unicode_postfixencoder1   r"   replacer2   )r   r3   r    postfixr4   datas         r   alloc_unicodestringz&TestPrettyPrinters.alloc_unicodestringA   s    88:8?A}}-.55kB%%1$,,sE2::4GT5T T &  	r   c                    | j                  d      }t        dk  rt        j                  }t	        d      }nt        j
                  }d}| j                  t        |      |       | j                  | j                  |      |       y )Ns   spamr*   zb'spam')	r5   r   r   PyStringObjectPtrreprPyBytesObjectPtrassertEqualtyper(   )r   
bytestringbytestring_classexpecteds       r   test_bytestringz"TestPrettyPrinters.test_bytestringK   so    **73
"V+(::G}H(99 Hj)+;<z2H=r   c                     | j                  d      }d}t        dk  rd|z   }| j                  t        |      t        j
                         | j                  | j                  |      |       y )Nu   spam ἄλφαu   'spam ἄλφα'r*   u)rA   r   rF   rG   r   PyUnicodeObjectPtrr(   )r   unicode_stringrJ   s      r   test_unicodezTestPrettyPrinters.test_unicodeX   s]    112CD&"V+X~Hn-y/K/KL~6Ar   c                     t         dk  r\| j                  d      }| j                  t        |      t        j
                         | j                  | j                  |      d       y y )Nr*   zPyInt_FromLong(100)100)r   r"   rF   rG   r   PyIntObjectPtrr(   )r   intvals     r   test_intzTestPrettyPrinters.test_intb   sS    "V+++,ABFT&\9+C+CDT]]62E: ,r   c                     | j                  dd      }t        j                  d      sJ | j                  t	        |      t
        j                         | j                  | j                  |      d       y )NzPyLong_FromLong(200)longvalr0   z!$longval->ob_type == &PyLong_Type200)r"   r   r   rF   rG   r   PyLongObjectPtrr(   )r   rW   s     r   	test_longzTestPrettyPrinters.test_longh   sb    (()?09 ) ;!!"EFFg	(A(ABw/7r   c                 x    | j                  d      }| j                  t        |      t        j                         y )NzPyEval_GetFrame())r"   rF   rG   r   PyFrameObjectPtr)r   frames     r   test_frame_typez"TestPrettyPrinters.test_frame_typep   s-    &&':;ei&@&@Ar   r$   )__name__
__module____qualname____doc__r   r   r"   r(   r5   rA   rK   rP   rU   rZ   r^   __classcell__)r   s   @r   r
   r
      sC    	,
PE
;>B;8Br   r
   )rb   ossysr   Cython.Debuggerr   r    r   r   r   DebugTestCaser
    r   r   <module>rj      s8    
 
 
 % % # B^B.<< ^Br   