Sindbad~EG File Manager
a
��g�/ � @ s� d dl mZmZmZ ed� d dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlZd dlZdZ
dZerzdd� Zndd� Zd d
� Zdd� ZG d
d� dej�ZG dd� dej�Zdd� Zedkr�e�� dS )� )�verbose�
import_module�
reap_childrenZtermiosN� I wish to buy a fish license.
� For my pet fish, Eric.
c C s t | � d S �N)�print��msg� r �)/usr/local/lib/python3.9/test/test_pty.py�debug s r
c C s d S r r r r r r r
s c C s0 | � d�r| �dd�S | � d�r,| �dd�S | S )Ns
�
�
)�endswith�replace)�datar r r �normalize_output% s
r c C s t j| ddd�}|�� S )N�rbF)�mode�closefd)�io�FileIO�readline)�fd�readerr r r � _readline9 s r c @ s8 e Zd Zdd� Zdd� Zedd� �Zdd� Zd d
� ZdS )�PtyTestc C s` t � t j| j�}| �t j t j|� t � t j| j�}| �t j t j|� | �t jd� t �d� d S )Nr �
)�signal�SIGALRM�
handle_sigZ
addCleanup�SIGHUP�
handle_sighup�alarm)�selfZ old_alarmZ
old_sighupr r r �setUpD s z
PtyTest.setUpc C s | � d� d S )Nzisatty hung)�fail)r% �sig�framer r r r! P s zPtyTest.handle_sigc C s d S r r )�signumr) r r r r# S s zPtyTest.handle_sighupc
C s� zLt d� t�� \}}t d||f � t d|f � t�|�}t d| � W n tyh t�d��Y n0 | �t� |�d� t�
|�}zlt�|d� zt�|d�}| �
d |� W n2 ty� } z|jtjkr W Y d }~n
d }~0 0 W t�||� nt�||� 0 t d
� t�|t� t|�}| �
dt|�� t d� t�|td d
� � t�|td
d � � t|�}| �
dt|�� t�|� t�|� d S )NzCalling master_open()z#Got master_fd '%d', slave_name '%s'zCalling slave_open(%r)zGot slave_fd '%d'z,Pseudo-terminals (seemingly) not functional.zslave_fd is not a ttyFi � zWriting to slave_fdr zWriting chunked output� r )r
�ptyZmaster_openZ
slave_open�OSError�unittestZSkipTestZ
assertTrue�os�isatty�get_blocking�set_blocking�read�assertEqual�errno�EAGAIN�write�
TEST_STRING_1r r �
TEST_STRING_2�close)r% � master_fdZ
slave_nameZslave_fd�blocking�s1�e�s2r r r �
test_basicZ sF �
�
zPtyTest.test_basicc C s� t d� t�� \}}|tjkr�t�d�s:t d� t�d� t d� zt�� W nN tyh t d� Y nH t y� t d� Y n0 t d� t�d� Y n0 t d � t�d
� t�d� n�t d| � zt�
|d
�}W n ty� Y �qY n0 |s��qtj�
t|�dd�dd�� q�t�|d�\}}t�|�}t d|||f � |dk�rZ| �d� n@|d
k�rp| �d� n*|dk�r�| �d� n|dk�r�| �d� t�|� d S )Nzcalling pty.fork()� zChild's fd 1 is not a tty?!� zIn child, calling os.setsid()zGood: OSError was raised.zNo setsid() available?zAn unexpected error was raised.zos.setsid() succeeded! (bad!)� � z!Waiting for child (%d) to finish.�P r r �ascii)�encodingr z+Child (%d) exited with code %d (status %d).z3Child raised an unexpected exception in os.setsid()z1pty.fork() failed to make child a session leader.z8Child spawned by pty.fork() did not have a tty as stdoutz&pty.fork() failed for unknown reasons.)r
r- �forkZCHILDr0 r1 �_exit�setsidr. �AttributeErrorr4 �sys�stdoutr8 �strr �waitpid�waitstatus_to_exitcoder'