o
    GXh                     @   sB   d dl Zd dlZG dd dejZdd Zedkre  dS dS )    Nc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&BackupTestsc                 C   s6   t d }| _|d |dddg |  d S )N:memory:zCREATE TABLE foo (key INTEGER) INSERT INTO foo (key) VALUES (?)      )sqliteconnectcxexecuteexecutemanycommit)selfr    r   =/opt/python-3.10.19/usr/lib/python3.10/sqlite3/test/backup.pysetUp   s   
zBackupTests.setUpc                 C   s   | j   d S N)r   closer   r   r   r   tearDown      zBackupTests.tearDownc                 C   s:   | d }| |d d d | |d d d d S )Nz SELECT key FROM foo ORDER BY keyr   r      r   )r   fetchallassertEqual)r   Zbckcxresultr   r   r   verify_backup   s   zBackupTests.verify_backupc                 C   sp   |  t | jd  W d    n1 sw   Y  |  t | j  W d    d S 1 s1w   Y  d S r   assertRaises	TypeErrorr   backupr   r   r   r   test_bad_target   s   "zBackupTests.test_bad_targetc                 C   s<   |  t | jd W d    d S 1 sw   Y  d S )Nzsome_file_name.dbr   r   r   r   r   test_bad_target_filename   s   "z$BackupTests.test_bad_target_filenamec                 C   s>   |  t | j| j W d    d S 1 sw   Y  d S r   )r   
ValueErrorr   r    r   r   r   r   test_bad_target_same_connection   s   "z+BackupTests.test_bad_target_same_connectionc                 C   sP   t d}|  | t j | j| W d    d S 1 s!w   Y  d S Nr   )r	   r
   r   r   ProgrammingErrorr   r    r   bckr   r   r   !test_bad_target_closed_connection"   s
   
"z-BackupTests.test_bad_target_closed_connectionc                 C   sX   t d}t d}|  | t j || W d    d S 1 s%w   Y  d S r%   )r	   r
   r   r   r&   r    )r   r(   sourcer   r   r   !test_bad_source_closed_connection(   s   

"z-BackupTests.test_bad_source_closed_connectionc                 C   s   t d}|d |dddg | t j}| j| W d    n1 s)w   Y  t jdk r>| 	t
|jd d S d S )Nr   zCREATE TABLE bar (key INTEGER)z INSERT INTO bar (key) VALUES (?)r   r   )r      r,   ztarget is in transaction)r	   r
   r   r   r   OperationalErrorr   r    Zsqlite_version_infor   str	exceptionr   r(   cmr   r   r   test_bad_target_in_transaction/   s   


z*BackupTests.test_bad_target_in_transactionc              	   C   sx   |  t- td}| j|d W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )Nr   r   )r   r   r	   r
   r   r    r'   r   r   r   test_keyword_only_args8   s   "z"BackupTests.test_keyword_only_argsc                 C   sF   t d}| j| | | W d    d S 1 sw   Y  d S r%   )r	   r
   r   r    r   r'   r   r   r   test_simple=   s   "zBackupTests.test_simplec                    s   g   fdd}t d}| jj|d|d | | W d    n1 s&w   Y  | t d |  d t j |  d t j d S )Nc                    s     |  d S r   appendstatus	remainingtotaljournalr   r   progressE   r   z+BackupTests.test_progress.<locals>.progressr   r   Zpagesr=      r   )	r	   r
   r   r    r   r   lenZ	SQLITE_OKZSQLITE_DONEr   r=   r(   r   r;   r   test_progressB   s   zBackupTests.test_progressc                    sx   g   fdd}t d}| jj||d | | W d    n1 s%w   Y  | t d |  d d d S )Nc                         | d S r   r5   r7   r;   r   r   r=   S   r   z?BackupTests.test_progress_all_pages_at_once_1.<locals>.progressr   r=   r   r   r	   r
   r   r    r   r   r@   rA   r   r;   r   !test_progress_all_pages_at_once_1P   s   z-BackupTests.test_progress_all_pages_at_once_1c                    sz   g   fdd}t d}| jj|d|d | | W d    n1 s&w   Y  | t d |  d d d S )Nc                    rC   r   r5   r7   r;   r   r   r=   `   r   z?BackupTests.test_progress_all_pages_at_once_2.<locals>.progressr   r>   r   r   rE   rA   r   r;   r   !test_progress_all_pages_at_once_2]   s   z-BackupTests.test_progress_all_pages_at_once_2c              	   C   s|   |  t&}td}| jj|ddd W d    n1 sw   Y  W d    n1 s.w   Y  | t|jd d S )Nr   r   Zbarr>   z$progress argument must be a callable)	r   r   r	   r
   r   r    r   r.   r/   )r   r1   r(   r   r   r   test_non_callable_progressj   s   z&BackupTests.test_non_callable_progressc                    s   g   fdd}t d'}jj|d|d | |d }|d d d W d    n1 s8w   Y  t d	  d d  d d  d
 d d S )Nc                    s0    sj d|d f j    | d S )Nr   i  )r   r   r   r6   r7   r<   r   r   r   r=   s   s   
z5BackupTests.test_modifying_progress.<locals>.progressr   r   r>   z2SELECT key FROM foo WHERE key >= 1000 ORDER BY keyr   i  r   r?   )	r	   r
   r   r    r   r   r   r   r@   )r   r=   r(   r   r   rJ   r   test_modifying_progressp   s   
	z#BackupTests.test_modifying_progressc              	   C   s   dd }|  t%}td}| jj||d W d    n1 s"w   Y  W d    n1 s1w   Y  | t|jd d S )Nc                 S   s   t d)Nnearly out of space)SystemErrorr7   r   r   r   r=      s   z3BackupTests.test_failing_progress.<locals>.progressr   rD   rL   )	r   rM   r	   r
   r   r    r   r.   r/   )r   r=   errr(   r   r   r   test_failing_progress   s   z!BackupTests.test_failing_progressc              	   C   sj  t d}| jj|dd W d    n1 sw   Y  t d}| jj|dd W d    n1 s5w   Y  | t j%}t d}| jj|dd W d    n1 sYw   Y  W d    n1 shw   Y  | dt|j | j	d | j	d | j
d	d
dg | j  t d}| jj|dd | | W d    d S 1 sw   Y  d S )Nr   main)nameZtempznon-existingzunknown databasez)ATTACH DATABASE ':memory:' AS attached_dbz*CREATE TABLE attached_db.foo (key INTEGER)z,INSERT INTO attached_db.foo (key) VALUES (?)r   r   Zattached_db)r	   r
   r   r    r   r-   ZassertInr.   r/   r   r   r   r   r0   r   r   r   test_database_source_name   s*   
"z%BackupTests.test_database_source_nameN)__name__
__module____qualname__r   r   r   r!   r"   r$   r)   r+   r2   r3   r4   rB   rF   rH   rI   rK   rO   rR   r   r   r   r   r      s&    		r   c                   C   s   t  tS r   )unittestZ
TestLoaderZloadTestsFromTestCaser   r   r   r   r   suite   r   rW   __main__)Zsqlite3r	   rV   ZTestCaser   rW   rS   rP   r   r   r   r   <module>   s     