B
    /zfza                @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZejejeZejejedgZG dd de
jZG dd de
jZG dd	 d	e
jZG d
d de
jZejdddZejdddZG dd dZedkre
  dS )zTest suite for autoflake.    Nzautoflake.pyc               @   sh  e Zd 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&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9dndo Z:dpdq Z;drds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcddÄ Zdddń ZeddǄ ZfddɄ Zgdd˄ Zhdd̈́ Ziddτ Zjddф Zkddӄ ZlddՄ Zmddׄ ZndS )	UnitTestszUnit tests.c             C   s   |  ttjd d S )Nr   )ZassertGreaterlen	autoflakeZSAFE_IMPORTS)self r   Q/home/ankuromar296_gmail_com/.local/lib/python3.7/site-packages/test_autoflake.pytest_imports!   s    zUnitTests.test_importsc          	   C   s"   |  dgtttd d S )N   z
import os
)assertEquallistr   unused_import_line_numberscheck)r   r   r   r   test_unused_import_line_numbers$   s
    z)UnitTests.test_unused_import_line_numbersc          	   C   s"   |  dgtttd d S )Nr	   zfrom os import path
)r
   r   r   r   r   )r   r   r   r   )test_unused_import_line_numbers_with_from.   s
    z3UnitTests.test_unused_import_line_numbers_with_fromc          	   C   s"   |  dgtttd d S )Nr	   zimport os.path
)r
   r   r   r   r   )r   r   r   r   (test_unused_import_line_numbers_with_dot8   s
    z2UnitTests.test_unused_import_line_numbers_with_dotc             C   s:   |  dtd |  dtd |  dtd d S )Nosz	import oszfrom os import pathzimport os.path)r
   r   extract_package_name)r   r   r   r   test_extract_package_nameB   s    z#UnitTests.test_extract_package_namec             C   s   |  td d S )Nz>>> import os)assertFalser   r   )r   r   r   r   7test_extract_package_name_should_ignore_doctest_for_nowM   s    zAUnitTests.test_extract_package_name_should_ignore_doctest_for_nowc             C   sh   |  dtt  |  dtt  |  dtt  | dtt  | dtt  d S )Nr   
subprocessurllibr   Zpep8)assertInr   r   Zstandard_package_namesassertNotIn)r   r   r   r   test_standard_package_namesP   s
    z%UnitTests.test_standard_package_namesc             C   s^   |  dtd |  dtd |  dtd |  dtd |  dtd d S )N
zabc
z	  	
zabc	  	
 abc)r
   r   Zget_line_ending)r   r   r   r   test_get_line_endingX   s
    zUnitTests.test_get_line_endingc             C   sp   |  dtd |  dtd |  dtd |  dtd |  dtd |  dtd d S )	Nr   z    z    abcz    abc  
		z	abc  
	z 	 z
 	 abc  
	)r
   r   get_indentation)r   r   r   r   test_get_indentation`   s    zUnitTests.test_get_indentationc             C   s2   |  dtddg |  dtdddg d S )Nzfrom math import coszfrom math import *coszfrom math import cos, sinsin)r
   r   Zfilter_star_import)r   r   r   r   test_filter_star_importh   s    
z!UnitTests.test_filter_star_importc             C   s(   |  dtd |  dtd d S )Nzfoo()z	x = foo()z	    foo()z    x = foo())r
   r   filter_unused_variable)r   r   r   r   test_filter_unused_variabley   s    z%UnitTests.test_filter_unused_variablec             C   s:   |  dtd |  dtd |  dtd d S )Npasszx = 1zx = yzx = {})r
   r   r%   )r   r   r   r   0test_filter_unused_variable_with_literal_or_name   s    z:UnitTests.test_filter_unused_variable_with_literal_or_namec             C   s:   |  dtd |  dtd |  dtd d S )Nr'   z
x = dict()z
x = list()z	x = set())r
   r   r%   )r   r   r   r   6test_filter_unused_variable_with_basic_data_structures   s    z@UnitTests.test_filter_unused_variable_with_basic_data_structuresc             C   s   |  dtd d S )Nz
x = foo()\)r
   r   r%   )r   r   r   r   3test_filter_unused_variable_should_ignore_multiline   s    z=UnitTests.test_filter_unused_variable_should_ignore_multilinec             C   s   |  dtd d S )Nzx = y = foo())r
   r   r%   )r   r   r   r   7test_filter_unused_variable_should_multiple_assignments   s    zAUnitTests.test_filter_unused_variable_should_multiple_assignmentsc             C   s(   |  dtd |  dtd d S )Nzexcept Exception:zexcept Exception as exception:z!except (ImportError, ValueError):z(except (ImportError, ValueError) as foo:)r
   r   r%   )r   r   r   r   *test_filter_unused_variable_with_exception   s    z4UnitTests.test_filter_unused_variable_with_exceptionc             C   s0   |  dtjddd |  dtjddd d S )Nr   z	x = foo()T)drop_rhsz    x = foo())r
   r   r%   )r   r   r   r   $test_filter_unused_variable_drop_rhs   s    
z.UnitTests.test_filter_unused_variable_drop_rhsc             C   sF   |  dtjddd |  dtjddd |  dtjddd d S )Nr'   zx = 1T)r-   zx = yzx = {})r
   r   r%   )r   r   r   r   9test_filter_unused_variable_with_literal_or_name_drop_rhs   s    zCUnitTests.test_filter_unused_variable_with_literal_or_name_drop_rhsc             C   sF   |  dtjddd |  dtjddd |  dtjddd d S )Nr'   z
x = dict()T)r-   z
x = list()z	x = set())r
   r   r%   )r   r   r   r   ?test_filter_unused_variable_with_basic_data_structures_drop_rhs   s    zIUnitTests.test_filter_unused_variable_with_basic_data_structures_drop_rhsc             C   s   |  dtjddd d S )Nz
x = foo()\T)r-   )r
   r   r%   )r   r   r   r   <test_filter_unused_variable_should_ignore_multiline_drop_rhs   s    zFUnitTests.test_filter_unused_variable_should_ignore_multiline_drop_rhsc             C   s   |  dtjddd d S )Nzx = y = foo()T)r-   )r
   r   r%   )r   r   r   r   @test_filter_unused_variable_should_multiple_assignments_drop_rhs   s    zJUnitTests.test_filter_unused_variable_should_multiple_assignments_drop_rhsc             C   s0   |  dtjddd |  dtjddd d S )Nzexcept Exception:zexcept Exception as exception:T)r-   z!except (ImportError, ValueError):z(except (ImportError, ValueError) as foo:)r
   r   r%   )r   r   r   r   3test_filter_unused_variable_with_exception_drop_rhs   s    
z=UnitTests.test_filter_unused_variable_with_exception_drop_rhsc             C   s   |  ddtd d S )Nzimport os
pass
os.foo()
r   zimport os
import re
os.foo()
)r
   joinr   filter_code)r   r   r   r   test_filter_code  s
    zUnitTests.test_filter_codec             C   s   |  ddtd d S )Nz%import os
if True:
    pass
os.foo()
r   z*import os
if True:
    import re
os.foo()
)r
   r4   r   r5   )r   r   r   r   %test_filter_code_with_indented_import  s
    z/UnitTests.test_filter_code_with_indented_importc             C   s   |  ddtd d S )Nzpass
x = 1
r   zfrom os import path
x = 1
)r
   r4   r   r5   )r   r   r   r   test_filter_code_with_from1  s
    z$UnitTests.test_filter_code_with_fromc          	   C   s    |  ddtjddd d S )Nzpass
x = 1
r   zimport frommer
x = 1
T)remove_all_unused_imports)r
   r4   r   r5   )r   r   r   r   test_filter_code_with_not_fromA  s    z(UnitTests.test_filter_code_with_not_fromc          	   C   s    |  ddtjddd d S )Nzimport frommer
print(frommer)
r   T)r9   )r
   r4   r   r5   )r   r   r   r   test_filter_code_with_used_fromR  s    z)UnitTests.test_filter_code_with_used_fromc          	   C   s    |  ddtjddd d S )Nzpass
r   z&from frommer import abc, frommer, xyz
T)r9   )r
   r4   r   r5   )r   r   r   r   $test_filter_code_with_ambiguous_fromc  s    z.UnitTests.test_filter_code_with_ambiguous_fromc          	   C   s$   d}|  |dtj|dd d S )Nz5try: from zap import foo
except: from zap import bar
r   T)r9   )r
   r4   r   r5   )r   liner   r   r   +test_filter_code_should_avoid_inline_exceptr  s    z5UnitTests.test_filter_code_should_avoid_inline_exceptc          	   C   s$   d}|  |dtj|dd d S )Nz7try:\
from zap import foo
except:\
from zap import bar
r   T)r9   )r
   r4   r   r5   )r   r=   r   r   r   .test_filter_code_should_avoid_escaped_newlines  s    z8UnitTests.test_filter_code_should_avoid_escaped_newlinesc          	   C   s    |  ddtjddd d S )Nzpass
pass
x = 1
r   zimport foo
import zap
x = 1
T)r9   )r
   r4   r   r5   )r   r   r   r   /test_filter_code_with_remove_all_unused_imports  s    z9UnitTests.test_filter_code_with_remove_all_unused_importsc          	   C   s$   |  ddtjdddgd d S )Nzpass
import zap
x = 1
r   zimport foo
import zap
x = 1
foobar)Zadditional_imports)r
   r4   r   r5   )r   r   r   r   (test_filter_code_with_additional_imports  s    z2UnitTests.test_filter_code_with_additional_importsc             C   s   |  ddtd d S )NzNfrom os import path  # foo
pass
from fake_foo import z  # foo, foo, zap
x = 1
r   z]from os import path  # foo
from os import path
from fake_foo import z  # foo, foo, zap
x = 1
)r
   r4   r   r5   )r   r   r   r   :test_filter_code_should_ignore_imports_with_inline_comment  s
    zDUnitTests.test_filter_code_should_ignore_imports_with_inline_commentc             C   s   |  ddtd d S )NzBpass
import re  # noqa
from subprocess import Popen  # NOQA
x = 1
r   zQfrom os import path
import re  # noqa
from subprocess import Popen  # NOQA
x = 1
)r
   r4   r   r5   )r   r   r   r   $test_filter_code_should_respect_noqa  s
    z.UnitTests.test_filter_code_should_respect_noqac          	   C   s<   |  ddtjddd |  ddtjddd d S )Nzfrom math import sin
sin(1)
r   zfrom math import *
sin(1)
T)expand_star_importsz(from math import cos, sin
sin(1)
cos(1)
z!from math import *
sin(1)
cos(1)
)r
   r4   r   r5   )r   r   r   r   $test_filter_code_expand_star_imports  s    z.UnitTests.test_filter_code_expand_star_importsc          	   C   s    |  ddtjddd d S )Nz2from math import *
from re import *
sin(1)
cos(1)
r   T)rF   )r
   r4   r   r5   )r   r   r   r   ,test_filter_code_ignore_multiple_star_import  s    z6UnitTests.test_filter_code_ignore_multiple_star_importc          	   C   s    |  ddtjddd d S )Nza = {
  '????': 2,
}
print(a)
r   z+a = {
  '????': 3,
  '????': 2,
}
print(a)
T)remove_duplicate_keys)r
   r4   r   r5   )r   r   r   r   /test_filter_code_with_special_re_symbols_in_key  s    z9UnitTests.test_filter_code_with_special_re_symbols_in_keyc             C   sH   |  td | td |  tjddd |  td d S )Nz$\
import os, \
    math, subprocess
zimport os, math, subprocess
zif: \
)previous_linezfrom os import (path, sep))
assertTruer   Zmultiline_importr   )r   r   r   r   test_multiline_import.  s    
zUnitTests.test_multiline_importc             C   sX   |  td | td | td | td | tjddd d S )Nz	x = foo()zx = 1;zimport os, \zfoo(1zx = \)rK   )r   r   Zmultiline_statementrL   )r   r   r   r   test_multiline_statementM  s    z"UnitTests.test_multiline_statementc             C   s   |  dtd d S )Nz)import abc
import math
import subprocess
zimport abc, subprocess, math
)r
   r   break_up_import)r   r   r   r   test_break_up_importZ  s    zUnitTests.test_break_up_importc             C   s   |  dtd d S )Nz5    import abc
    import math
    import subprocess
z!    import abc, subprocess, math
)r
   r   rP   )r   r   r   r   %test_break_up_import_with_indentation`  s    z/UnitTests.test_break_up_import_with_indentationc             C   s   |  dtd d S )Nzimport abc, subprocess, math)r
   r   rP   )r   r   r   r   8test_break_up_import_should_do_nothing_on_no_line_endingf  s    zBUnitTests.test_break_up_import_should_do_nothing_on_no_line_endingc             C   s   |  dtjdg d d S )Nz*    from foo import abc, math, subprocess
z*    from foo import abc, subprocess, math
)unused_module)r
   r   filter_from_import)r   r   r   r   !test_filter_from_import_no_removel  s
    z+UnitTests.test_filter_from_import_no_removec             C   s   |  dtjddgd d S )Nz%    from foo import math, subprocess
z*    from foo import abc, subprocess, math
zfoo.abc)rT   )r
   r   rU   )r   r   r   r   %test_filter_from_import_remove_modulev  s
    z/UnitTests.test_filter_from_import_remove_modulec             C   s    |  dtjddddgd d S )Nz	    pass
z*    from foo import abc, subprocess, math
zfoo.abczfoo.subprocesszfoo.math)rT   )r
   r   rU   )r   r   r   r   "test_filter_from_import_remove_all  s    z,UnitTests.test_filter_from_import_remove_allc             C   s   |  ddtd d S )Nz$\
import os
pass
import os
os.foo()
r   zA\
import os
import re
import os, \
    math, subprocess
os.foo()
)r
   r4   r   r5   )r   r   r   r   "test_filter_code_multiline_imports  s
    z,UnitTests.test_filter_code_multiline_importsc             C   s   |  ddtd d S )Nz|\
import os
pass
from os.path import (
    join,
)
join('a', 'b')
pass
os.foo()
from os.path import \
    isdir
isdir('42')
r   z\
import os
import re
from os.path import (
    exists,
    join,
)
join('a', 'b')
from os.path import \
    abspath, basename, \
    commonpath
os.foo()
from os.path import \
    isfile \
    , isdir
isdir('42')
)r
   r4   r   r5   )r   r   r   r   'test_filter_code_multiline_from_imports  s
    z1UnitTests.test_filter_code_multiline_from_importsc             C   s   |  ddtd d S )Nz=\
import os
pass
import os; import math, subprocess
os.foo()
r   zB\
import os
import re
import os; import math, subprocess
os.foo()
)r
   r4   r   r5   )r   r   r   r   )test_filter_code_should_ignore_semicolons  s
    z3UnitTests.test_filter_code_should_ignore_semicolonsc             C   s   |  ddtd d S )Nzimport os
import my_own_module
pass
from my_package import another_module
from my_package import subprocess
from my_blah.my_blah_blah import blah
os.foo()
r   zimport os
import my_own_module
import re
from my_package import another_module
from my_package import subprocess
from my_blah.my_blah_blah import blah
os.foo()
)r
   r4   r   r5   )r   r   r   r   3test_filter_code_should_ignore_non_standard_library  s
    		z=UnitTests.test_filter_code_should_ignore_non_standard_libraryc             C   s   |  ddtd d S )Nz+import rlcompleter
pass
pass
pass
print(1)
r   z;import rlcompleter
import sys
import io
import os
print(1)
)r
   r4   r   r5   )r   r   r   r   -test_filter_code_should_ignore_unsafe_imports  s
    z7UnitTests.test_filter_code_should_ignore_unsafe_importsc             C   s    d}|  |dt| d S )Nz0
def foo():
    '''
    >>> import math
    '''
r   )r
   r4   r   r5   )r   r=   r   r   r   (test_filter_code_should_ignore_docstring  s    z2UnitTests.test_filter_code_should_ignore_docstringc          	   C   s   t jdd}tj|d}z^t|d}|d W d Q R X tjt	t
d|g tjd}| d d	}| d
| W d t| X d S )N.)dirz__init__.pywz
import re
z--ignore-init-module-imports)stdoutr   zutf-8z	import re)tempfilemkdtempr   pathr4   openwriter   Popenr   AUTOFLAKE_COMMANDPIPEcommunicatedecoder   shutilrmtree)r   temp_directory	temp_fileoutputpresultr   r   r   )test_with_ignore_init_module_imports_flag  s    
z3UnitTests.test_with_ignore_init_module_imports_flagc          	   C   s   t jdd}tj|d}z\t|d}|d W d Q R X tjt	t
|g tjd}| d d}| d	| W d t| X d S )
Nr_   )r`   z__init__.pyra   z
import re
)rb   r   zutf-8z	import re)rc   rd   r   re   r4   rf   rg   r   rh   r   ri   rj   rk   rl   r   rm   rn   )r   ro   rp   rq   rr   rs   r   r   r   ,test_without_ignore_init_module_imports_flag'  s    
z6UnitTests.test_without_ignore_init_module_imports_flagc             C   s   |  dtd d S )NzKimport os
import math
from sys import version
os.foo()
math.pi
x = version
zlimport os
import re
import abc, math, subprocess
from sys import exit, version
os.foo()
math.pi
x = version
)r
   r   fix_code)r   r   r   r   test_fix_code9  s    	zUnitTests.test_fix_codec             C   sL   |  dtd |  dtd |  dtd |  dtd d S )Nz.from collections import namedtuple as xyz
xyz
z;from collections import defaultdict, namedtuple as xyz
xyz
zBfrom collections import defaultdict as abc, namedtuple as xyz
xyz
z.from collections import namedtuple
namedtuple
zBfrom collections import defaultdict as abc, namedtuple
namedtuple
r   z>from collections import defaultdict as abc, namedtuple as xyz
)r
   r   rv   )r   r   r   r   test_fix_code_with_from_and_asP  s     z(UnitTests.test_fix_code_with_from_and_asc             C   s4   d}|  dtj|dd |  |tj|dd d S )Nzfrom x import a as b, c as d
r   T)r9   F)r
   r   rv   )r   coder   r   r   3test_fix_code_with_from_with_and_without_remove_all  s    z=UnitTests.test_fix_code_with_from_with_and_without_remove_allc             C   s(   |  dtd |  dtd d S )NzCfrom distutils.version import StrictVersion
StrictVersion('1.0.0')
zQfrom distutils.version import LooseVersion, StrictVersion
StrictVersion('1.0.0')
zHfrom distutils.version import StrictVersion as version
version('1.0.0')
zVfrom distutils.version import LooseVersion, StrictVersion as version
version('1.0.0')
)r
   r   rv   )r   r   r   r   (test_fix_code_with_from_and_depth_module  s    z2UnitTests.test_fix_code_with_from_and_depth_modulec             C   s(   |  dtd |  dtd d S )NzFdef z():
    from ctypes import POINTER, byref
    POINTER, byref
    zodef z():
    from ctypes import c_short, c_uint, c_int, c_long, pointer, POINTER, byref
    POINTER, byref
    zdef z():
    pass
zXdef z():
    from ctypes import c_short, c_uint, c_int, c_long, pointer, POINTER, byref
)r
   r   rv   )r   r   r   r    test_fix_code_with_indented_from  s    z*UnitTests.test_fix_code_with_indented_fromc             C   s   |  dtd d S )Nr   )r
   r   rv   )r   r   r   r   test_fix_code_with_empty_string  s    z)UnitTests.test_fix_code_with_empty_stringc             C   s.   t d}tdd|}| dt | dS )z2Make sure stuff after escaped newline is not lost.zAfrom collections import defaultdict, namedtuple \
    as xyz
xyz
z *\\\n *as z as z.from collections import namedtuple as xyz
xyz
N)r   rv   resubr
   )r   rs   r   r   r   2test_fix_code_with_from_and_as_and_escaped_newline  s    z<UnitTests.test_fix_code_with_from_and_as_and_escaped_newlinec             C   s   |  dtjddd d S )Nz$def main():
    y = 11
    print(y)
z/def main():
    x = 10
    y = 11
    print(y)
T)remove_unused_variables)r
   r   rv   )r   r   r   r   #test_fix_code_with_unused_variables  s
    z-UnitTests.test_fix_code_with_unused_variablesc             C   s   |  dtjdddd d S )Nz$def main():
    y = 11
    print(y)
z/def main():
    x = 10
    y = 11
    print(y)
T)r   remove_rhs_for_unused_variables)r
   r   rv   )r   r   r   r   ,test_fix_code_with_unused_variables_drop_rhs  s    z6UnitTests.test_fix_code_with_unused_variables_drop_rhsc             C   s   d}|  |tj|dd dS )z,pyflakes does not handle nonlocal correctly.zFdef bar():
    x = 1

    def foo():
        nonlocal x
        x = 2
T)r   N)r
   r   rv   )r   ry   r   r   r   8test_fix_code_with_unused_variables_should_skip_nonlocal  s    	zBUnitTests.test_fix_code_with_unused_variables_should_skip_nonlocalc             C   s    d}|  |tj|ddd dS )z,pyflakes does not handle nonlocal correctly.zFdef bar():
    x = 1

    def foo():
        nonlocal x
        x = 2
T)r   r   N)r
   r   rv   )r   ry   r   r   r   Atest_fix_code_with_unused_variables_should_skip_nonlocal_drop_rhs  s    zKUnitTests.test_fix_code_with_unused_variables_should_skip_nonlocal_drop_rhsc          	   C   s*   t d}| dt| W d Q R X d S )Nz# -*- coding: blah -*-
zlatin-1)temporary_filer
   r   detect_encoding)r   filenamer   r   r   &test_detect_encoding_with_bad_encoding2  s    
z0UnitTests.test_detect_encoding_with_bad_encodingc             C   s   |  dtjddd dS )z,pyflakes does not handle nonlocal correctly.zdef main():
    pass
zdef main():
    x = (1, 2, 3)
T)r   N)r
   r   rv   )r   r   r   r   !test_fix_code_with_comma_on_right9  s
    z+UnitTests.test_fix_code_with_comma_on_rightc             C   s   |  dtjdddd dS )z,pyflakes does not handle nonlocal correctly.zdef main():
    pass
zdef main():
    x = (1, 2, 3)
T)r   r   N)r
   r   rv   )r   r   r   r   *test_fix_code_with_comma_on_right_drop_rhsI  s    z4UnitTests.test_fix_code_with_comma_on_right_drop_rhsc             C   s   d}|  |tj|dd d S )Nz3def main():
    (x, y, z) = (1, 2, 3)
    print(z)
T)r   )r
   r   rv   )r   ry   r   r   r   8test_fix_code_with_unused_variables_should_skip_multipleZ  s    zBUnitTests.test_fix_code_with_unused_variables_should_skip_multiplec             C   s    d}|  |tj|ddd d S )Nz3def main():
    (x, y, z) = (1, 2, 3)
    print(z)
T)r   r   )r
   r   rv   )r   ry   r   r   r   Atest_fix_code_with_unused_variables_should_skip_multiple_drop_rhsh  s    zKUnitTests.test_fix_code_with_unused_variables_should_skip_multiple_drop_rhsc             C   s4   d ddd tdD }| |t| d S )Nzx = [{}]+c             S   s   g | ]}d qS )r   r   ).0_r   r   r   
<listcomp>z  s    z]UnitTests.test_fix_code_should_handle_pyflakes_recursion_error_gracefully.<locals>.<listcomp>i  )formatr4   ranger
   r   rv   )r   ry   r   r   r   ?test_fix_code_should_handle_pyflakes_recursion_error_gracefullyy  s    zIUnitTests.test_fix_code_should_handle_pyflakes_recursion_error_gracefullyc          	   C   s    |  ddtjddd d S )Nza = {
  (0,1): 3,
}
print(a)
r   z:a = {
  (0,1): 1,
  (0, 1): 'two',
  (0,1): 3,
}
print(a)
T)rI   )r
   r4   r   rv   )r   r   r   r    test_fix_code_with_duplicate_key  s    z*UnitTests.test_fix_code_with_duplicate_keyc          	   C   s    |  ddtjddd d S )NzL{
    'a': 0,
    'c': 2,
    'd': 3,
    'e': 4,
    'f': 5,
    'b': 6,
}
r   zX{
    'a': 0,
    'b': 1,
    'c': 2,
    'd': 3,
    'e': 4,
    'f': 5,
    'b': 6,
}
T)rI   )r
   r4   r   rv   )r   r   r   r   'test_fix_code_with_duplicate_key_longer  s    
z1UnitTests.test_fix_code_with_duplicate_key_longerc          	   C   s    |  ddtjddd d S )Nz6a = None

{None: {None: None},
 }

{
    None: a.b,
}
r   zEa = None

{None: {None: None},
 }

{
    None: a.a,
    None: a.b,
}
T)rI   )r
   r4   r   rv   )r   r   r   r   1test_fix_code_with_duplicate_key_with_many_braces  s    
z;UnitTests.test_fix_code_with_duplicate_key_with_many_bracesc          	   C   s$   d}|  |dtj|dd dS )zWe only handle simple cases.z5a = {(0,1): 1, (0, 1): 'two',
  (0,1): 3,
}
print(a)
r   T)rI   N)r
   r4   r   rv   )r   ry   r   r   r   9test_fix_code_should_ignore_complex_case_of_duplicate_key  s    zCUnitTests.test_fix_code_should_ignore_complex_case_of_duplicate_keyc          	   C   s$   d}|  |dtj|dd dS )zWe only handle simple cases.z({
    1: {0,
    },
    1: {2,
    },
}
r   T)rI   N)r
   r4   r   rv   )r   ry   r   r   r   ?test_fix_code_should_ignore_complex_case_of_duplicate_key_comma  s    	zIUnitTests.test_fix_code_should_ignore_complex_case_of_duplicate_key_commac          	   C   s$   d}|  ddtj|dd dS )zWe only handle simple cases.zYa = {(0,1): 1, (0, 1): 'two',
  (0,1): 3,
  (2,3): 4,
  (2,3): 4,
  (2,3): 5,
}
print(a)
zAa = {(0,1): 1, (0, 1): 'two',
  (0,1): 3,
  (2,3): 5,
}
print(a)
r   T)rI   N)r
   r4   r   rv   )r   ry   r   r   r   Ctest_fix_code_should_ignore_complex_case_of_duplicate_key_partially  s    zMUnitTests.test_fix_code_should_ignore_complex_case_of_duplicate_key_partiallyc          	   C   s$   d}|  |dtj|dd dS )zWe only handle simple cases.zBa = {
    (0,1):
    1,
    (0, 1): 'two',
  (0,1): 3,
}
print(a)
r   T)rI   N)r
   r4   r   rv   )r   ry   r   r   r   7test_fix_code_should_ignore_more_cases_of_duplicate_key  s    
zAUnitTests.test_fix_code_should_ignore_more_cases_of_duplicate_keyc          	   C   sD   d}|  |dtj|dd d}|  |dtj|dd dS )zWe only handle simple cases.zNa = {
    (0,1)  # : f
    :
    1,
    (0, 1): 'two',
  (0,1): 3,
}
print(a)
r   T)rI   z0{
    1: {0,
    },
    1: #{2,
    #},
    0
}
N)r
   r4   r   rv   )r   ry   r   r   r   7test_fix_code_should_ignore_duplicate_key_with_comments/  s    zAUnitTests.test_fix_code_should_ignore_duplicate_key_with_commentsc          	   C   s$   d}|  |dtj|dd dS )zWe only handle simple cases.zCa = {
    (0,1
    ): 1,
    (0, 1): 'two',
  (0,1): 3,
}
print(a)
r   T)rI   N)r
   r4   r   rv   )r   ry   r   r   r   <test_fix_code_should_ignore_duplicate_key_with_multiline_keyZ  s    
zFUnitTests.test_fix_code_should_ignore_duplicate_key_with_multiline_keyc          	   C   s$   d}|  |dtj|dd dS )z8We don't want to delete the line and leave a lone comma.zDa = {
    (0,1) : 1
    ,
    (0, 1): 'two',
  (0,1): 3,
}
print(a)
r   T)rI   N)r
   r4   r   rv   )r   ry   r   r   r   7test_fix_code_should_ignore_duplicate_key_with_no_commap  s    
zAUnitTests.test_fix_code_should_ignore_duplicate_key_with_no_commac          	   C   s$   d}|  |dtj|dd d S )Na      if True:
        pass
    else:
        def foo():
            """ A docstring. """
            pass
        def foo2():
            """ A docstring. """

            pass
        def foo3():
            """ A docstring. """


            pass
        def bar():
            # abc
            pass
        def blah():
            123
            pass
            pass  # Nope.
            pass
    r   T)ignore_pass_statements)r
   r4   r   rv   )r   ry   r   r   r   #test_fix_code_keeps_pass_statements  s    z-UnitTests.test_fix_code_keeps_pass_statementsc             C   s"   t jddd}d}| || d S )Na      if True:
        pass
    else:
        def foo():
            """ A docstring. """
            pass
        def foo2():
            """ A docstring. """

            pass
        def foo3():
            """ A docstring. """


            pass
        def bar():
            # abc
            pass
        def blah():
            123
            pass
            pass  # Nope.
            pass
    T)ignore_pass_after_docstringap      if True:
        pass
    else:
        def foo():
            """ A docstring. """
            pass
        def foo2():
            """ A docstring. """

            pass
        def foo3():
            """ A docstring. """


            pass
        def bar():
            # abc
            pass
        def blah():
            123
            pass  # Nope.
    )r   rv   r
   )r   actualexpectedr   r   r   +test_fix_code_keeps_passes_after_docstrings  s
    z5UnitTests.test_fix_code_keeps_passes_after_docstringsc             C   s2   |  dgttd |  g ttd d S )Nr	   zpass
zif True:
    pass
)r
   r   r   useless_pass_line_numbers)r   r   r   r   test_useless_pass_line_numbers  s    
z(UnitTests.test_useless_pass_line_numbersc             C   s   |  g ttd d S )Nzif True:\
    pass
)r
   r   r   r   )r   r   r   r   3test_useless_pass_line_numbers_with_escaped_newline  s
    z=UnitTests.test_useless_pass_line_numbers_with_escaped_newlinec             C   s   |  dgttd d S )N   z4if True:
    pass
else:
    True
    x = 1
    pass
)r
   r   r   r   )r   r   r   r   0test_useless_pass_line_numbers_with_more_complex   s
    z:UnitTests.test_useless_pass_line_numbers_with_more_complexc             C   s$   t td}dg}| || d S )Nzg    @abc.abstractmethod
    def some_abstract_method():
        """Some docstring."""
        pass
       )r   r   r   r
   )r   actual_pass_line_numbersexpected_pass_line_numbersr   r   r   .test_useless_pass_line_numbers_after_docstring  s
    z8UnitTests.test_useless_pass_line_numbers_after_docstringc             C   s&   t tjddd}g }| || d S )Nzg    @abc.abstractmethod
    def some_abstract_method():
        """Some docstring."""
        pass
    T)r   )r   r   r   r
   )r   r   r   r   r   r   8test_useless_pass_line_numbers_keep_pass_after_docstring   s    
zBUnitTests.test_useless_pass_line_numbers_keep_pass_after_docstringc             C   s   |  ddtd d S )Nz+if True:
    pass
else:
    True
    x = 1
r   z4if True:
    pass
else:
    True
    x = 1
    pass
)r
   r4   r   filter_useless_pass)r   r   r   r   test_filter_useless_pass0  s
    z"UnitTests.test_filter_useless_passc             C   s    d}|  |dt| d S )Nzrif True:
if True:
            if True:
    if True:

if True:
    pass
else:
    True
    pass
    pass
    x = 1
r   )r
   r4   r   r   )r   sourcer   r   r   *test_filter_useless_pass_with_syntax_errorG  s    z4UnitTests.test_filter_useless_pass_with_syntax_errorc             C   s   |  ddtd d S )Nzif True:
    pass
else:
    def foo():
        pass
        # abc
    def bar():
        # abc
        pass
    def blah():
        123
        pass  # Nope.
    True
    x = 1
r   zif True:
    pass
else:
    def foo():
        pass
        # abc
    def bar():
        # abc
        pass
    def blah():
        123
        pass
        pass  # Nope.
        pass
    True
    x = 1
    pass
)r
   r4   r   r   )r   r   r   r   %test_filter_useless_pass_more_complex\  s
    z/UnitTests.test_filter_useless_pass_more_complexc          	   C   s$   d}|  |dtj|dd d S )Nz    def foo():
        """ This is not a useless 'pass'. """
        pass

    @abc.abstractmethod
    def bar():
        """
            Also this is not a useless 'pass'.
        """
        pass
    r   T)r   )r
   r4   r   r   )r   r   r   r   r   2test_filter_useless_pass_keep_pass_after_docstring  s    z<UnitTests.test_filter_useless_pass_keep_pass_after_docstringc          	   C   s$   d}|  |dtj|dd d S )Nz    if True:
        pass
        pass
        pass
        pass
    else:
        pass
        True
        x = 1
        pass
    r   T)r   )r
   r4   r   r   )r   r   r   r   r   .test_filter_useless_pass_keeps_pass_statements  s    z8UnitTests.test_filter_useless_pass_keeps_pass_statementsc             C   s   |  ddtd d S )Nz>import os
os.foo()
try:
    pass
except ImportError:
    pass
r   zGimport os
os.foo()
try:
    pass
    pass
except ImportError:
    pass
)r
   r4   r   r   )r   r   r   r   %test_filter_useless_paspasss_with_try  s
    	z/UnitTests.test_filter_useless_paspasss_with_tryc             C   s   |  ddtd d S )Nz+if True:
    pass
else:
    True
    x = 1
r   zXif True:
    pass
    pass
    pass
    pass
else:
    pass
    True
    x = 1
    pass
)r
   r4   r   r   )r   r   r   r   %test_filter_useless_pass_leading_pass  s
    z/UnitTests.test_filter_useless_pass_leading_passc             C   s   |  ddtd d S )Nz)def func11():
    0, 11 / 2
    return 1
r   z2def func11():
    pass
    0, 11 / 2
    return 1
)r
   r4   r   r   )r   r   r   r   1test_filter_useless_pass_leading_pass_with_number  s
    z;UnitTests.test_filter_useless_pass_leading_pass_with_numberc             C   s   |  ddtd d S )Nz'def func11():
    'hello'
    return 1
r   z0def func11():
    pass
    'hello'
    return 1
)r
   r4   r   r   )r   r   r   r   1test_filter_useless_pass_leading_pass_with_string  s
    z;UnitTests.test_filter_useless_pass_leading_pass_with_stringc             C   s   |  td d S )Nz	import os)rL   r   r   )r   r   r   r   
test_check  s    zUnitTests.test_checkc             C   s   |  td d S )Nzfoo()r   r   r   )r   r   r   r   test_check_with_bad_syntax  s    z$UnitTests.test_check_with_bad_syntaxc             C   s$   |  td | td d S )Nu   print("∑")u   import os  # ∑)r   r   r   rL   )r   r   r   r   test_check_with_unicode  s    z!UnitTests.test_check_with_unicodec          
   C   s2   |  ddtdgdgdddd   d S )Nz
-foo
+bar
r   zfoo
zbar
r      )r
   r4   r   get_diff_textsplit)r   r   r   r   test_get_diff_text  s    zUnitTests.test_get_diff_textc          
   C   s2   |  ddtdgdgdddd   d S )Nz&-foo
\ No newline at end of file
+foo
r   rA   zfoo
r   r   )r
   r4   r   r   r   )r   r   r   r   "test_get_diff_text_without_newline)  s    z,UnitTests.test_get_diff_text_without_newlinec             C   sT   |  td |  td |  td | td | td d S )NZ123z	[1, 2, 3]Zxyzzxyz.prop )rL   r   Zis_literal_or_namer   )r   r   r   r   test_is_literal_or_name8  s
    z!UnitTests.test_is_literal_or_namec          	   C   s  |  ttjtd tddd}|  t| W d Q R X tddd}|  t| W d Q R X tddd}|  t| W d Q R X tddd}| t| W d Q R X tddd}| t| W d Q R X | ttj	 | td	 d S )
Nzautoflake.pyz#!/usr/bin/env pythonr   )suffixz#!/usr/bin/pythonz#!/usr/bin/python3z#!/usr/bin/pythonicz###!/usr/bin/pythonz	/bin/bash)
rL   r   Zis_python_filer   re   r4   ROOT_DIRECTORYr   r   devnull)r   r   r   r   r   test_is_python_file@  s    zUnitTests.test_is_python_filec             C   sl   |  tdddg | tdddg |  tddg |  tddg | td	dg d S )
Nz1.pyztest*z1*z2.pyztest/test.pyz
test/**.pyztest/auto_test.pyztest/*_test.pyztest/auto_auto.py)rL   r   Zis_exclude_filer   )r   r   r   r   test_is_exclude_fileY  s(    

zUnitTests.test_is_exclude_filec          	   C   s~   t dddd}| jtj|g d|d W d Q R X | tjtjg d t dddd}| jtj|g d|d W d Q R X d S )Nr   z.pyr_   )r   prefix)exclude)msg)r   r   r   Z
match_filer   r   rL   )r   r   r   r   r   test_match_file~  s    zUnitTests.test_match_filec          	   C   s>  t  }z"tj|d}t| ttj|dd W d Q R X tj|d}t| ttj|dd W d Q R X tj|d}t| ttj|dd W d Q R X t }t| z$t	t
dgdtjddg}W d t| X d	d
 |D }| d| | d| | d| W d t| X d S )Nr`   za.pyra   exzb.pyr   zc.pyTc             S   s   g | ]}t j|qS r   )r   re   basename)r   fr   r   r   r     s    z-UnitTests.test_find_files.<locals>.<listcomp>)rc   rd   r   re   r4   mkdirrf   getcwdchdirr   r   
find_filesr   r   rm   rn   )r   ro   targetr   r   cwdfilesZ
file_namesr   r   r   test_find_files  s8    






zUnitTests.test_find_filesc          	   C   s   t jdd}zttj|dd}|d W d Q R X ttj|d ttj|ddd}|d W d Q R X tj	t
t|d	d
g tjd}| d d}| d| | d| W d t| X d S )Nr_   )r`   za.pyra   z
import re
dzb.pyz
import os
z--recursivez--exclude=a*)rb   r   zutf-8z	import rez	import os)rc   rd   rf   r   re   r4   rg   r   r   rh   r   ri   rj   rk   rl   r   r   rm   rn   )r   ro   rq   rr   rs   r   r   r   test_exclude  s$    

zUnitTests.test_excludeN)o__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r!   r$   r&   r(   r)   r*   r+   r,   r.   r/   r0   r1   r2   r3   r6   r7   r8   r:   r;   r<   r>   r?   r@   rC   rD   rE   rG   rH   rJ   rM   rO   rQ   rR   rS   rV   rW   rX   rY   rZ   r[   r\   r]   r^   rt   ru   rw   rx   rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   


#

&	2+%8
+%(r   c               @   s   e Zd 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&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:S );SystemTestszSystem tests.c          	   C   sX   t dF}t }tjd|g|d d | dd| ddd   W d Q R X d S )Nz/import re
import os
import my_own_module
x = 1
my_fake_program)argvstandard_outstandard_errorz3-import re
-import os
 import my_own_module
 x = 1
r   r   )	r   ioStringIOr   _mainr
   r4   getvaluer   )r   r   output_filer   r   r   	test_diff  s    zSystemTests.test_diffc             C   s4   t  }tjddg||d | d|   d S )Nr   Znonexistent_file)r   r   r   zno such file)r   r   r   r   r   r   lower)r   r   r   r   r   test_diff_with_nonexistent_file  s    z+SystemTests.test_diff_with_nonexistent_filec          	   C   sX   t dF}t }tjd|g|d d | dd| ddd   W d Q R X d S )NzD# coding: iso-8859-1
import re
import os
import my_own_module
x = 1
r   )r   r   r   zI # coding: iso-8859-1
-import re
-import os
 import my_own_module
 x = 1
r   r   )	r   r   r   r   r   r
   r4   r   r   )r   r   r   r   r   r   #test_diff_with_encoding_declaration  s    z/SystemTests.test_diff_with_encoding_declarationc          
   C   sZ   t dH}t }tjdd|g|d d t|}| d|  W d Q R X W d Q R X d S )Nz_import foo
x = foo
import subprocess
x()

try:
    import os
except ImportError:
    import os
r   z
--in-place)r   r   r   zCimport foo
x = foo
x()

try:
    pass
except ImportError:
    pass
)r   r   r   r   r   rf   r
   read)r   r   r   r   r   r   r   test_in_place  s    

zSystemTests.test_in_placec          	   C   sV   d}t |@}t }tjdd|g|d d | | dtj |  W d Q R X d S )Nr   r   z--check)r   r   r   z: No issues detected!)	r   r   r   r   r   r
   r   linesepr   )r   r=   r   r   r   r   r   test_check_with_empty_file3  s    
z&SystemTests.test_check_with_empty_filec          	   C   sR   t d@}t }tjdd|g|d d | | dtj |  W d Q R X d S )Nz import foo
x = foo.bar
print(x)
r   z--check)r   r   r   z: No issues detected!)	r   r   r   r   r   r
   r   r   r   )r   r   r   r   r   r   test_check_correct_fileB  s    z#SystemTests.test_check_correct_filec          	   C   sH   t d6}t }tjddd|g|d d | d|  W d Q R X d S )Nz import foo
x = foo.bar
print(x)
r   z--checkz--quiet)r   r   r   r   )r   r   r   r   r   r
   r   )r   r   r   r   r   r   "test_check_correct_file_with_quietU  s    z.SystemTests.test_check_correct_file_with_quietc          	   C   s^   t dL}t }tjdd|g|d d}| |d | | dtj |  W d Q R X d S )Nzimport foo
x = foo
import subprocess
x()

try:
    pass
    import os
except ImportError:
    pass
    import os
    import sys
r   z--check)r   r   r   r	   z#: Unused imports/variables detected)	r   r   r   r   r   r
   r   r   r   )r   r   r   exit_statusr   r   r   test_check_useless_passj  s    z#SystemTests.test_check_useless_passc          
   C   s   t dv}t db}t }tjdd||g|d d}| |d | | d| dht|  	t
j W d Q R X W d Q R X d S )Nz
import sysr   z--check)r   r   r   r	   z#: Unused imports/variables detected)r   r   r   r   r   r
   setr   stripr   r   r   )r   Zfile1Zfile2r   r   r   r   r   test_check_with_multiple_files  s    



z*SystemTests.test_check_with_multiple_filesc          	   C   sV   d}t |@}t }tjdd|g|d d | | dtj |  W d Q R X d S )Nr   r   z--check-diff)r   r   r   z: No issues detected!)	r   r   r   r   r   r
   r   r   r   )r   r=   r   r   r   r   r   test_check_diff_with_empty_file  s    
z+SystemTests.test_check_diff_with_empty_filec          	   C   sR   t d@}t }tjdd|g|d d | | dtj |  W d Q R X d S )Nz import foo
x = foo.bar
print(x)
r   z--check-diff)r   r   r   z: No issues detected!)	r   r   r   r   r   r
   r   r   r   )r   r   r   r   r   r   test_check_diff_correct_file  s    z(SystemTests.test_check_diff_correct_filec          	   C   sH   t d6}t }tjddd|g|d d | d|  W d Q R X d S )Nz import foo
x = foo.bar
print(x)
r   z--check-diffz--quiet)r   r   r   r   )r   r   r   r   r   r
   r   )r   r   r   r   r   r   'test_check_diff_correct_file_with_quiet  s    z3SystemTests.test_check_diff_correct_file_with_quietc          	   C   sf   t dT}t }tjdd|g|d d}| |d | dd| ddd   W d Q R X d S )	Nzimport foo
x = foo
import subprocess
x()
try:
    pass
    import os
except ImportError:
    pass
    import os
    import sys
r   z--check-diff)r   r   r   r	   z import foo
 x = foo
-import subprocess
 x()
 try:
     pass
-    import os
 except ImportError:
     pass
-    import os
-    import sys
r   r   )	r   r   r   r   r   r
   r4   r   r   )r   r   r   r   r   r   r   test_check_diff_useless_pass  s    z(SystemTests.test_check_diff_useless_passc          
   C   s^   d}t |H}t }tjdd|g|d d t|}| ||  W d Q R X W d Q R X d S )Nr   r   z
--in-place)r   r   r   )r   r   r   r   r   rf   r
   r   )r   r=   r   r   r   r   r   r   test_in_place_with_empty_file  s    

z)SystemTests.test_in_place_with_empty_filec          
   C   sZ   t dH}t }tjdd|g|d d t|}| d|  W d Q R X W d Q R X d S )Nzimport foo
x = foo
import subprocess
x()

try:
    pass
    import os
except ImportError:
    pass
    import os
    import sys
r   z
--in-place)r   r   r   zCimport foo
x = foo
x()

try:
    pass
except ImportError:
    pass
)r   r   r   r   r   rf   r
   r   )r   r   r   r   r   r   r   $test_in_place_with_with_useless_pass	  s    

z0SystemTests.test_in_place_with_with_useless_passc             C   s6   t  }t }tjdddg||d | |  d S )Nr   z
--in-placez.fake)r   r   r   )r   r   StubFiler   r   r   r   )r   r   ignorer   r   r   test_with_missing_file+	  s    z"SystemTests.test_with_missing_filec             C   sx   t  h}t d|dP}td|d8 t }tjdd|g|d d | d|   W d Q R X W d Q R X W d Q R X d S )	Nr_   )r   	directoryzimport re
import os
)r  r   z--recursive)r   r   r   r   )	temporary_directoryr   r   r   r   r   r
   r   r   )r   r  Zinner_directoryr   r   r   r   test_ignore_hidden_directories5	  s$    
z*SystemTests.test_ignore_hidden_directoriesc             C   s*   t  }| jttjdddtg||d d S )Nr   z
--in-placez--stdout)r   r   r   )r   r   assertRaises
SystemExitr   r   __file__)r   r   r   r   r   test_in_place_and_stdoutS	  s    
z$SystemTests.test_in_place_and_stdoutc          	   C   s^   t dL}tjtd|g tjd}| dd| d  	t
jdd   W d Q R X d S )NzQimport fake_fake, fake_foo, fake_bar, fake_zoo
import re, os
x = os.sep
print(x)
z--imports=fake_foo,fake_bar)rb   z-import fake_fake, fake_foo, fake_bar, fake_zoo
-import re, os
+import fake_fake
+import fake_zoo
+import os
 x = os.sep
 print(x)
r   r   r   )r   r   rh   ri   rj   r
   r4   rk   rl   r   r   r   )r   r   processr   r   r   test_end_to_end]	  s    
	zSystemTests.test_end_to_endc          
   C   s^   t dL}t d8}tjtddd||g tjd}| }| d| W d Q R X W d Q R X d S )NzQimport fake_fake, fake_foo, fake_bar, fake_zoo
import re, os
x = os.sep
print(x)
zimport os
x = os.sep
print(x)
z--imports=fake_foo,fake_barz--checkz--jobs=2)rb   r	   )r   r   rh   ri   rj   waitr
   )r   Z	filename1	filename2r  status_coder   r   r   test_end_to_end_multiple_files{	  s     
z*SystemTests.test_end_to_end_multiple_filesc          	   C   s^   t dL}tjtd|g tjd}| dd| d  	t
jdd   W d Q R X d S )NzQimport fake_fake, fake_foo, fake_bar, fake_zoo
import re, os
x = os.sep
print(x)
z--remove-all)rb   z`-import fake_fake, fake_foo, fake_bar, fake_zoo
-import re, os
+import os
 x = os.sep
 print(x)
r   r   r   )r   r   rh   ri   rj   r
   r4   rk   rl   r   r   r   )r   r   r  r   r   r   .test_end_to_end_with_remove_all_unused_imports	  s    
z:SystemTests.test_end_to_end_with_remove_all_unused_importsc          	   C   s^   t dL}tjtd|g tjd}| dd| d  	t
jdd   W d Q R X d S )Nza = {
    'b': 456,
    'a': 123,
    'b': 7834,
    'a': 'wow',
    'b': 456,
    'c': 'hello',
    'c': 'hello2',
    'b': 'hiya',
}
print(a)
z--remove-duplicate-keys)rb   z a = {
-    'b': 456,
-    'a': 123,
-    'b': 7834,
     'a': 'wow',
-    'b': 456,
-    'c': 'hello',
     'c': 'hello2',
     'b': 'hiya',
 }
r   r   r   )r   r   rh   ri   rj   r
   r4   rk   rl   r   r   r   )r   r   r  r   r   r   9test_end_to_end_with_remove_duplicate_keys_multiple_lines	  s    
zESystemTests.test_end_to_end_with_remove_duplicate_keys_multiple_linesc          	   C   s^   t dL}tjtd|g tjd}| dd| d  	t
jdd   W d Q R X d S )Nzfrom math import *
print(sin(4))
a = { # Hello
    'b': 456,
    'a': 123,
    'b': 7834,
    'a': 'wow',
    'b': 456,
    'c': 'hello',
    'c': 'hello2',
    'b': 'hiya',
}
print(a)
z--remove-duplicate-keys)rb   z from math import *
 print(sin(4))
 a = { # Hello
-    'b': 456,
-    'a': 123,
-    'b': 7834,
     'a': 'wow',
-    'b': 456,
-    'c': 'hello',
     'c': 'hello2',
     'b': 'hiya',
 }
r   r   r   )r   r   rh   ri   rj   r
   r4   rk   rl   r   r   r   )r   r   r  r   r   r   ;test_end_to_end_with_remove_duplicate_keys_and_other_errors	  s    
zGSystemTests.test_end_to_end_with_remove_duplicate_keys_and_other_errorsc          	   C   s^   t dL}tjtd|g tjd}| dd| d  	t
jdd   W d Q R X d S )Nz:a = {
  (0,1): 1,
  (0, 1): 'two',
  (0,1): 3,
}
print(a)
z--remove-duplicate-keys)rb   z@ a = {
-  (0,1): 1,
-  (0, 1): 'two',
   (0,1): 3,
 }
 print(a)
r   r   r   )r   r   rh   ri   rj   r
   r4   rk   rl   r   r   r   )r   r   r  r   r   r   0test_end_to_end_with_remove_duplicate_keys_tuple

  s    
z<SystemTests.test_end_to_end_with_remove_duplicate_keys_tuplec          	   C   sJ   t d8}tjtdd|g tjd}| d| d   W d Q R X d S )NzQimport fake_fake, fake_foo, fake_bar, fake_zoo
import re, os
x = os.sep
print(x)
z--imports=fake_foo,fake_barz--remove-all)stderrznot allowed with argumentr	   )r   r   rh   ri   rj   r   rk   rl   )r   r   r  r   r   r   test_end_to_end_with_error)
  s    
z&SystemTests.test_end_to_end_with_errorc             C   sP   d}t jtddg t jt jd}||\}}| dd| t	j
 d S )NsQ   import fake_fake, fake_foo, fake_bar, fake_zoo
import re, os
x = os.sep
print(x)
z--remove-all-)rb   stdinzimport os
x = os.sep
print(x)
r   )r   rh   ri   rj   rk   r
   r4   rl   r   r   r   )r   
stdin_datar  rb   r   r   r   r   test_end_to_end_from_stdin@
  s    

z&SystemTests.test_end_to_end_from_stdinc             C   sR   d}t jtdddg t jt jd}||\}}| dd| t	j
 d S )NsV   import fake_fake, fake_foo, fake_bar, fake_zoo
import re, os, sys
x = os.sep
print(x)
z--remove-allz
--in-placer  )rb   r  zimport os
x = os.sep
print(x)
r   )r   rh   ri   rj   rk   r
   r4   rl   r   r   r   )r   r  r  rb   r   r   r   r   (test_end_to_end_from_stdin_with_in_placeV
  s    
z4SystemTests.test_end_to_end_from_stdin_with_in_placec          	   C   s\   t dJ}tjt|g tjd}| dd| d  	t
jdd   W d Q R X d S )NzGfrom . import fake_bar
from . import fake_foo
fake_foo.fake_function()
)rb   r   r   r   r   )r   r   rh   ri   rj   r
   r4   rk   rl   r   r   r   )r   r   r  r   r   r   >test_end_to_end_dont_remove_unused_imports_when_not_using_flagl
  s    
zJSystemTests.test_end_to_end_dont_remove_unused_imports_when_not_using_flagN) r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r  r  r  r  r   r   r   r   r     s:   	#(&

(,r   c               @   sj   e Zd Zdd ZdZd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 )MultilineFromImportTestsc             C   s   t d}| |d | |d | |d | |d | |d | |d | |d | |d	 t d
}| |d | |d	 | |d | |d | |d | |d | |d t d}| |  d S )Nzfrom . import (
zmodule)
z  )
z  )  # comment
zfrom module import (a, b)
z#  )zmodule
z
module, \
r   zfrom . import module, \
zm1, m2  # comment with \
z	m1, m2 \
zm1, m2 \  #
zm1, m2 \  # comment with \
z\
z"import os; import math, subprocess)r   FilterMultilineImportrL   Zis_overr   )r   Zfiltr   r   r   test_is_over
  s(    

z%MultilineFromImportTests.test_is_overr   Tc             C   sB   t j|d || jd}tdd |dd  | }| || d S )Nr   )r9   rT   c             S   s   | |S )Nr   )accxr   r   r   <lambda>
      z5MultilineFromImportTests.assert_fix.<locals>.<lambda>r	   )r   r  unused	functoolsreducer
   )r   linesrs   
remove_allZfixerZfixedr   r   r   
assert_fix
  s    
z#MultilineFromImportTests.assert_fixc             C   s  dd dD | _ | ddgd | ddd	d
ddgd | ddddddgd | dddgd | dddddddgd  | dd!d"gd# | dd!d$dgd% | dd&d'd(d)d*d+ddg	d, | dd-d.d/d.d0d.d1d.ddgd2 | dd3d4d5d6d0d.d1d.d7dgd8 d S )9Nc             S   s   g | ]}d t | qS )zthird_party.lib)str)r   r  r   r   r   r   
  s    z5MultilineFromImportTests.test_fix.<locals>.<listcomp>)r	   r   r   z+from third_party import (lib1, lib2, lib3,
z+                         lib4, lib5, lib6)
z+from third_party import (lib2, lib5, lib6)
zfrom third_party import (lib1,
z                         lib2,
z                         lib3,
z                         lib4,
z                         lib5,
z                         lib6)
z]from third_party import (lib2,
                         lib5,
                         lib6)
zfrom third_party import (lib1
z                        ,lib2
z                        ,lib3
z                        ,lib4
z                        ,lib5
z                        ,lib6)
z[from third_party import (lib2
                        ,lib5
                        ,lib6)
zfrom third_party import \
z    lib1, lib2, lib3, \
z    lib4, lib5, lib6
z/from third_party import \
    lib2, lib5, lib6
zfrom third_party import (
z
    lib1,
z
    lib2,
z
    lib3,
z
    lib4,
z	    lib5
z)
z/from third_party import (
    lib2,
    lib5
)
z    lib1, lib2, lib3, lib4,
z    lib5, lib6)
z0from third_party import (
    lib2, lib5, lib6)
z    lib5, lib6
z1from third_party import (
    lib2, lib5, lib6
)
z
    lib1\
z    ,lib2, 
z	    libA
z    ,lib3, 
z    libB, 
z    \
z<from third_party import (
    lib2\
    ,libA, 
    libB,
)
z	    lib1
z,
z	    lib2
z	    lib3
z	    lib4
z0from third_party import (
    lib2
,
    lib5
)
z    lib1 \
z, \
z    lib2 \
z,\
z    lib5 \
z6from third_party import (
    lib2 \
, \
    lib5 \
)
)r!  r&  )r   r   r   r   test_fix
  s    z!MultilineFromImportTests.test_fixc             C   s:   dd dD | _ | ddddgd | d	d
dgd d S )Nc             S   s   g | ]}d t | qS )zthird_party.lib)r'  )r   r  r   r   r   r   :  s    z=MultilineFromImportTests.test_indentation.<locals>.<listcomp>)r	   r   r   z    from third_party import (
z$            lib1, lib2, lib3, lib4,
z    lib5, lib6
z)
z=    from third_party import (
            lib2, lib5, lib6
)
z	from third_party import \
z		lib1, lib2, lib3, \
z		lib4, lib5, lib6
z.	from third_party import \
		lib2, lib5, lib6
)r!  r&  )r   r   r   r   test_indentation8  s    z)MultilineFromImportTests.test_indentationc          	   C   s   dd dD | _ | ddgd dd dD | _ | dd	d
dddgd dd dD | _ | dddgd dd dD | _ | dddddddgd d S )Nc             S   s   g | ]}d t | qS )z.lib)r'  )r   r  r   r   r   r   O  s    z>MultilineFromImportTests.test_fix_relative.<locals>.<listcomp>)r	   r   r   z!from . import (lib1, lib2, lib3,
z!               lib4, lib5, lib6)
z!from . import (lib2, lib5, lib6)
c             S   s   g | ]}d t | qS )z..lib)r'  )r   r  r   r   r   r   Y  s    zfrom .. import (lib1,
z                lib2,
z                lib3,
z                lib4,
z                lib5,
z                lib6)
zBfrom .. import (lib2,
                lib5,
                lib6)
c             S   s   g | ]}d t | qS )z...lib)r'  )r   r  r   r   r   r   i  s    zfrom ... import \
z    lib1, lib2, lib3, \
z    lib4, lib5, lib6
z'from ... import \
    lib2, lib5, lib6
c             S   s   g | ]}d t | qS )z.parent.lib)r'  )r   r  r   r   r   r   t  s    zfrom .parent import (
z
    lib1,
z
    lib2,
z
    lib3,
z
    lib4,
z	    lib5
z)
z+from .parent import (
    lib2,
    lib5
)
)r!  r&  )r   r   r   r   test_fix_relativeM  s<    z*MultilineFromImportTests.test_fix_relativec             C   s   dd dD | _ | dddgd | dd	gd
 | dddddddddg	d dd dD | _ | ddddddddddg
d d S )Nc             S   s   g | ]}d t | qS )lib)r'  )r   r  r   r   r   r     s    zBMultilineFromImportTests.test_fix_without_from.<locals>.<listcomp>)r	   r   r   z	import \
z    lib1, lib2, lib3 \
z    ,lib4, lib5, lib6
zimport \
    lib2, lib5, lib6
zimport lib1, lib2, lib3, \
z       lib4, lib5, lib6
zimport lib2, lib5, lib6
z    lib1,\
z    lib2, \
z
    libA\
z    ,lib3, \
z    libB, \
z    \  
z
    lib4\
r   z+import \
    lib2,\
    libA, \
    libB\

c             S   s   g | ]}d | dqS )r+  z.x.y.zr   )r   r  r   r   r   r     s    z    lib1.x.y.z \z    , \
z    lib2.x.y.z \
z    lib3.x.y.z \
z    lib4.x.y.z \
z    lib5.x.y.z
z0import \
    lib2.x.y.z \    , \
    lib5.x.y.z
)r!  r&  )r   r   r   r   test_fix_without_from  sD    z.MultilineFromImportTests.test_fix_without_fromc             C   sT   dd dD | _ | dddgd dd dD | _ | d	d
dddddddg	d d S )Nc             S   s   g | ]}d t | qS )r+  )r'  )r   r  r   r   r   r     s    z9MultilineFromImportTests.test_give_up.<locals>.<listcomp>)r	   r   r   z	import \
z    lib1, lib2, lib3, \
z    lib4, lib5; import lib6
z=import \
    lib1, lib2, lib3, \
    lib4, lib5; import lib6
c             S   s   g | ]}d t | qS )z.lib)r'  )r   r  r   r   r   r     s    zfrom . import ( # comment
z    lib1,\
z    lib2, 
z	    libA
z    ,lib3, 
z    libB, 
z    \  
z    lib4,  # noqa 
z) ; import sys
zzfrom . import ( # comment
    lib1,\
    lib2, 
    libA
    ,lib3, 
    libB, 
    \  
    lib4,  # noqa 
) ; import sys
)r!  r&  )r   r   r   r   test_give_up  s$    z%MultilineFromImportTests.test_give_upc             C   sB   dg| _ | ddgd | ddgd dg| _ | dgd	 d S )
NZlib2z	import \
z	    lib1
zimport \
    lib1
z	    lib2
zpass
zre.subnz	from re import (subn)
z	pass
)r!  r&  )r   r   r   r   test_just_one_import_used  s    z2MultilineFromImportTests.test_just_one_import_usedc             C   sZ   dg| _ | ddddgd dg| _ | dgd	 | d
dgd	 g | _ | dgd d S )Nz	math.sqrtzfrom math import (
z        sqrt,
z        log
z    )
z%from math import (
        log
    )
zmodule.bzfrom module import (a, b)
zfrom module import a
zfrom module import (a,
z                    b)
zfrom re import (subn)
)r!  r&  )r   r   r   r   test_just_one_import_left  s&    z2MultilineFromImportTests.test_just_one_import_leftc             C   sL   dd dD | _ | dddgd dd dD | _ | d	d
dddgd d S )Nc             S   s   g | ]}d t | qS )r+  )r'  )r   r  r   r   r   r     s    zBMultilineFromImportTests.test_no_empty_imports.<locals>.<listcomp>)r	   r   r   z	import \
z    lib1, lib3, \
z
    lib4 
zpass 
c             S   s   g | ]}d t | qS )z.parent.lib)r'  )r   r  r   r   r   r   "  s    z		from .parent import (
z
    lib1,
z
    lib3,
z
    lib4,
z)
z		pass
)r!  r&  )r   r   r   r   test_no_empty_imports  s    z.MultilineFromImportTests.test_no_empty_importsc             C   sv   dd dD | _ | jddddgdd	d
 |  j dd dD 7  _ | jdddddgdd	d
 | jddddgdd	d
 d S )Nc             S   s   g | ]}d t | qS )r+  )r'  )r   r  r   r   r   r   /  s    zDMultilineFromImportTests.test_without_remove_all.<locals>.<listcomp>)r	   r   r   z	import \
z    lib1,\
z    lib3,\
z	    lib4
z(import \
    lib1,\
    lib3,\
    lib4
F)r%  c             S   s   g | ]}d | qS )zos.path.r   )r   r  r   r   r   r   ;  s    )dirnameisdirr4   zfrom os.path import (
z    dirname,
z    isdir,
z
    join,
z)
zpass
z    os.path.dirname, \
z    lib1, \
z	    lib3
zimport \
    lib1, \
    lib3
)r!  r&  )r   r   r   r   test_without_remove_all.  s0    z0MultilineFromImportTests.test_without_remove_allN)T)r   r   r   r  r!  r&  r(  r)  r*  r,  r-  r.  r/  r0  r3  r   r   r   r   r  
  s   
	 55$"r  c               @   s   e Zd Zdd Zdd Zd:ddZdd	 Zd;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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9S )<ConfigFileTestc             C   s   t jdd| _d S )Nz
autoflake.)r   )rc   rd   tmpdir)r   r   r   r   setUpT  s    zConfigFileTest.setUpc             C   s    | j d k	rt| j  d | _ d S )N)r5  rm   rn   )r   r   r   r   tearDownW  s    
zConfigFileTest.tearDownTc             C   sf   t j|}t j|r tdt jj| j|g}|| j t jj sb|| jksZ|rbtd|S )Nz'Should not create an absolute test pathz,Should create a path within the tmp dir only)	r   re   normpathisabs
ValueErrorsepr4   r5  
startswith)r   re   is_fileeffective_pathr   r   r   r>  \  s    zConfigFileTest.effective_pathc             C   s   |  |d}tjdkr&tj|dd n^tj|r6d S yt| W n> tk
r   tj	|d }|sj | 
| t| Y nX d S )NF)r      r   T)exist_okr   )r>  sysversion_infor   makedirsre   existsr   OSErrorr   
create_dir)r   re   r>  parentr   r   r   rF  g  s    

zConfigFileTest.create_dirr   c          	   C   sD   |  |}| tj|d  t|d}|| W d Q R X d S )Nr   ra   )r>  rF  r   re   r   rf   rg   )r   re   contentsr>  r   r   r   r   create_filew  s    
zConfigFileTest.create_filec             K   s&   ddddddddddddddd|S )NF)r   Z
check_diffrF   Zignore_init_module_importsr   r   Zin_placequiet	recursiver9   rI   r   r   Zwrite_to_stdoutr   )r   kwargsr   r   r   with_defaults}  s    zConfigFileTest.with_defaultsc             C   sL   |  d d| dgi}t|\}}|dks4t|| jf |ksHtd S )Nz
test_me.pyr   T)rI  r>  r   merge_configuration_fileAssertionErrorrM  )r   original_argsargssuccessr   r   r   test_no_config_file  s
    
z"ConfigFileTest.test_no_config_filec             C   s\   |  d |  dd | dg}d|i}t|\}}|dksDt|| jf |ksXtd S )Nz
test_me.pyzpyproject.tomlz[tool.other]
prop="value"
r   T)rI  r>  r   rN  rO  rM  )r   r   rP  rQ  rR  r   r   r   $test_non_nested_pyproject_toml_empty  s    
z3ConfigFileTest.test_non_nested_pyproject_toml_emptyc             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nz
test_me.pyzpyproject.tomlz*[tool.autoflake]
expand-star-imports=true
r   T)r   rF   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   (test_non_nested_pyproject_toml_non_empty  s    
z7ConfigFileTest.test_non_nested_pyproject_toml_non_emptyc             C   sX   |  d |  dd | dg}td|i\}}|dks@t|| j|dksTtd S )Nz
test_me.pyz	setup.cfgz"[other]
expand-star-imports = yes
r   T)r   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   #test_non_nested_setup_cfg_non_empty  s    
z2ConfigFileTest.test_non_nested_setup_cfg_non_emptyc             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nz
test_me.pyz	setup.cfgz&[autoflake]
expand-star-imports = yes
r   T)r   rF   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   test_non_nested_setup_cfg_empty  s    
z.ConfigFileTest.test_non_nested_setup_cfg_emptyc             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nznested/file/test_me.pyzpyproject.tomlz*[tool.autoflake]
expand-star-imports=true
r   T)r   rF   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   test_nested_file  s    
zConfigFileTest.test_nested_filec             C   sj   |  d |  d |  dd | d| dg}td|i\}}|dksRt|| j|dksftd S )Nznested/file/test_me.pyznested/other/test_me.pyznested/file/pyproject.tomlz*[tool.autoflake]
expand-star-imports=true
r   T)r   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   (test_common_path_nested_file_do_not_load  s    

z7ConfigFileTest.test_common_path_nested_file_do_not_loadc             C   sl   |  d |  d |  dd | d| dg}td|i\}}|dksRt|| j|ddkshtd S )Nznested/file/test_me.pyznested/other/test_me.pyznested/pyproject.tomlz*[tool.autoflake]
expand-star-imports=true
r   T)r   rF   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   $test_common_path_nested_file_do_load  s    

z3ConfigFileTest.test_common_path_nested_file_do_loadc             C   sj   |  d |  d |  dd | d| dg}td|i\}}|dksRt|| j|dksftdS )	z.Using common prefix would result in a failure.znested/file-foo/test_me.pyznested/file-bar/test_me.pyznested/file/pyproject.tomlz*[tool.autoflake]
expand-star-imports=true
r   T)r   N)rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   )test_common_path_instead_of_common_prefix  s    

z8ConfigFileTest.test_common_path_instead_of_common_prefixc             C   sf   |  d |  dd |  dd | dg}td|i\}}|dksLt|| j|ddksbtd S )	Nznested/test_me.pyznested/pyproject.tomlz[tool.other]
prop = "value"
zpyproject.tomlz,[tool.autoflake]
expand-star-imports = true
r   T)r   rF   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   'test_continue_search_if_no_config_found  s    
z6ConfigFileTest.test_continue_search_if_no_config_foundc             C   sd   |  d |  dd |  dd | dg}td|i\}}|dksLt|| j|dks`td S )	Nznested/test_me.pyznested/pyproject.tomlz[tool.autoflake]
zpyproject.tomlz,[tool.autoflake]
expand-star-imports = true
r   T)r   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r    test_stop_search_if_config_found  s    
z/ConfigFileTest.test_stop_search_if_config_foundc          	   C   sj   t dddT}| d | dg}t||d\}}|dksDt|| j||ddks\tW d Q R X d S )Nz.iniz[autoflake]
check = True
)r   rH  z
test_me.py)r   config_fileT)r   r^  r   )r   rI  r>  r   rN  rO  rM  )r   Ztemp_configr   rQ  rR  r   r   r   test_config_option)  s    
z!ConfigFileTest.test_config_optionc             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nz
test_me.pyz	setup.cfgz%[autoflake]
expand-star-imports = no
r   TF)r   rF   )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   test_load_false>  s    
zConfigFileTest.test_load_falsec             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nz
test_me.pyzpyproject.tomlz1[tool.autoflake]
imports=["my_lib", "other_lib"]
r   Tzmy_lib,other_lib)r   imports)rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   test_list_value_pyproject_tomlM  s    
z-ConfigFileTest.test_list_value_pyproject_tomlc             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nz
test_me.pyzpyproject.tomlz,[tool.autoflake]
imports="my_lib,other_lib"
r   Tzmy_lib,other_lib)r   ra  )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   /test_list_value_comma_sep_string_pyproject_toml[  s    
z>ConfigFileTest.test_list_value_comma_sep_string_pyproject_tomlc             C   sZ   |  d |  dd | dg}td|i\}}|dks@t|| j|ddksVtd S )Nz
test_me.pyz	setup.cfgz%[autoflake]
imports=my_lib,other_lib
r   Tzmy_lib,other_lib)r   ra  )rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   test_list_value_setup_cfgi  s    
z(ConfigFileTest.test_list_value_setup_cfgc             C   sD   |  d |  dd | dg}td|i\}}|dks@td S )Nz
test_me.pyzpyproject.tomlz/[tool.autoflake]
expand-star-imports="invalid"
r   F)rI  r>  r   rN  rO  )r   r   r   rR  r   r   r   %test_non_bool_value_for_bool_propertyw  s    
z4ConfigFileTest.test_non_bool_value_for_bool_propertyc             C   sD   |  d |  dd | dg}td|i\}}|dks@td S )Nz
test_me.pyz	setup.cfgz#[autoflake]
expand-star-imports=ok
r   F)rI  r>  r   rN  rO  )r   r   r   rR  r   r   r   2test_non_bool_value_for_bool_property_in_setup_cfg  s    
zAConfigFileTest.test_non_bool_value_for_bool_property_in_setup_cfgc             C   sD   |  d |  dd | dg}td|i\}}|dks@td S )Nz
test_me.pyzpyproject.tomlz[tool.autoflake]
exclude=true
r   F)rI  r>  r   rN  rO  )r   r   r   rR  r   r   r   %test_non_list_value_for_list_property  s    
z4ConfigFileTest.test_non_list_value_for_list_propertyc             C   s\   |  d |  dd | dg}t|dd\}}|dksBt|| j|ddksXtd S )Nz
test_me.pyzpyproject.tomlz$[tool.autoflake]
imports=["my_lib"]
	other_lib)r   ra  Tzmy_lib,other_lib)rI  r>  r   rN  rO  rM  )r   r   rQ  rR  r   r   r   %test_merge_with_cli_set_list_property  s    
z4ConfigFileTest.test_merge_with_cli_set_list_propertyc             C   sd   |  d |  dd | dg}|ddd}t|\}}|dksHt|| j|dddks`td S )Nz
test_me.pyzpyproject.tomlz[tool.autoflake]
check = false
rh  T)r   ra  r   )rI  r>  r   rN  rO  rM  )r   r   Z	flag_argsrQ  rR  r   r   r   test_merge_prioritizes_flags  s    
z+ConfigFileTest.test_merge_prioritizes_flagsN)T)r   )r   r   r   r6  r7  r>  rF  rI  rM  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r_  r`  rb  rc  rd  re  rf  rg  ri  rj  r   r   r   r   r4  S  s6   

		


r4  r_   .pyr   c          	   c   sH   t j||d|d}z"||   |  |jV  W dt|j X dS )z.Write contents to temporary file and yield it.F)r   r   deleter`   N)rc   NamedTemporaryFilerg   encodeclosenamer   remove)rH  r  r   r   r   r   r   r   r     s    r   tmp.c          	   c   s*   t j|| d}z
|V  W dt| X dS )z.Create temporary directory and yield its path.)r   r`   N)rc   rd   rm   rn   )r  r   ro   r   r   r   r    s    
r  c               @   s   e Zd ZdZdd ZdS )r   z"Fake file that ignores everything.c              G   s   dS )zIgnore.Nr   )r   r   r   r   rg     s    zStubFile.writeN)r   r   r   r   rg   r   r   r   r   r     s   r   __main__)r_   rk  r   )r_   rr  )r   
contextlibr"  r   r   r~   rm   r   rA  rc   Zunittestr   re   abspathr1  r  r   
executabler4   ri   ZTestCaser   r   r  r4  contextmanagerr   r  r   r   mainr   r   r   r   <module>   sh                  A     7   U  i	
