ó
î%![c           @   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 d d l m Z d d l m Z d d l	 m
 Z
 e j ƒ  Z d e j f d	 „  ƒ  YZ e d
 k rÄ e j ƒ  n  d S(   s-   Tests for the astroid AST peephole optimizer.iÿÿÿÿN(   t   astpeephole(   t   builder(   t   manager(   t
   test_utils(   t	   resourcest   PeepholeOptimizerc           B   st   e  Z e d  „  ƒ Z e d „  ƒ Z d „  Z e d „  ƒ Z e j	 d d ƒ d „  ƒ Z
 d „  Z d „  Z d	 „  Z RS(
   c         C   s   t  t _ d  S(   N(   t   Truet   MANAGERt   optimize_ast(   t   cls(    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt
   setUpClass   s    c         C   s   t  t _ d  S(   N(   t   FalseR   R   (   R	   (    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   tearDownClass   s    c         C   s   t  j ƒ  |  _ d  S(   N(   R    t   ASTPeepholeOptimizert
   _optimizer(   t   self(    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   setUp!   s    c         C   sG   t  j t j |  ƒ ƒ } g  | j D]! } t | t  j ƒ r" | j ^ q" S(   N(   t   astt   parset   textwrapt   dedentt   bodyt
   isinstancet   Exprt   value(   t   codet   modulet   node(    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   _get_binops$   s    t   maxvers   3.0c         C   s‰   |  j  d ƒ } |  j j | d ƒ } |  j | t j ƒ |  j | j d ƒ |  j |  j j | d ƒ ƒ |  j |  j j | d ƒ ƒ d  S(   NsR   
        u"a" + u"b" + u"c"

        u"a" + "c" + "b"
        u"a" + b"c"
        i    u   abci   i   (	   R   R   t   optimize_binopt   assertIsInstancet   astroidt   Constt   assertEqualR   t   assertIsNone(   R   t   nodest   result(    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   test_optimize_binop_unicode*   s    	c         C   s¹   |  j  d ƒ } |  j j | d ƒ } |  j | t j ƒ |  j | j d ƒ |  j j | d ƒ } |  j | t j ƒ |  j | j d ƒ x+ | d D] } |  j |  j j | ƒ ƒ q’ Wd  S(   Ns"  
        "a" + "b" + "c" + "d"
        b"a" + b"b" + b"c" + b"d"
        "a" + "b"

        "a" + "b" + 1 + object
        var = 4
        "a" + "b" + var + "c"
        "a" + "b" + "c" - "4"
        "a" + "b" + "c" + "d".format()
        "a" - "b"
        "a"
        1 + 4 + 5 + 6
        i    t   abcdi   i   (	   R   R   R   R   R    R!   R"   R   R#   (   R   R$   R%   R   (    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   test_optimize_binop:   s    	c         C   sU   t  j d ƒ } t | d j ƒ  ƒ } |  j | t j ƒ |  j t | j	 ƒ d ƒ d  S(   Ns   data/joined_strings.pyt   xiÜð  (
   R   t
   build_filet   nextt   inferR   R    R!   R"   t   lenR   (   R   R   t   element(    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   test_big_binop_crashU   s    c         C   s§   z– t  t _ t j d ƒ } |  j | j d t j ƒ |  j | j d j	 t j
 ƒ |  j | j d j	 j t j
 ƒ |  j | j d j	 j j t j ƒ Wd  t t _ Xd  S(   Ns)   
            '1' + '2' + '3'
            i    (   R   R   R   R   R   R   R   R    R   R   t   BinOpt   leftR!   R   (   R   R   (    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   test_optimisation_disabled]   s    		 (   t   __name__t
   __module__t   classmethodR
   R   R   t   staticmethodR   R   t   require_versionR&   R(   R/   R2   (    (    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyR      s   			t   __main__(   t   __doc__R   R   t   unittestR    R    R   R   R   t   astroid.testsR   t   AstroidManagerR   t   TestCaseR   R3   t   main(    (    (    s>   lib/python2.7/site-packages/astroid/tests/unittest_peephole.pyt   <module>   s   T