B
    2*\                 @   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#S )$BackupTestsc             C   s6   t d }| _|d |dddg |  d S )Nz:memory:zCREATE TABLE foo (key INTEGER)z INSERT INTO foo (key) VALUES (?))r   )   )sqliteconnectcxexecuteexecutemanycommit)selfr	    r   >C:\ALexclude\prg\programme\Python37\Lib\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 Q R X d S )N)assertRaises	TypeErrorr	   backup)r   r   r   r   test_bad_target_none   s    z BackupTests.test_bad_target_nonec          	   C   s&   |  t | jd W d Q R X d S )Nzsome_file_name.db)r   r   r	   r   )r   r   r   r   test_bad_target_filename   s    z$BackupTests.test_bad_target_filenamec          	   C   s(   |  t | j| j W d Q R X d S )N)r   
ValueErrorr	   r   )r   r   r   r   test_bad_target_same_connection   s    z+BackupTests.test_bad_target_same_connectionc          	   C   s:   t d}|  | t j | j| W d Q R X d S )Nz:memory:)r   r   r   r   ZProgrammingErrorr	   r   )r   bckr   r   r   !test_bad_target_closed_connection!   s    
z-BackupTests.test_bad_target_closed_connectionc          	   C   sh   t d}|d |dddg | t j}| j| W d Q R X t jdk rd| 	t
|jd d S )Nz:memory: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   s>   |  t* td}| j|d W d Q R X W d Q R X d S )Nz:memory:r   )r   r   r   r   r	   r   )r   r   r   r   r   test_keyword_only_args0   s    z"BackupTests.test_keyword_only_argsc          	   C   s0   t d}| j| | | W d Q R X d S )Nz:memory:)r   r   r	   r   r   )r   r   r   r   r   test_simple5   s    zBackupTests.test_simplec          	      sz   g   fdd}t d"}| jj|d|d | | W d Q R X | t d |  d t j |  d t j d S )Nc                s     |  d S )N)append)status	remainingtotal)journalr   r   progress=   s    z+BackupTests.test_progress.<locals>.progressz:memory:r   )pagesr/      r   )	r   r   r	   r   r   r   lenZ	SQLITE_OKZSQLITE_DONE)r   r/   r   r   )r.   r   test_progress:   s    zBackupTests.test_progressc          	      sd   g   fdd}t d }| jj||d | | W d Q R X | t d |  d d d S )Nc                s     | d S )N)r*   )r+   r,   r-   )r.   r   r   r/   K   s    z?BackupTests.test_progress_all_pages_at_once_1.<locals>.progressz:memory:)r/   r   r   )r   r   r	   r   r   r   r2   )r   r/   r   r   )r.   r   !test_progress_all_pages_at_once_1H   s    z-BackupTests.test_progress_all_pages_at_once_1c          	      sf   g   fdd}t d"}| jj|d|d | | W d Q R X | t d |  d d d S )Nc                s     | d S )N)r*   )r+   r,   r-   )r.   r   r   r/   X   s    z?BackupTests.test_progress_all_pages_at_once_2.<locals>.progressz:memory:)r0   r/   r   r   )r   r   r	   r   r   r   r2   )r   r/   r   r   )r.   r   !test_progress_all_pages_at_once_2U   s    z-BackupTests.test_progress_all_pages_at_once_2c          
   C   sT   |  t.}td}| jj|ddd W d Q R X W d Q R X | t|jd d S )Nz:memory:r   Zbar)r0   r/   z$progress argument must be a callable)	r   r   r   r   r	   r   r   r$   r%   )r   r&   r   r   r   r   test_non_callable_progressb   s    &z&BackupTests.test_non_callable_progressc          	      s   g   fdd}t dD}jj|d|d | |d }|d d d W d Q R X t d	  d d  d d  d
 d d S )Nc                s0    s"j d|d f j    | d S )Nz INSERT INTO foo (key) VALUES (?)i  )r	   r
   r   r*   )r+   r,   r-   )r.   r   r   r   r/   k   s    
z5BackupTests.test_modifying_progress.<locals>.progressz:memory:r   )r0   r/   z2SELECT key FROM foo WHERE key >= 1000 ORDER BY keyr   i  r   r1   )	r   r   r	   r   r   r
   r   r   r2   )r   r/   r   r   r   )r.   r   r   test_modifying_progressh   s    
z#BackupTests.test_modifying_progressc          
   C   sZ   dd }|  t,}td}| jj||d W d Q R X W d Q R X | t|jd d S )Nc             S   s   t dd S )Nznearly out of space)SystemError)r+   r,   r-   r   r   r   r/      s    z3BackupTests.test_failing_progress.<locals>.progressz:memory:)r/   znearly out of space)	r   r9   r   r   r	   r   r   r$   r%   )r   r/   errr   r   r   r   test_failing_progress   s
    $z!BackupTests.test_failing_progressc          
   C   s  t d}| jj|dd W d Q R X t d}| jj|dd W d Q R X | t j,}t d}| jj|dd W d Q R X W d Q R X | t|jddg | j	d | j	d	 | j
d
ddg | j  t d }| jj|dd | | W d Q R X d S )Nz:memory:main)nameZtempznon-existingzSQL logic errorz#SQL logic error or missing 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   )r   r   r&   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'   r(   r)   r3   r4   r6   r7   r8   r;   r>   r   r   r   r   r      s"   		r   c               C   s
   t tS )N)unittestZ	makeSuiter   r   r   r   r   suite   s    rC   __main__)
Zsqlite3r   rB   ZskipIfr#   ZTestCaser   rC   r?   r<   r   r   r   r   <module>   s   
 