o
    bjD                     @   s   d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
 G dd deZG dd deZG d	d
 d
eZG dd deZG dd dejZdS )zUnittest for the base checker.    N)base)CheckerTestCaseMessage
set_configc                   @   s   e Zd ZejZdd Zdd Zdd Zdd Z	e
d	d
dd Ze
d	d
dd Ze
d	d
dd Ze
d	d
dd Zdd Zdd ZdS )TestDocstringc                 C   T   t d}td|dd}| | | j| W d    d S 1 s#w   Y  d S )NZ	somethingmissing-docstringmodulenodeargsastroidparser   assertAddsMessagescheckervisit_moduleselfr
   message r   `/var/www/secure340b-portal/env/lib/python3.10/site-packages/pylint/test/unittest_checker_base.pytest_missing_docstring_module    
   
"z+TestDocstring.test_missing_docstring_modulec                 C   D   t d}|   | j| W d    d S 1 sw   Y  d S )N )r   r   assertNoMessagesr   r   )r   r
   r   r   r   #test_missing_docstring_empty_module&   s   

"z1TestDocstring.test_missing_docstring_empty_modulec                 C   r   )Nz''''''zempty-docstringr	   r   r   r   r   r   r   test_empty_docstring_module+   r   z)TestDocstring.test_empty_docstring_modulec                 C   r   )N(
        def func(tion):
           passr   functionr   r   extract_noder   r   r   visit_functiondefr   funcr   r   r   r   test_empty_docstring_function1      "z+TestDocstring.test_empty_docstring_function   )Zdocstring_min_lengthc                 C   r   )Nr    r   r$   r   r   r%   r   r'   r   r   r    test_short_function_no_docstring;      
"z.TestDocstring.test_short_function_no_docstringc                 C   r   )NzF
        def func(tion):
            pass
            pass
           r   r!   r   r#   r&   r   r   r   test_long_function_no_docstringE   s   "z-TestDocstring.test_long_function_no_docstringc                 C   r   )Nzs
        def func(tion):
            try:
                pass
            except:
                pass
           r   r!   r   r#   r&   r   r   r   1test_long_function_nested_statements_no_docstringR   s   	"z?TestDocstring.test_long_function_nested_statements_no_docstringc                 C   r   )Nz+
        def __fun__(tion):
           passr+   r,   r   r   r   "test_function_no_docstring_by_namea   r.   z0TestDocstring.test_function_no_docstring_by_namec                 C   r   )Nz-
        class Klass(object):
           passr   )classr   )r   r$   r   r   r   visit_classdef)r   klassr   r   r   r   test_class_no_docstringk   r)   z%TestDocstring.test_class_no_docstringc                 C   r   )Nz
        def func(tion):
            """Documented"""
            def inner(fun):
                # Not documented
                pass
        r+   r,   r   r   r    test_inner_function_no_docstringu   s   
	"z.TestDocstring.test_inner_function_no_docstringN)__name__
__module____qualname__r   ZDocStringCheckerCHECKER_CLASSr   r   r   r(   r   r-   r/   r0   r1   r5   r6   r   r   r   r   r      s     

	


	
r   c                   @   s   e Zd ZejZde iZee	
ddddd Zee	
dddd	 Zd
d Zejejdkddee	
ddee	
ddee	
dddd ZdS )TestNameCheckerZ	bad_namesz[A-Z]+)zabc.abstractpropertyz.custom_prop)attr_rgxZproperty_classesc                 C   s   t d}|    | j|d  | j|d  | j|d  W d    n1 s,w   Y  | td|d dd | j|d  W d    d S 1 sQw   Y  d S )	Na  
        import abc

        def custom_prop(f):
          return property(f)

        class FooClass(object):
          @property
          def FOO(self): #@
            pass

          @property
          def bar(self): #@
            pass

          @abc.abstractproperty
          def BAZ(self): #@
            pass

          @custom_prop
          def QUX(self): #@
            pass
        r   r*      invalid-name   )	Attributebarz'[A-Z]+' patternr   )r   r$   r   r   r%   r   r   )r   methodsr   r   r   test_property_names   s"   
"z#TestNameChecker.test_property_names)r<   c                 C   r   )Nz
        class FooClass(object):
          @property
          def foo(self): pass

          @foo.setter
          def FOOSETTER(self): #@
             pass
        r+   )r   methodr   r   r   test_property_setters   s   
"z%TestNameChecker.test_property_settersc                 C   s:  t d}|   | j|jd  W d    n1 sw   Y  t d}|   | j|jd  W d    n1 s?w   Y  t d}|  # | j|jd jd jd  | j|jd jd  W d    n1 ssw   Y  t d}|   | j|jd  W d    d S 1 sw   Y  d S )Nz_
        import collections
        Class = collections.namedtuple("a", ("b", "c")) #@
        r   zP
        class ClassA(object):
            pass
        ClassB = ClassA
        zd
        def A():
          return 1, 2, 3
        CONSTA, CONSTB, CONSTC = A()
        CONSTD = A()r?   r*   z*
        CONST = "12 34 ".rstrip().split())	r   r$   r   r   visit_assignnametargetsr   bodyelts)r   Zassignr
   r   r   r   test_module_level_names   s2   



"z'TestNameChecker.test_module_level_names)r=      zNeeds Python 3.6 or earlier)reasonz.+)Z	const_rgxfunction_rgxZ	class_rgxc                 C   sH  t d}| td|d jd dd | j|d jd  W d    n1 s*w   Y  | td|d jd dd | j|d jd  W d    n1 sTw   Y  | td|d dd | j|d  W d    n1 sxw   Y  | td|d	 dd | j|d	  W d    d S 1 sw   Y  d S )
Nz
        async = "foo"  #@
        await = "bar"  #@
        def async():   #@
            pass
        class async:   #@
            pass
        zassign-to-new-keywordr   )async3.7)Zmsg_idr   r   r?   )awaitrQ   r*   r=   )	r   r$   r   r   rG   r   rF   r%   r3   )r   astr   r   r   test_assign_to_new_keyword_py3   s>   
"z.TestNameChecker.test_assign_to_new_keyword_py3N)r7   r8   r9   r   NameCheckerr:   setZCONFIGr   recompilerC   rE   rJ   unittestZskipIfsysversion_inforT   r   r   r   r   r;      s     

*
&r;   c                   @   sn   e Zd ZejZedZe	eddd Z
e	eddd Ze	eeddd	d
 Ze	edddd ZdS )TestMultiNamingStylez$(?:(?P<UP>[A-Z]+)|(?P<down>[a-z]+))$rO   c                 C   p   t d}td|d dd}| | |D ]}| j| q| j|j W d    d S 1 s1w   Y  d S )Nz
        class classb(object): #@
            pass
        class CLASSA(object): #@
            pass
        class CLASSC(object): #@
            pass
        r>   r   )ClassZclassb.'(?:(?P<UP>[A-Z]+)|(?P<down>[a-z]+))$' patternr   r   r$   r   r   r   r3   leave_moduleroot)r   classesr   clsr   r   r   "test_multi_name_detection_majority  s   
"z7TestMultiNamingStyle.test_multi_name_detection_majorityc                 C   s   t d}td|d ddtd|d ddg}| j|  |D ]}| j| q| j|j W d    d S 1 s:w   Y  d S )Nz
        class class_a(object): #@
            pass
        class classb(object): #@
            pass
        class CLASSC(object): #@
            pass
        r>   r   )r^   Zclass_ar_   r   r*   )r^   ZCLASSCr_   r`   )r   rc   messagesrd   r   r   r   'test_multi_name_detection_first_invalid/  s&   	"z<TestMultiNamingStyle.test_multi_name_detection_first_invalid)zfunction:method)Z
method_rgxrN   Z
name_groupc                 C   st   t jddd}td|d dd}| | |D ]}| j| q| j|j W d    d S 1 s3w   Y  d S )Nz
        class First(object):
            def func(self): #@
                pass

        def FUNC(): #@
            pass
        test)module_namer>   r?   )FunctionZFUNCr_   r   r   r$   r   r   r   r%   ra   rb   r   Zfunction_defsr   r'   r   r   r   test_multi_name_detection_groupT  s   "z4TestMultiNamingStyle.test_multi_name_detection_groupz4(?:(?P<ignore>FOO)|(?P<UP>[A-Z]+)|(?P<down>[a-z]+))$rM   c                 C   r]   )Nz
        def FOO(): #@
            pass
        def lower(): #@
            pass
        def FOO(): #@
            pass
        def UPPER(): #@
            pass
        r>   r=   )rj   ZUPPERz>'(?:(?P<ignore>FOO)|(?P<UP>[A-Z]+)|(?P<down>[a-z]+))$' patternr   rk   rl   r   r   r    test_multi_name_detection_exempto  s   	"z5TestMultiNamingStyle.test_multi_name_detection_exemptN)r7   r8   r9   r   rU   r:   rW   rX   ZMULTI_STYLE_REr   re   rg   rm   rn   r   r   r   r   r\     s"    


$
r\   c                   @   s   e Zd ZejZdd ZdS )TestComparisonc                 C   s  t d}td|dd}| | | j| W d    n1 s"w   Y  t d}td|dd}| | | j| W d    n1 sIw   Y  t d}td|dd}| | | j| W d    n1 spw   Y  t d	}td
|ddtd|ddf}| j|  | j| W d    n1 sw   Y  t d}td
|ddtd|ddf}| j|  | j| W d    n1 sw   Y  t d}td
|ddtd|ddf}| j|  | j| W d    d S 1 sw   Y  d S )Nfoo == Truezsingleton-comparison)Tzjust 'expr'r   foo == False)Fz
'not expr'foo == None)Nz'expr is None'zTrue == foozmisplaced-comparison-constant)rp   zFalse == foo)rq   zNone == foo)rr   )r   r$   r   r   r   Zvisit_compare)r   r   r   rf   r   r   r   test_comparison  sL   





"zTestComparison.test_comparisonN)r7   r8   r9   r   ZComparisonCheckerr:   rs   r   r   r   r   ro     s    ro   c                   @   s   e Zd Zh dZh dZh dZh dZeeB eB eB 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 )TestNamePresets>   test_https_200test_snake_case11test_snake_case>   testHTTP200testCamelCasetestCamelCase11>   TEST_HTTP_200TEST_UPPER_CASETEST_UPPER_CASE11>   TestHTTP200TestPascalCaseTestPascalCase11c                 C      t jD ]	}| ||| qd S N)r   KNOWN_NAME_TYPES_test_is_correctr   naming_stylename	name_typer   r   r   (_test_name_is_correct_for_all_name_types     
z8TestNamePresets._test_name_is_correct_for_all_name_typesc                 C   r   r   )r   r   _test_is_incorrectr   r   r   r   *_test_name_is_incorrect_for_all_name_types  r   z:TestNamePresets._test_name_is_incorrect_for_all_name_typesc                 C   s(   g d}|D ]\}}|  ||| qd S )N))__add__rD   )__set_name__rD   )__version__const)
__author__r   )r   )r   r   Zalways_pass_datar   r   r   r   r   _test_should_always_pass  s   z(TestNamePresets._test_should_always_passc              	   C   ,   | |}| ||d|||| d S )Nz6{!r} does not match pattern {!r} (style: {}, type: {}))	get_regex
assertTruematchformatr   r   r   r   Zrgxr   r   r   r        
z TestNamePresets._test_is_correctc              	   C   r   )Nz;{!r} match pattern {!r} but shouldn't (style: {}, type: {}))r   ZassertFalser   r   r   r   r   r   r     r   z"TestNamePresets._test_is_incorrectc                 C   J   t j}| jD ]}| || q| j| j D ]}| || q| | d S r   )r   ZSnakeCaseStyleSNAKE_CASE_NAMESr   	ALL_NAMESr   r   r   r   r   r   r   r   rw        
zTestNamePresets.test_snake_casec                 C   r   r   )r   ZCamelCaseStyleCAMEL_CASE_NAMESr   r   r   r   r   r   r   r   test_camel_case  r   zTestNamePresets.test_camel_casec                 C   r   r   )r   ZUpperCaseStyleUPPER_CASE_NAMESr   r   r   r   r   r   r   r   test_upper_case  r   zTestNamePresets.test_upper_casec                 C   r   r   )r   ZPascalCaseStylePASCAL_CASE_NAMESr   r   r   r   r   r   r   r   test_pascal_case  r   z TestNamePresets.test_pascal_caseN)r7   r8   r9   r   r   r   r   r   r   r   r   r   r   rw   r   r   r   r   r   r   r   rt     s     
		


rt   )__doc__rW   rZ   rY   r   Zpylint.checkersr   Zpylint.testutilsr   r   r   r   r;   r\   ro   ZTestCasert   r   r   r   r   <module>   s   f z.