a
    zeK                     @   sP   d dl Zd dlZeejdk dG dd dejZdd ZedkrLe	  dS )	    N)         zBackup API not supportedc                   @   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 (?)r      )sqliteconnectcxexecuteexecutemanycommit)selfr    r   )/usr/lib/python3.9/sqlite3/test/backup.pysetUp   s    
zBackupTests.setUpc                 C   s   | j   d S N)r   closer   r   r   r   tearDown   s    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   s:   |  t | jd  W d    n1 s,0    Y  d S r   assertRaises	TypeErrorr   backupr   r   r   r   test_bad_target_none   s    z BackupTests.test_bad_target_nonec                 C   s:   |  t | jd W d    n1 s,0    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    n1 s.0    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   sN   t d}|  | t j | j| W d    n1 s@0    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   sV   t d}t d}|  | t j || W d    n1 sH0    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 sR0    Y  t jdk rx| 	t
|jd 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!   sqlite_version_infor   str	exceptionr   r)   cmr   r   r   test_bad_target_in_transaction.   s    

*
z*BackupTests.test_bad_target_in_transactionc              	   C   sf   |  tH td}| j|d W d    n1 s:0    Y  W d    n1 sX0    Y  d S )Nr   r   )r   r    r   r   r   r!   r(   r   r   r   test_keyword_only_args7   s    z"BackupTests.test_keyword_only_argsc                 C   sD   t d&}| j| | | W d    n1 s60    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 sL0    Y  | t d |  d t j |  d t j d S )Nc                    s     |  d S r   appendstatus	remainingtotaljournalr   r   progressD   s    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_progressA   s    (zBackupTests.test_progressc                    sx   g   fdd}t d*}| jj||d | | W d    n1 sJ0    Y  | t d |  d d d S )Nc                    s     | d S r   r7   r9   r=   r   r   r?   R   s    z?BackupTests.test_progress_all_pages_at_once_1.<locals>.progressr   r?   r   r   r   r   r   r!   r   r   rB   rC   r   r=   r   !test_progress_all_pages_at_once_1O   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 sL0    Y  | t d |  d d d S )Nc                    s     | d S r   r7   r9   r=   r   r   r?   _   s    z?BackupTests.test_progress_all_pages_at_once_2.<locals>.progressr   r@   r   r   rF   rC   r   r=   r   !test_progress_all_pages_at_once_2\   s    (z-BackupTests.test_progress_all_pages_at_once_2c              	   C   s|   |  tL}td"}| jj|ddd W d    n1 s>0    Y  W d    n1 s\0    Y  | t|jd d S )Nr   r   Zbarr@   z$progress argument must be a callable)	r   r    r   r   r   r!   r   r0   r1   )r   r3   r)   r   r   r   test_non_callable_progressi   s    Nz&BackupTests.test_non_callable_progressc                    s   g   fdd}t dN}jj|d|d | |d }|d d d W d    n1 sp0    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   r8   r9   r>   r   r   r   r?   r   s    
z5BackupTests.test_modifying_progress.<locals>.progressr   r   r@   z2SELECT key FROM foo WHERE key >= 1000 ORDER BY keyr   i  r   rA   )	r   r   r   r!   r   r   r   r   rB   )r   r?   r)   r   r   rK   r   test_modifying_progresso   s    
2z#BackupTests.test_modifying_progressc              	   C   s   dd }|  tJ}td }| jj||d W d    n1 sD0    Y  W d    n1 sb0    Y  | t|jd d S )Nc                 S   s   t dd S )Nnearly out of space)SystemErrorr9   r   r   r   r?      s    z3BackupTests.test_failing_progress.<locals>.progressr   rE   rM   )	r   rN   r   r   r   r!   r   r0   r1   )r   r?   errr)   r   r   r   test_failing_progress   s
    Lz!BackupTests.test_failing_progressc              	   C   sn  t d }| jj|dd W d    n1 s00    Y  t d }| jj|dd W d    n1 sj0    Y  | t jJ}t d }| jj|dd W d    n1 s0    Y  W d    n1 s0    Y  | t|jg d | j	d | j	d | j
d	d
dg | j  t d*}| jj|dd | | W d    n1 s`0    Y  d S )Nr   main)nameZtempznon-existing)zSQL logic errorz#SQL logic error or missing databasezunknown database non-existingz)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assertInr0   r1   r   r   r   r   r2   r   r   r   test_database_source_name   s$    ..L
z%BackupTests.test_database_source_nameN)__name__
__module____qualname__r   r   r   r"   r#   r%   r*   r,   r4   r5   r6   rD   rG   rI   rJ   rL   rP   rS   r   r   r   r   r      s$   		r   c                   C   s
   t tS r   )unittestZ	makeSuiter   r   r   r   r   suite   s    rX   __main__)
Zsqlite3r   rW   ZskipIfr/   ZTestCaser   rX   rT   rQ   r   r   r   r   <module>   s    !