ó
î%![c           @   sÎ   d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l m
 Z
 d  d	 l m Z d
 e  j f d „  ƒ  YZ e d k rÊ e  j ƒ  n  d S(   iÿÿÿÿN(   t   builtins(   t   builder(   t
   exceptions(   t   helpers(   t   manager(   t   raw_building(   t
   test_utils(   t   utilt   TestHelpersc           B   s×   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j	 d d ƒ d „  ƒ Z
 e j	 d d ƒ d	 „  ƒ Z d
 „  Z d „  Z d „  Z e j	 d d ƒ d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s8   t  j } t j ƒ  } | j | |  _  t j ƒ  |  _ d  S(   N(   R    t   __name__R   t   AstroidManagert   astroid_cache(   t   selft   builtins_namet   astroid_manager(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   setUp   s    	c         C   s   |  j  j | ƒ d S(   Ni    (   R    t   getattr(   R   t   obj_name(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   _extract   s    c         C   s   t  j | ƒ } |  j | _ | S(   N(   R   t   build_classR    t   parent(   R   R   t   proxy(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   _build_custom_builtin!   s    c         C   sL   |  j  | j | j ƒ |  j  | j | j ƒ |  j  | j ƒ  | j ƒ  ƒ d  S(   N(   t   assertEqualt   nameR   t   qname(   R   t   clst   other(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   assert_classes_equal&   s    c         C   s  d |  j  d ƒ f d |  j  d ƒ f d |  j  d ƒ f d |  j  d ƒ f d	 |  j  d	 ƒ f d
 |  j  d	 ƒ f d |  j  d
 ƒ f d |  j d ƒ f d |  j d ƒ f d |  j d ƒ f d |  j d ƒ f g } xB | D]: \ } } t j | ƒ } t j | ƒ } |  j | | ƒ qÓ Wd  S(   Nt   1t   ints   []t   lists	   {1, 2, 3}t   sets
   {1:2, 4:3}t   dictt   typet   objects   object()s   lambda: Nonet   functiont   lent   builtin_function_or_methodt   Nonet   NoneTypes   import sys
sys#@t   module(   R   R   R   t   extract_nodeR   t   object_typeR   (   R   t   pairst   codet   expectedt   nodet   objtype(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   test_object_type+   s    c         C   s–  t  j d ƒ } t j | d ƒ } t | d j ƒ  ƒ } |  j | | ƒ t j | d ƒ } |  j | |  j d ƒ ƒ t j | d ƒ } t | d j ƒ  ƒ j } |  j | | ƒ | d t	 j
 rÆ d n d f | d	 t	 j
 râ d n d
 f | d t	 j
 rþ d n d
 f | d t	 j
 rd n d
 f | d d f | d d f | d d f g } xB | D]: \ } } t j | ƒ }	 |  j | ƒ }
 |  j |	 |
 ƒ qTWd  S(   NsÄ  
        def generator():
            yield

        class A(object):
            def test(self):
                self #@
            @classmethod
            def cls_method(cls): pass
            @staticmethod
            def static_method(): pass
        A #@
        A() #@
        A.test #@
        A().test #@
        A.cls_method #@
        A().cls_method #@
        A.static_method #@
        A().static_method #@
        generator() #@
        i    i   R"   i   i   t   instancemethodR$   i   t   methodi   i   i   i   i	   t	   generator(   R   R*   R   R+   t   nextt   inferR   R   t   _proxiedt   sixt   PY2R   (   R   t	   ast_nodest	   from_selfR   t   cls_typet   instance_typet   expected_method_typesR/   R.   t	   node_typet   expected_type(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt&   test_object_type_classes_and_functions>   s*    	t   minvers   3.0c         C   sy   t  j d ƒ } t j | d ƒ } |  j | | d j ƒ  ƒ t | d j ƒ  ƒ } t j | ƒ } |  j | | d ƒ d  S(   Nsw   
        import abc
        class Meta(metaclass=abc.ABCMeta):
            pass
        meta_instance = Meta()
        t   Metat   meta_instance(   R   t   parseR   R+   R   t	   metaclassR5   R6   (   R   R)   t	   meta_typeRD   R=   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   test_object_type_metaclassesm   s    	c         C   sQ   t  j d ƒ } | j ƒ  } |  j | j d ƒ t j | ƒ } |  j | | ƒ d  S(   Ns7  
        class A(type):
            def __new__(*args, **kwargs):
                 return type.__new__(*args, **kwargs)
        class B(object): pass
        class C(object, metaclass=A): pass

        # The most derived metaclass of D is A rather than type.
        class D(B , C): #@
            pass
        t   A(   R   R*   RF   R   R   R   R+   (   R   R/   RF   t   obj_type(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   test_object_type_most_derived|   s    
	c         C   s/   t  j d ƒ } |  j t j | ƒ t j ƒ d  S(   NsD   
        from unknown import Unknown
        u = Unknown #@
        (   R   R*   R   R   R+   R   t   Uninferable(   R   R/   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   test_inference_errorsŽ   s    	c         C   s/   t  j d ƒ } |  j t j | ƒ t j ƒ d  S(   Ns¼   
        from unknown import Unknown
        def test(x):
            if x:
                return lambda: None
            else:
                return 1
        test(Unknown) #@
        (   R   R*   R   R   R+   R   RL   (   R   R/   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   test_object_type_too_many_types•   s    	c         C   s-  t  j d ƒ } | d } | d } | d } | d } t j t | j ƒ  ƒ ƒ } |  j d ƒ } |  j t j | | ƒ ƒ |  j t j	 | | ƒ ƒ |  j t j	 | | ƒ ƒ |  j t j	 | | ƒ ƒ |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ |  j
 t j | | ƒ ƒ |  j
 t j | | ƒ ƒ d  S(   Ns®   
        class int_subclass(int):
            pass
        class A(object): pass #@
        class B(A): pass #@
        class C(A): pass #@
        int_subclass() #@
        i    i   i   i   R   (   R   R*   R   R+   R5   R6   R   t
   assertTruet
   is_subtypet   is_supertypet   assertFalse(   R   R:   t   cls_at   cls_bt   cls_ct   int_subclasst   base_int(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   test_is_subtype¡   s     	



t   maxverc         C   s}   t  j d ƒ \ } } |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ d  S(   NsV   
        class A: #@
            pass
        class B(A): #@
            pass
        (   R   R*   RR   R   RP   RQ   (   R   RS   RT   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt+   test_is_subtype_supertype_old_style_classesº   s    c         C   s   t  j d ƒ \ } } |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ |  j t j ƒ  t j | | ƒ Wd  QX|  j t j | | ƒ ƒ d  S(   Ns³   
        class A(object): pass
        class B(A): pass
        class C(A): pass
        class D(B, C): pass
        class E(C, B): pass #@
        class F(D, E): pass #@
        (	   R   R*   RR   R   RP   t   assertRaisesR   t   _NonDeducibleTypeHierarchyRQ   (   R   t   cls_et   cls_f(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt#   test_is_subtype_supertype_mro_errorÇ   s    c         C   sk   t  j d ƒ \ } } |  j t j ƒ  t j | | ƒ Wd  QX|  j t j ƒ  t j | | ƒ Wd  QXd  S(   Nsk   
        from unknown import Unknown
        class A(Unknown): pass #@
        class B(A): pass #@
        (   R   R*   R[   R   R\   R   RP   RQ   (   R   RS   RT   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt'   test_is_subtype_supertype_unknown_bases×   s    c         C   s}   t  j d ƒ \ } } |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ d  S(   NsK   
        class A(object): pass #@
        class B(object): pass #@
        (   R   R*   RR   R   RP   RQ   (   R   RS   RT   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt+   test_is_subtype_supertype_unrelated_classesâ   s    c         C   sT   t  j d ƒ } |  j d ƒ } |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ d  S(   Ns6   
        class A(object): #@
            pass
        R"   (   R   R*   R   RR   R   RQ   RP   (   R   RS   t   builtin_type(    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt2   test_is_subtype_supertype_classes_no_type_ancestorì   s
    	c         C   sT   t  j d ƒ } |  j d ƒ } |  j t j | | ƒ ƒ |  j t j | | ƒ ƒ d  S(   Ns4   
        class A(type): #@
            pass
        R"   (   R   R*   R   RO   R   RQ   RP   (   R   RS   Rb   (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt-   test_is_subtype_supertype_classes_metaclassesõ   s
    	(   R	   t
   __module__R   R   R   R   R1   RA   R   t   require_versionRH   RK   RM   RN   RX   RZ   R_   R`   Ra   Rc   Rd   (    (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyR      s"   						/						
		t   __main__(   t   unittestR8   t	   six.movesR    t   astroidR   R   R   R   R   R   R   t   TestCaseR   R	   t   main(    (    (    s=   lib/python2.7/site-packages/astroid/tests/unittest_helpers.pyt   <module>   s   é