
    c6                       d dl mZmZ d dlmZ d dlm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mZ d dlmZ d dlmZ d dlmZ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%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d  Z;d! Z<d" Z=d# Z>d$ Z?d% Z@d& ZAd' ZBd( ZCd) ZDd* ZEd+ ZFd, ZGd- ZHd. ZId/ ZJd0 ZKd1 ZLd2 ZMd3 ZNd4 ZOd5 ZPd6 ZQd7 ZRd8 ZSd9 ZTd: ZUd; ZVd< ZWd= ZXd> ZYd? ZZd@ Z[dA Z\dB Z]dC Z^dD Z_dE Z`dF ZadG ZbdH ZcdI ZddJ ZedK ZfdL ZgdM ZhdN ZidO ZjdP ZkdQ ZldR ZmdS ZndT ZodU ZpdV ZqdW ZrdX ZsdY ZtdZ Zud[ Zvd\ Zwd] Zxd^ Zyd_ Zzd` Z{da Z|db Z}dc Z~dd Zde Zdf Zdg Zdh Zdi Zdj Zdk Zdl Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zdd|Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd ZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    )absolute_importprint_function)deepcopy)find_executableN)SkipTest)_load_environment_yml)__version__)with_directory_contents/with_directory_contents_completing_project_file)	conda_api)RequirementsRegistry)EnvVarRequirement)CondaEnvRequirement)ServiceRequirement)DownloadRequirement)ProjectProjectProblem)DEFAULT_PROJECT_FILENAME)DEFAULT_PROJECT_LOCK_FILENAME)minimal_environ)project_no_dedicated_envc                 ^    t          | |          }|t          d| d|d           |J |S )NzDid not find z	 on path z, running the tests requires it)r   print)namepathfounds      Blib/python3.11/site-packages/anaconda_project/test/test_project.py_assert_find_executabler   '   sK    D$''E ZTTTSWSWSWXYYYL    c                  D    d } t          t                      |            d S )Nc                 x   t          |           }|j        g k    sJ | |j        k    sJ | t          j                            |j        j                  k    sJ |j        t          j        	                    |           k    sJ |j
        t          j        	                    |           k    sJ |j        dk    sJ d S )N )r   problemsdirectory_pathosr   dirnameproject_filefilenamer   basenameurl_friendly_namedescriptionr&   projects     r   check_propertiesz)test_properties.<locals>.check_properties0   s    *7332%%%%'00000"'//'*>*GHHHHHH|rw//888888(BG,<,<W,E,EEEEE"b((((((r   r
   dictr.   s    r   test_propertiesr2   /   s.    ) ) ) DFF$455555r   c                  D    d } t          t                      |            d S )Nc                    t          | dz             }|j        g k    sJ | |j        k    sJ | t          j                            |j        j                  k    sJ |j        t          j        	                    |           k    sJ d S )N/)
r   r#   r$   r%   r   r&   r'   r(   r   r)   r,   s     r   r.   z?test_ignore_trailing_slash_on_dirname.<locals>.check_properties=   s    *7S=992%%%%'00000"'//'*>*GHHHHHH|rw//88888888r   r/   r1   s    r   %test_ignore_trailing_slash_on_dirnamer6   <   s.    9 9 9 DFF$455555r   c                  :    d } t          t          di|            d S )Nc                 L   t          |           }g |j        k    sJ |                    |j                  }dt	          |          k    sJ d|d         j        k    sJ t                      |d         j        k    sJ t          j	                    }||d         j        k    sJ d S )N   FOOr      
r   r#   requirementsdefault_env_spec_namelenenv_varr0   optionsr   conda_prefix_variabler&   r-   r=   conda_env_vars       r   check_some_env_varz;test_single_env_var_requirement.<locals>.check_some_env_varH   s    *733W%%%%%++G,IJJC%%%%%%Q/////vva00000!799Q 7777777r   
variables:
  FOO: {}
r   r   rE   s    r   test_single_env_var_requirementrI   G   B    	8 	8 	8 45M P 5     r   c                  :    d } t          t          di|            d S )Nc                    t          |           }g |j        k    sJ |                    |j                  }dt	          |          k    sJ d|d         j        k    sJ ddi|d         j        k    sJ d|d         j        k    sJ d|d         j        k    sJ t          j
                    }||d         j        k    sJ d S )Nr9   r:   r   r+   z Set FOO to the value of your foor;   )r   r#   r=   r>   r?   r@   rA   r+   titler   rB   rC   s       r   rE   zLtest_single_env_var_requirement_with_description.<locals>.check_some_env_varZ   s    *733W%%%%%++G,IJJC%%%%%%Q/////ABlSToF]]]]]1\!_5PPPPPQ-----!799Q 7777777r   zG
variables:
  FOO: { description: "Set FOO to the value of your foo" }
rG   rH   s    r   0test_single_env_var_requirement_with_descriptionrN   Y   sA    8 8 8 4	! $ 	 	    r   c                  :    d } t          t          di|            d S )Nc                    t          |           }g |j        k    sJ |                    |j                  }dt	          |          k    sJ d|d         j        k    sJ t                      |d         j        k    sJ d|d         j        k    sJ t                      |d         j        k    sJ t          j	                    }||d         j        k    sJ d S )N   r:   r   BARr;   r9   r<   rC   s       r   rE   zLtest_single_env_var_requirement_null_for_default.<locals>.check_some_env_varo   s    *733W%%%%%++G,IJJC%%%%%%Q/////vva00000Q/////vva00000!799Q 7777777r   z1
variables:
  FOO: null
  BAR: { default: null }
rG   rH   s    r   0test_single_env_var_requirement_null_for_defaultrS   n   sA    8 8 8 4	! $ 	     r   c                  :    d } t          t          di|            d S )Nc                 P   t          |           }g |j        k    sJ |                    |j                  }dt	          |          k    sJ d|d         j        k    sJ t          d          |d         j        k    sJ t          j	                    }||d         j        k    sJ d S Nr9   r:   r   hellodefaultr;   r<   rC   s       r   rE   zNtest_single_env_var_requirement_string_for_default.<locals>.check_some_env_var   s    *733W%%%%%++G,IJJC%%%%%%Q/////G$$$Q(?????!799Q 7777777r   z
variables:
  FOO: 'hello'
rG   rH   s    r   2test_single_env_var_requirement_string_for_defaultrZ      rJ   r   c                  :    d } t          t          di|            d S )Nc                 P   t          |           }g |j        k    sJ |                    |j                  }dt	          |          k    sJ d|d         j        k    sJ t          d          |d         j        k    sJ t          j	                    }||d         j        k    sJ d S Nr9   r:   r   42rX   r;   r<   rC   s       r   rE   zNtest_single_env_var_requirement_number_for_default.<locals>.check_some_env_var       *733W%%%%%++G,IJJC%%%%%%Q/////D!!!\!_%<<<<<!799Q 7777777r   z
variables:
  FOO: 42
rG   rH   s    r   2test_single_env_var_requirement_number_for_defaultr`      rJ   r   c                  :    d } t          t          di|            d S )Nc                 P   t          |           }g |j        k    sJ |                    |j                  }dt	          |          k    sJ d|d         j        k    sJ t          d          |d         j        k    sJ t          j	                    }||d         j        k    sJ d S r]   r<   rC   s       r   rE   zNtest_single_env_var_requirement_default_is_in_dict.<locals>.check_some_env_var   r_   r   z#
variables:
  FOO: { default: 42 }
rG   rH   s    r   2test_single_env_var_requirement_default_is_in_dictrc      sA    	8 	8 	8 4	! $ 	 	    r   c                  :    d } t          t          di|            d S )Nc                     t          |           g j        k    sJ j        dk    sJ fd} |d          }g dg df|k    sJ  |d          }ddgd dgf|k    sJ  |d	          }ddgd d
gf|k    sJ d S )Nfooc                     d                      |           D             }dt          |          k    sJ d                      |           D             }t          |d           }d |D             d |D             fS )Nc                 <    g | ]}t          |t                    |S  )
isinstancer   .0reqs     r   
<listcomp>zQtest_requirement_inheritance.<locals>.check.<locals>.var_reqs.<locals>.<listcomp>   s)    pppc:VY[nKoKopcpppr   r;   c                 z    g | ]8}t          |t                    |j        |j                            d           f9S rX   )rj   r   r@   rA   getrk   s     r   rn   zQtest_requirement_inheritance.<locals>.check.<locals>.var_reqs.<locals>.<listcomp>   sS     I I I##-c3F#G#GIS[#+//)*D*DE I I Ir   c                     | d         S )Nr   ri   )xs    r   <lambda>zOtest_requirement_inheritance.<locals>.check.<locals>.var_reqs.<locals>.<lambda>   s
    ad r   )keyc                     g | ]
}|d          S )r   ri   rl   ts     r   rn   zQtest_requirement_inheritance.<locals>.check.<locals>.var_reqs.<locals>.<listcomp>   s    000aQqT000r   c                     g | ]
}|d          S )r;   ri   rv   s     r   rn   zQtest_requirement_inheritance.<locals>.check.<locals>.var_reqs.<locals>.<listcomp>   s    2N2N2NA1Q42N2N2Nr   )r=   r?   sorted)r   conda_env_reqsr=   r-   s      r   var_reqsz=test_requirement_inheritance.<locals>.check.<locals>.var_reqs   s    ppW-A-A$-G-GpppNN++++++I IQXQeQefjQkQk I I IL!,NNCCCL00<0002N2N2N2N2NOOr   )rR   DOWNLOADr:   )hiNglobalfoo_with_overrider|   r:   localbarr~   )r   r#   r>   )r&   r{   r=   r-   s      @r   checkz+test_requirement_inheritance.<locals>.check   s    *733W%%%%%,5555	P 	P 	P 	P 	P  x***,B,B,BC|SSSSx 344U#dG_5EEEExU#dH%56,FFFFFFr   z
variables:
  FOO: { default: "global" }
downloads:
  DOWNLOAD: "http://example.com"
env_specs:
  foo:
    variables:
      BAR: "hi"
  foo_with_override:
    variables:
      FOO: "local"
  bar:
    downloads:
      DOWNLOAD: "http://example.com/bar"
rG   r   s    r   test_requirement_inheritancer      sD    G G G, 4$	
$ '    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }|                    |j                  }dt          |          k    sJ dt          |j                  k    sJ d S )Nr   r;   )r   r=   r>   r?   r#   )r&   r-   r=   s      r   check_problemz3test_problem_in_project_file.<locals>.check_problem   s`    *733++G,IJJC%%%%%%C())))))))r   z
variables:
  42
rG   r   s    r   test_problem_in_project_filer      sB    * * * 45M P 5     r   c                  :    d } t          t          di|            d S )Nc                     t          |           fd} |d          j        v sJ  |d          j        v sJ  |d          j        v sJ  |d          j        v sJ  |d          j        v sJ d S )Nc                 &    j         j        d| S )N: r'   r)   )sr-   s    r   _fnz<test_problem_empty_names.<locals>.check_problem.<locals>._fn   s    &3<<<aa@@r   z8Variable name cannot be empty string, found: ' ' as namez8Download name cannot be empty string, found: ' ' as namez7Service name cannot be empty string, found: ' ' as namez@Environment spec name cannot be empty string, found: ' ' as namez@Command variable name cannot be empty string, found: ' ' as namer   r#   )r&   r   r-   s     @r   r   z/test_problem_empty_names.<locals>.check_problem   s    *733	A 	A 	A 	A 	A sMNNRYRbbbbbsMNNRYRbbbbbsLMMQXQaaaaasUVVZaZjjjjjsUVVZaZjjjjjjjr   z
variables:
  ' ': 'thing'
downloads:
  ' ': 'http://localhost:8000/foo.tgz'
services:
  ' ': redis
env_specs:
  ' ':
    packages:
       - python
commands:
  ' ':
    shell: echo 'foo'
rG   r   s    r   test_problem_empty_namesr      sD    
k 
k 
k 4$	
" %    r   c                  :    d } t          t          di|            d S )Nc                 T    t          |           }d|j        j        z  |j        v sJ d S )Nz<%s: Variable name cannot be empty string, found: ' ' as namer   r'   r)   r#   r,   s     r   r   z8test_problem_empty_names_var_list.<locals>.check_problem  sJ    *733N$-.292BC 	C 	C 	C 	C 	Cr   z
variables:
  - ' '
rG   r   s    r   !test_problem_empty_names_var_listr     sE    C C C
 45M P 5     r   c                  D    d } t          t                      |            d S )Nc                 h   t           j                            | d          }t           j                            |          rJ t	          |          }t           j                            |          rJ d|z  g|j        k    sJ |                    |j                  }dt          |          k    sJ d S )Nrf   z&Project directory '%s' does not exist.r   )	r%   r   joinisdirr   r#   r=   r>   r?   )r&   project_dirr-   r=   s       r   check_does_not_existz=test_project_dir_does_not_exist.<locals>.check_does_not_exist$  s    gll7E227==-----+&&7==-----8;FG7K[[[[[++G,IJJC%%%%%%%%r   r/   )r   s    r   test_project_dir_does_not_existr   #  s.    & & & DFF$899999r   c                 J      fd}t          t                      |           d S )Nc                     t           j                            | d          }t          j        |           d }                    d|           t          |          }d|z  g|j        k    sJ d S )Nrf   c                      t          d          )NNOPE)OSErrorr&   s    r   mock_os_walkzOtest_project_dir_not_readable.<locals>.check_not_readable.<locals>.mock_os_walk5  s    &//!r   zos.walkz!Could not list files in %s: NOPE.)r%   r   r   makedirssetattrr   r#   )r&   r   r   r-   monkeypatchs       r   check_not_readablez9test_project_dir_not_readable.<locals>.check_not_readable1  s~    gll7E22
K   	" 	" 	" 	I|444+&&3kABgFVVVVVVVr   r/   )r   r   s   ` r   test_project_dir_not_readabler   0  s>    W W W W W DFF$677777r   c                  :    d } t          t          di|            d S )Nc                 6   t          |           }|                    |j                  }dt          |          k    sJ d|d         j        k    sJ t          d          |d         j        k    sJ t          j                    }||d         j        k    sJ d S rV   )	r   r=   r>   r?   r@   r0   rA   r   rB   rC   s       r   rE   zHtest_single_env_var_requirement_with_options.<locals>.check_some_env_varB  s    *733++G,IJJC%%%%%%Q/////G$$$Q(?????!799Q 7777777r   z*
variables:
    FOO: { default: "hello" }
rG   rH   s    r   ,test_single_env_var_requirement_with_optionsr   A  sA    8 8 8 4	! $ 	 	    r   c                  :    d } t          t          di|            d S )Nc                 b    t                      }t          | |          }|j        j        |u sJ d S N)r   r   _config_cacheregistry)r&   r   r-   s      r   check_override_plugin_registryzEtest_override_plugin_registry.<locals>.check_override_plugin_registryT  s9    '))*7H==$-999999r   rF   rG   )r   s    r   test_override_plugin_registryr   S  sB    : : :
 45M P 5 %& & & & &r   c                  :    d } t          t          di|            d S )Nc                 >    t          |           }|j        dk    sJ d S Nrf   )r   r   r,   s     r   check_name_from_project_filezEtest_get_name_from_project_file.<locals>.check_name_from_project_file`  s(    *733|u$$$$$$r   z
name: foo
    rG   r   s    r   test_get_name_from_project_filer   _  s@    % % % 45M P 5	
&( ( ( ( (r   c                  :    d } t          t          di|            d S )Nc                 P    t          |           }t          dz   g|j        k    sJ d S )Nz/: name: field should have a string value not []r   r   r#   r,   s     r   r   zFtest_broken_name_in_project_file.<locals>.check_name_from_project_filej  3    *733),]]_cjcsssssssr   z
name: []
    rG   r   s    r    test_broken_name_in_project_filer   i  C    t t t 45M P 5	
&( ( ( ( (r   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }|j        t          j                            |           k    sJ d S r   )r   r   r%   r   r)   r,   s     r   check_name_from_directory_namezItest_get_name_from_directory_name.<locals>.check_name_from_directory_namet  s8    *733|rw//88888888r   z
name: null
rG   )r   s    r   !test_get_name_from_directory_namer   s  s@    9 9 9 45M P 5$& & & & &r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        dk    sJ |j                            dd           |j        dk    sJ |j                                         |j        dk    sJ t          |           }|j        dk    sJ d S )Nrf   r   r   )r   r   r'   	set_valuesaver&   r-   project2s      r   check_set_namez5test_set_name_in_project_file.<locals>.check_set_name~  s    *733|u$$$$&&vu555|u$$$$!!###|u$$$$+G44}%%%%%%r   z
name: foo
rG   )r   s    r   test_set_name_in_project_filer   }  s@    
& 
& 
& 45M P 5    r   c                  :    d } t          t          di|            d S )Nc                 >    t          |           }|j        dk    sJ d S r   )r   r+   r,   s     r   #check_description_from_project_filezStest_get_description_from_project_file.<locals>.check_description_from_project_file  s)    *733"e++++++r   z
description: foo
    rG   r   s    r   &test_get_description_from_project_filer     s@    , , , 45M P 5	
-/ / / / /r   c                  :    d } t          t          di|            d S )Nc                 P    t          |           }t          dz   g|j        k    sJ d S )Nz6: description: field should have a string value not []r   r,   s     r   r   zTtest_broken_description_in_project_file.<locals>.check_description_from_project_file  sA    *733),dd %& 	& 	& 	& 	& 	&r   z
description: []
    rG   r   s    r   'test_broken_description_in_project_filer     s@    & & &
 45M P 5	
-/ / / / /r   c                  >    d } t          t          dddi|            d S )Nc                 z    t          |           }|j        t          j                            | d          k    sJ d S )Nfoo.png)r   iconr%   r   r   r,   s     r   check_icon_from_project_filezEtest_get_icon_from_project_file.<locals>.check_icon_from_project_file  s8    *733|rw||GY????????r   z
icon: foo.png
        r   r"   rG   r   s    r   test_get_icon_from_project_filer     sK    @ @ @ 4$ ' r		

 () ) ) ) )r   c                  :    d } t          t          di|            d S )Nc                 P    t          |           }t          dz   g|j        k    sJ d S )Nz/: icon: field should have a string value not []r   r,   s     r   r   zFtest_broken_icon_in_project_file.<locals>.check_icon_from_project_file  r   r   z
icon: []
    rG   r   s    r    test_broken_icon_in_project_filer     r   r   c                  :    d } t          t          di|            d S )Nc                     t          |           }|j        J dt          j                            | d          z  g|j        k    sJ d S )NzIcon file %s does not exist.r   )r   r   r%   r   r   r#   r,   s     r   r   zKtest_nonexistent_icon_in_project_file.<locals>.check_icon_from_project_file  sP    *733|###."',,w	2R2RSTX_Xhhhhhhhr   z
icon: foo.png
    rG   r   s    r   %test_nonexistent_icon_in_project_filer     sC    i i i
 45M P 5	
&( ( ( ( (r   c                  B    d } t          t          dddddi|            d S )Nc                    t          |           }|j        t          j                            | d          k    sJ |j                            dd           |j        t          j                            | d          k    sJ |j                                         |j        t          j                            | d          k    sJ t          |           }|j        t          j                            | d          k    sJ d S )Nr   r   bar.png)r   r   r%   r   r   r'   r   r   r   s      r   check_set_iconz5test_set_icon_in_project_file.<locals>.check_set_icon  s    *733|rw||GY??????&&vy999|rw||GY??????!!###|rw||GY??????+G44}Wi @ @@@@@@@r   z
icon: foo.png
r   r"   r   rG   )r   s    r   test_set_icon_in_project_filer     sP    
A 
A 
A 4$ ' rr	
     r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        d         }|j        dk    sJ d|j        k    sJ d|j        k    sJ d|j        k    sJ t          g d          |j        k    sJ t          g d          |j        k    sJ |	                    |j
                  }d }|D ]}t          |t                    r|J |}t          |j                  dk    sJ d|j        v sJ |j        d         |u sJ d S NrY   mtvhbo)rf   zhello >= 1.0world)pip1z	pip2==1.3pip3)rf   rW   r   )r   pip2r   r;   r   	env_specsr   channelsconda_packagespip_packagessetconda_package_names_setpip_package_names_setr=   r>   rj   r   r?   r&   r-   envr=   conda_env_reqrs         r   check_get_packageszPtest_get_dependencies_requirements_from_project_file.<locals>.check_get_packages  P   *733	*x9$$$$----/33EEEEE,0@@@@@,,,--1LLLLL+++,,0IIIII++G,IJJ  	" 	"A!011 "$,,, !=*++q0000M33333&y1S888888r   z
dependencies:
  - foo
  - hello >= 1.0
  - world
  - pip:
     - pip1
     - pip2==1.3
  - pip:
     - pip3

channels:
  - mtv
  - hbo
    rG   r   s    r   4test_get_dependencies_requirements_from_project_filer     A    9 9 9, 4$	
" %    r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        d         }|j        dk    sJ d|j        k    sJ d|j        k    sJ d|j        k    sJ t          g d          |j        k    sJ t          g d          |j        k    sJ |	                    |j
                  }d }|D ]}t          |t                    r|J |}t          |j                  dk    sJ d|j        v sJ |j        d         |u sJ d S r   r   r   s         r   r   zKtest_get_package_requirements_from_project_file.<locals>.check_get_packages  r   r   z
packages:
  - foo
  - hello >= 1.0
  - world
  - pip:
     - pip1
     - pip2==1.3
  - pip:
     - pip3

channels:
  - mtv
  - hbo
    rG   r   s    r   /test_get_package_requirements_from_project_filer  
  r   r   c                  :    d } t          t          di|            d S )Nc                 T    t          |           }d|j        d         j        k    sJ d S )Nri   rY   )r   r   r   r,   s     r   r   zLtest_get_package_requirements_from_empty_project.<locals>.check_get_packages7  s1    *733W&y1@@@@@@@r   r"   rG   r   s    r   0test_get_package_requirements_from_empty_projectr  6  s3    A A A 45Mr4RTfgggggr   c                  :    d } t          t          di|            d S )Nc                 v    t          |           }dt          |j                  k    sJ d|j        d         v  d S Nr;   zshould be a list of strings notr   r   r?   r#   r,   s     r   r   zCtest_complain_about_packages_not_a_list.<locals>.check_get_packages?  D    *733C()))))))W-=a-@@@@@r   z
packages:
    foo: bar
    rG   r   s    r   'test_complain_about_packages_not_a_listr  >  sE    A A A
 45M P 5	     r   c                  :    d } t          t          di|            d S )Nc                 v    t          |           }dt          |j                  k    sJ d|j        d         v  d S r	  r
  r,   s     r   r   z6test_complain_about_pip_deps_not_a_list.<locals>.checkK  r  r   z
packages:
    - pip: bar
    rG   r   s    r   'test_complain_about_pip_deps_not_a_listr  J  sE    A A A
 45M P 5	     r   c                  :    d } t          t          di|            d S )Nc                 v    t          |           }dt          |j                  k    sJ d|j        d         v  d S )Nr;   z%should be a list of pip package namesr   r
  r,   s     r   r   z8test_complain_about_pip_deps_not_a_string.<locals>.checkW  sD    *733C())))))/73CA3FFFFFr   z%
packages:
    - pip:
      - {}
    rG   r   s    r   )test_complain_about_pip_deps_not_a_stringr  V  sD    G G G
 4	! $ 		     r   c                  :    d } t          t          di|            d S )Nc                 n    t          |           }|j        j        }d|z  d|z  d|z  g|j        k    sJ d S Nz$%s: invalid package specification: =z*%s: invalid package specification: foo barz%%s: invalid pip package specifier: %%r   r&   r-   r(   s      r   r   zAtest_complain_about_packages_bad_spec.<locals>.check_get_packagese  s]    *733'02X=88C3h>
 	 	 	 	 	 	r   z>
packages:
    - "="
    - foo bar
    - pip:
      - "%"
    rG   r   s    r   %test_complain_about_packages_bad_specr  d  sA       4	! $ 		     r   c                  :    d } t          t          di|            d S )Nc                 z    t          |           }|j        j        dz   dz   }|dz  |dz  |dz  g|j        k    sJ d S Nz7: Environment variable %s is reserved for Conda's use, z,so it can't appear in the variables section.CONDA_ENV_PATHCONDA_DEFAULT_ENVCONDA_PREFIXr   r&   r-   templates      r   "check_complain_about_conda_env_varz[test_complain_about_conda_env_in_variables_list.<locals>.check_complain_about_conda_env_vary  k    *733(14mmBC++X8K-K>)+.5.>? 	? 	? 	? 	? 	?r   zJ
variables:
  - CONDA_ENV_PATH
  - CONDA_DEFAULT_ENV
  - CONDA_PREFIX
    rG   r   s    r   /test_complain_about_conda_env_in_variables_listr#  x  sA    ? ? ? 4	! $ 		
 -. . . . .r   c                  :    d } t          t          di|            d S )Nc                 z    t          |           }|j        j        dz   dz   }|dz  |dz  |dz  g|j        k    sJ d S r  r   r  s      r   r   z[test_complain_about_conda_env_in_variables_dict.<locals>.check_complain_about_conda_env_var  r!  r   zP
variables:
  CONDA_ENV_PATH: {}
  CONDA_DEFAULT_ENV: {}
  CONDA_PREFIX: {}
    rG   r"  s    r   /test_complain_about_conda_env_in_variables_dictr&    sA    ? ? ? 4$ '	
 ./ / / / /r   c                  :    d } t          t          di|            d S )Nc                 z   t          |           }dt          |j                  k    sJ t          |j                  dk    sJ d|j        v sJ d|j        v sJ d|j        v sJ d|j        v sJ d|j        v sJ |j        dk    sJ |j        d         }|j        d         }|j        d         }|j        d         }|j        d         }|j        dk    sJ |j        d	k    sJ |j        d
k    sJ |j        dk    sJ |j	        |j
        fk    sJ |j        dk    sJ |j        dk    sJ |j        d
k    sJ |j        dk    sJ |j	        |j
        fk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j	        |fk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j	        ||fk    sJ |||||fD ]}t          j                            | d|j        z            }|                    |           t!          |          }	|	j	        d
k    sJ |	j        d
k    sJ |	j        |j        k    sJ |	j        |j        k    sJ |	j        |j        k    sJ |	j        |j        k    sJ d S )Nr      rf   r   	foo_childfoo_grandchildmixin)global1=1.0global2=1.0pythondogcatzebrazTHE FOOri   )	univision)r-  r.  )r-  bunnyz
walrus=1.0global2=2.0)bear)r3  r   )r.  r/  r1  r2  zdog=2.0global1=2.0lion)fish)r3  abc)	r/  r1  r2  r7  r8  r4  r5  z
walrus=2.0zdog=3.0)r9  r6  seahorse)r3  r:  r   nbczsaved-%s)r   r?   r#   r   r>   r   r+   r   r   inherit_fromglobal_base_env_specr%   r   r   r   save_environment_ymlr   inherit_from_names)
r&   r-   rf   r   r*  r+  r,  specsavedloadeds
             r   check_environmentsz2test_load_environments.<locals>.check_environments  s   *733C())))))7$%%****))))))))))g/////7#44444'+++++,5555&&%k2	 *+;<!'*!%ddddd)++++2%%%%|....G$@#CCCCC!%CCCCC%''''2%%%%|....G$@#CCCCC#'\\\\\!Z////~ "
 
 	
 	
 	

 $3333'+vvvvv%3333! &
 
 	
 	
 	
 %#0000)-===== , 1Y Y 	Y 	Y 	Y*.JJJJJ&*LLLLL*y%.@@@@@ #ui@ 
	4 
	4DGLL*ty*@AAE%%e,,,*511F&",,,,,2222;$)++++(D,?????&$*;;;;;?dm33333
	4 
	4r   a  
packages:
  - global1=1.0
  - global2=1.0
channels:
  - univision

env_specs:
  foo:
    description: "THE FOO"
    packages:
       - python
       - dog
       - cat
       - zebra
  bar: {}
  foo_child:
    inherit_from: foo
    packages:
       - dog=2.0
       - global1=2.0
       - lion
       - pip:
          - fish
    channels:
       - abc
  mixin:
    packages:
       - bunny
       - walrus=1.0
       - global2=2.0
       - pip:
         - bear
    channels:
       - hbo
  foo_grandchild:
    inherit_from: [foo_child, mixin]
    packages:
       - walrus=2.0
       - dog=3.0
       - pip:
         - seahorse
    channels:
       - nbc
    rG   rD  s    r   test_load_environmentsrF    sD    ?4 ?4 ?4B 4$,/	
^ a0 0 0 0 0r   c                  :    d } t          t          di|            d S )Nc                    t          |           }dt          |j                  k    sJ t          |j                  dk    sJ d|j        v sJ d|j        v sJ d|j        v sJ |j        dk    sJ |j        d         }|j        d         }|j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ |j        d	k    sJ |j        d
k    sJ |j        dk    sJ d S )Nr   rQ   rY   rf   r   )dead-parrotelephantr8  )rI  rJ  r/  r0  r1  r2  )rI  rJ  )r   cartoonsr   )r   )r   r?   r#   r   r>   r   r   )r&   r-   rY   rf   r   s        r   rD  zDtest_load_environments_merging_in_global.<locals>.check_environments  s>   *733C())))))7$%%****G-----)))))))))),	9999#I.&&%)LLLLL!%aaaaa!%@@@@@#66666|~----|y((((((r   a  
packages:
  - dead-parrot
  - elephant

channels:
  - mtv

env_specs:
  foo:
    packages:
       - python
       - dog
       - cat
       - zebra
    channels:
       - hbo
  bar: {}
  default:
    packages:
      - lion
    channels:
      - cartoons
    rG   rE  s    r   (test_load_environments_merging_in_globalrL    sA    ) ) )$ 4$	
4 7    r   c                  :    d } t          t          di|            d S )Nc                    t          |           }dt          |j                  k    sJ t          |j                  dk    sJ d|j        v sJ d|j        v sJ d|j        v sJ |j        dk    sJ |j        d         }|j        d         }|j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ d S )Nr   rQ   rf   r   rY   ri   )r   r?   r#   r   r>   r   )r&   r-   rf   r   rY   s        r   rD  z[test_load_environments_default_always_default_even_if_not_first.<locals>.check_environmentsC  s    *733C())))))7$%%****))))))))))G-----,	9999&&#I.!R''''!R''''%++++++r   z2
env_specs:
  foo: {}
  bar: {}
  default: {}
    rG   rE  s    r   ?test_load_environments_default_always_default_even_if_not_firstrO  B  sA    , , , 4	! $ 		
     r   c                  :    d } t          t          di|            d S )Nc                 v    t          |           }dt          |j                  k    sJ d|j        d         v  d S )Nr;   zEshould be a directory from environment name to environment attributesr   r
  r,   s     r   rD  zGtest_complain_about_environments_not_a_dict.<locals>.check_environments\  sF    *733C())))))OSZScdeSfffffr   z
env_specs: 42
    rG   rE  s    r   +test_complain_about_environments_not_a_dictrR  [  sC    g g g
 45M P 5	
    r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }d|j        j        z  g|j        k    sJ d S )Nz;%s: 'description' field of environment foo must be a stringr   r,   s     r   rD  zRtest_complain_about_non_string_environment_description.<locals>.check_environmentsg  sG    *733MQXQeQno %& 	& 	& 	& 	& 	&r   z-
env_specs:
   foo:
     description: []
    rG   rE  s    r   6test_complain_about_non_string_environment_descriptionrU  f  sA    & & &
 4	! $ 		     r   c                  :    d } t          t          di|            d S )Nc                 z    t          |           }dt          |j                  k    sJ d|j        d         v sJ d S )Nr;   z6inherit_from: value should be a list of env spec namesr   r
  r,   s     r   rD  zGtest_complain_about_non_string_inherit_from.<locals>.check_environmentsu  sK    *733C())))))G7K[\]K^^^^^^^r   z.
env_specs:
   foo:
     inherit_from: {}
    rG   rE  s    r   +test_complain_about_non_string_inherit_fromrX  t  sD    _ _ _
 4	! $ 		     r   c                  :    d } t          t          di|            d S )Nc                 v    t          |           }dt          |j                  k    sJ d|j        d         v  d S )Nr;   zshould be a string not '42'r   r
  r,   s     r   r   zLtest_complain_about_packages_list_of_wrong_thing.<locals>.check_get_packages  sD    *733C())))))%)9!)<<<<<r   z
packages:
    - 42
    rG   r   s    r   0test_complain_about_packages_list_of_wrong_thingr[    sB    = = =
 45M P 5	     r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }d|j        j        z  g|j        k    sJ d S )Nzb%s: name 'bar' in 'inherit_from' field of env spec foo does not match the name of another env specr   r,   s     r   rD  zRtest_complain_about_env_spec_inherits_from_nonexistent.<locals>.check_environments  sK    *733p!*,
  	 	 	 	 	r   z0
env_specs:
   foo:
      inherit_from: bar
    rG   rE  s    r   6test_complain_about_env_spec_inherits_from_nonexistentr^    sA       4	! $ 		     r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }d|j        j        z  g|j        k    sJ d S )NzU%s: 'inherit_from' fields create circular inheritance among these env specs: bar, foor   r,   s     r   rD  zFtest_complain_about_cycle_of_two_env_specs.<locals>.check_environments  sK    *733c!*,
  	 	 	 	 	r   zP
env_specs:
   foo:
      inherit_from: bar
   bar:
      inherit_from: foo
    rG   rE  s    r   *test_complain_about_cycle_of_two_env_specsra    sA       4$ '	
 	 	 	 	 	r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }d|j        j        z  g|j        k    sJ d S )NzZ%s: 'inherit_from' fields create circular inheritance among these env specs: a, b, c, d, er   r,   s     r   rD  zGtest_complain_about_cycle_of_many_env_specs.<locals>.check_environments  sK    *733h!*,
  	 	 	 	 	r   z
env_specs:
   a:
      inherit_from: b
   b:
      inherit_from: c
   c:
      inherit_from: d
   d:
      inherit_from: e
   e:
      inherit_from: a

    rG   rE  s    r   +test_complain_about_cycle_of_many_env_specsrd    sA       4$	
  #    r   c                  :    d } t          t          di|            d S )Nc                    t           j                            | t                    }t           j                            |          sJ t          |           }g |j        k    sJ |                    |j                  }dt          |          k    sJ t          |d         t                    sJ d|d         j        k    sJ t          |d         t                    sJ d|d         j        k    sJ t          |d         t                    sJ t          j                    }||d         j        k    sJ t!                      |d         j        k    sJ t          |j                  dk    sJ d S )NrQ   r   r:   r;   rR   r9   )r%   r   r   r   existsr   r#   r=   r>   r?   rj   r   r@   r   r   rB   r0   rA   r&   r(   r-   r=   rD   s        r   
check_filez<test_load_list_of_variables_requirements.<locals>.check_file  sg   7<<)ABBw~~h'''''*733W%%%%%++G,IJJC%%%%%%,q/+<=====Q/////,q/+<=====Q/////,q/+>?????!799Q 77777vva000007#$$))))))r   zvariables:
  - FOO
  - BAR
rG   ri  s    r   (test_load_list_of_variables_requirementsrk    s@    * * *& 45MOo4p4>@ @ @ @ @r   c                  :    d } t          t          di|            d S )Nc                 d   t           j                            | t                    }t           j                            |          sJ t          |           }g |j        k    sJ |                    |j                  }dt          |          k    sJ t          |d         t                    sJ d|d         j        k    sJ t          d          |d         j        k    sJ t          |d         t                    sJ d|d         j        k    sJ t          d          |d         j        k    sJ t          |d         t                    sJ t!          j                    }||d         j        k    sJ t                      |d         j        k    sJ t          |j                  dk    sJ d S )	NrQ   r   r:   r;   )arR   r9   )b)r%   r   r   r   rg  r   r#   r=   r>   r?   rj   r   r@   r0   rA   r   r   rB   rh  s        r   ri  z<test_load_dict_of_variables_requirements.<locals>.check_file  s   7<<)ABBw~~h'''''*733W%%%%%++G,IJJC%%%%%%,q/+<=====Q/////ayyyLO33333,q/+<=====Q/////ayyyLO33333,q/+>?????!799Q 77777vva000007#$$))))))r   z+variables:
  FOO: { a: 1 }
  BAR: { b: 2 }
rG   rj  s    r   (test_load_dict_of_variables_requirementsrp    s@    * * ** 4	!#STV`b b b b br   c                  :    d } t          t          di|            d S )Nc                    t           j                            | t                    }t           j                            |          sJ t          |           }dt          |j                  k    sJ |                    |j	                  }dt          |          k    sJ d|j        d         v sJ d|j        d         v sJ d S )Nr9   r   z42 is not a stringz43 is not a stringr;   
r%   r   r   r   rg  r   r?   r#   r=   r>   r&   r(   r-   r=   s       r   ri  z:test_non_string_variables_requirements.<locals>.check_file  s    7<<)ABBw~~h'''''*733C())))))++G,IJJC%%%%%%#w'7':::::#w'7':::::::r   zvariables:
  - 42
  - 43
rG   rj  s    r   &test_non_string_variables_requirementsru     s@    ; ; ; 45MOm4n4>@ @ @ @ @r   c                  :    d } t          t          di|            d S )Nc                 J   t           j                            | t                    }t           j                            |          sJ t          |           }|                    |j                  }g |k    sJ dt          |j	                  k    sJ d|j	        d         v sJ d S Nr;   zBdefault value for variable FOO must be null, a string, or a numberr   
r%   r   r   r   rg  r   r=   r>   r?   r#   rt  s       r   ri  z8test_variable_default_cannot_be_bool.<locals>.check_file      7<<)ABBw~~h'''''*733++G,IJJ\!!!!C())))))SW^WghiWjjjjjjjr   zvariables:
  FOO: true
rG   rj  s    r   $test_variable_default_cannot_be_boolr{    s4    k k k 45MOj4kmwxxxxxr   c                  :    d } t          t          di|            d S )Nc                 J   t           j                            | t                    }t           j                            |          sJ t          |           }|                    |j                  }g |k    sJ dt          |j	                  k    sJ d|j	        d         v sJ d S rx  ry  rt  s       r   ri  z8test_variable_default_cannot_be_list.<locals>.check_file  rz  r   zvariables:
  FOO: []
rG   rj  s    r   $test_variable_default_cannot_be_listr~    s4    k k k 45MOh4ikuvvvvvr   c                  :    d } t          t          di|            d S )Nc                 J   t           j                            | t                    }t           j                            |          sJ t          |           }|                    |j                  }g |k    sJ dt          |j	                  k    sJ d|j	        d         v sJ d S rx  ry  rt  s       r   r   z6test_variable_default_missing_key_field.<locals>.check*  rz  r   z9
variables:
  FOO:
    default: { encrypted: 'abcdefg' }
rG   r   s    r   'test_variable_default_missing_key_fieldr  )  sD    k k k 4	! $ 	     r   c                  :    d } t          t          di|            d S )Nc                 d   t           j                            | t                    }t           j                            |          sJ t          |           }dt          |j                  k    sJ |                    |j	                  }dt          |          k    sJ d|j        d         v sJ d S )Nr;   r   z.variables section contains wrong value type 42rs  rt  s       r   ri  z@test_variables_requirements_not_a_collection.<locals>.check_file<  s    7<<)ABBw~~h'''''*733C())))))++G,IJJC%%%%%%?7CSTUCVVVVVVVr   zvariables:
  42
rG   rj  s    r   ,test_variables_requirements_not_a_collectionr  ;  s4    W W W 45MOc4dfpqqqqqr   c                  :    d } t          t          di|            d S )Nc                    t          |           }|                    |j                  }dt          |          k    sJ dt          |j                  k    sJ d|j        d         v sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        |j	        j
        k    sJ |j                            d          sJ d S )Nr   r;   z$anaconda-project.yml: Syntax error: r9   	   Syntax error:)r   r=   r>   r?   r#   problem_objectsmaybe_line_numbermaybe_column_numbermaybe_filenamer'   r(   text_without_filename
startswithr&   r-   r=   problem1s       r   r   z2test_corrupted_project_file.<locals>.check_problemI  s    *733++G,IJJC%%%%%%C())))))59I!9LLLLL*1-)Q....+q0000&'*>*GGGGG-88IIIIIIIr   z
^
variables:
  FOO
r
   r   r   s    r   test_corrupted_project_filer  H  sD    J J J 5 8  	    r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|                    |j                  }dt          |          k    sJ dt          |j                  k    sJ d|j        d         v sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        |j	        j
        k    sJ |j                            d          sJ d S )Nr   r;   z)anaconda-project-lock.yml: Syntax error: r9   r)  r  )r   r=   r>   r?   r#   r  r  r  r  	lock_filer(   r  r  r  s       r   r   z7test_corrupted_project_lock_file.<locals>.check_problem^  s    *733++G,IJJC%%%%%%C()))))):g>Nq>QQQQQ*1-)Q....+q0000&'*;*DDDDD-88IIIIIIIr   z
^
stuff:
  FOO
r   r   r   s    r    test_corrupted_project_lock_filer  ]  sE    J J J 45R U 5 	    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        dd}||j        d         k    sJ d S )Nr;   zS: 'commands:' section should be a dictionary from command names to attributes, not *   r   r   r?   r#   r'   r)   r&   r-   expected_errors      r   check_app_entryz7test_non_dict_commands_section.<locals>.check_app_entrys  sd    *733C()))))) )))22/!1!!4444444r   zcommands:
  42
rG   r  s    r   test_non_dict_commands_sectionr  r  1    5 5 5 45MOb4cetuuuuur   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        dd}||j        d         k    sJ d S )Nr;   z^: 'services:' section should be a dictionary from environment variable to service type, found r  r   r  r  s      r   r  z7test_non_dict_services_section.<locals>.check_app_entry~  sg    *733C()))))):A:N:W:W:WY[Y[]!1!!4444444r   zservices:
  42
rG   r  s    r   test_non_dict_services_sectionr  }  r  r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        dddd}||j        d         k    sJ d S )Nr;   z: command name 'rY   z7' should be followed by a dictionary of attributes not r  r   r  r  s      r   r  z<test_non_string_as_value_of_command.<locals>.check_app_entry  sj    *733C()))))) )))999bb:!1!!4444444r   zcommands:
 default: 42
rG   r  s    r   #test_non_string_as_value_of_commandr    @    5 5 5 45MOj4k4CE E E E Er   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S Nr;   : command 'rY   $' does not have a command line in itr   r  r  s      r   r  z+test_empty_command.<locals>.check_app_entry  j    *733C())))))RYRfRoRoRoR[R[R[]!1!!4444444r   zcommands:
 default: {}
rG   r  s    r   test_empty_commandr    r  r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S r  r  r  s      r   r  z4test_command_with_bogus_key.<locals>.check_app_entry  r  r   z&commands:
 default:
    foobar: 'boo'
rG   r  s    r   test_command_with_bogus_keyr    s@    5 5 5 4	!#NOQ`b b b b br   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S )Nr;   z!: 'description' field of command rY   z must be a stringr   r  r  s      r   r   z7test_command_with_non_string_description.<locals>.check  sj    *733C())))))U\UiUrUrUrU^U^U^`!1!!4444444r   z:commands:
 default:
     unix: 'boo'
     description: []
rG   r   s    r   (test_command_with_non_string_descriptionr    s@    5 5 5 4	!#cdfkm m m m mr   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S )Nr;   z+: 'supports_http_options' field of command rY    must be a booleanr   r  r  s      r   r   zBtest_command_with_non_boolean_supports_http_options.<locals>.check  f    *733C()))))) )))9996!1!!4444444r   zHcommands:
 default:
     unix: 'boo'
     supports_http_options: 'blah'
rG   r   s    r   3test_command_with_non_boolean_supports_http_optionsr    s;    5 5 5 4	!#qr    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S )Nr;   z/: 'registers_fusion_function' field of command rY   r  r   r  r  s      r   r   zFtest_command_with_non_boolean_registers_fusion_function.<locals>.check  r  r   zLcommands:
 default:
     unix: 'boo'
     registers_fusion_function: 'blah'
rG   r   s    r   7test_command_with_non_boolean_registers_fusion_functionr    s;    5 5 5 4	!#uv    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ d|j        v sJ |j        d         }|j        ddik    sJ d S )NrY   registers_fusion_functionT)r   r#   commandsextrasr&   r-   commands      r   r   z'test_command_with_extras.<locals>.check  sc    *733W%%%%%G,,,,,"9-~"=t!DDDDDDDr   zJcommands:
 default:
     unix: 'boo'
     registers_fusion_function: true
rG   r   s    r   test_command_with_extrasr    s>    E E E 4	!#st    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ |j        }|j        dk    sJ |j        dk    sJ d S )Ntest.pyr}   )r   r#   default_command	bokeh_appr+   r  s      r   r   z3test_command_with_custom_description.<locals>.check  sY    *733W%%%%%) I----"d******r   zRcommands:
 default:
    bokeh_app: test.py
    description: hi
packages:
 - bokeh
rG   r   s    r   $test_command_with_custom_descriptionr    s?    + + + 4$f	
 	    r   c                  :    d } t          t          di|            d S )Nc                 d    t          |           }|j        j        ddd}|g|j        k    sJ d S )Nz: 'env_spec' field of command rY   z, must be a string (an environment spec name)r   r  s      r   r   z4test_command_with_non_string_env_spec.<locals>.check  H    *733 )))99967#3333333r   z7commands:
 default:
     unix: 'boo'
     env_spec: []
rG   r   s    r   %test_command_with_non_string_env_specr    s@    4 4 4 4	!#`achj j j j jr   c                  :    d } t          t          di|            d S )Nc                 d    t          |           }|j        j        ddd}|g|j        k    sJ d S )Nz: env_spec 'boo' for command 'rY   z*' does not appear in the env_specs sectionr   r  s      r   r   z5test_command_with_nonexistent_env_spec.<locals>.check  r  r   z8commands:
 default:
     unix: 'boo'
     env_spec: boo
rG   r   s    r   &test_command_with_nonexistent_env_specr    s@    4 4 4 4	!#abdik k k k kr   c                  :    d } t          t          di|            d S )Nc                     t          |           g d}t          t          fd|                    }|j        k    sJ d S )N)z;%s: 'description' field of command default must be a stringzY%s: env_spec 'nonexistent' for command 'default' does not appear in the env_specs sectionzR%s: command 'default' has multiple commands in it, 'notebook' can't go with 'unix'c                 "    | j         j        z  S r   r   )er-   s    r   rs   zHtest_command_with_many_problems_at_once.<locals>.check.<locals>.<lambda>  s    Q1E1N-N r   )r   listmapr#   )r&   expected_errorsr-   s     @r   r   z6test_command_with_many_problems_at_once.<locals>.check  s_    *733
 
 

 s#N#N#N#NP_``aa'"2222222r   zv
commands:
  default:
     unix: bar
     notebook: foo.ipynb
     env_spec: nonexistent
     description: []
        rG   r   s    r   'test_command_with_many_problems_at_oncer    sA    3 3 3 4$
	
     r   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ |j        }|j        dk    sJ |j        dk    sJ |j        J |j        J d S )NrY   r   )r   r#   r  r   unix_shell_commandlinewindows_cmd_commandlineconda_app_entryr  s      r   r  z?test_command_with_bogus_key_and_ok_key.<locals>.check_app_entry  sv    *733W%%%%%)|y((((-6666.666&.....r   z7commands:
 default:
    foobar: 'boo'

    unix: 'bar'
rG   r  s    r   &test_command_with_bogus_key_and_ok_keyr    s@    / / / 4	!#abdsu u u u ur   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}|j        j        ddd}||j        d         k    sJ ||j        d         k    sJ d S )Nr9   r  rf   r  r   r   r;   r  )r&   r-   expected_error_1expected_error_2s       r   r  z0test_two_empty_commands.<locals>.check_app_entry.  s    *733C())))))T[ThTqTqTqTYTYTY[T[ThTqTqTqTYTYTY[7#3A#666667#3A#6666666r   zcommands:
 foo: {}
 bar: {}
rG   r  s    r   test_two_empty_commandsr  -  s@    7 7 7 45MOp4q4CE E E E Er   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddddddd}||j        d	         k    sJ d S )
Nr;   r  rY   ' attribute 'r  ' should be a string not 'r  'r   r  r  s      r   r  zDtest_non_string_as_value_of_conda_app_entry.<locals>.check_app_entry=  sv    *733C()))))) )))9996G6G6GM!1!!4444444r   z,commands:
 default:
    conda_app_entry: 42
rG   r  s    r   +test_non_string_as_value_of_conda_app_entryr  <  s@    5 5 5 4	!#TUWfh h h h hr   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddddddd}||j        d	         k    sJ d S )
Nr;   r  rY   r  unixr  r  r  r   r  r  s      r   check_shell_non_dictz?test_non_string_as_value_of_shell.<locals>.check_shell_non_dictI  s|    *733C())))))ZaZnZwZwZwZcZcZcekekekmomomoq!1!!4444444r   z!commands:
 default:
    unix: 42
rG   )r  s    r   !test_non_string_as_value_of_shellr  H  s@    5 5 5 45MOu4v4HJ J J J Jr   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        du sJ |j        dk    sJ |j        J |j        J t          |           }|                    |ddg          }||j        dgk    sJ |j	        du sJ d S t          	NFtest {{port}}PROJECT_DIR--anaconda-project-port8888
extra_argsz	test 8888Tr   r  supports_http_optionsr  r  r  r   exec_info_for_environmentargsshellr   r&   r-   r  environcmd_execs        r   check_template_commandz:test_unix_template_command.<locals>.check_template_commandU  s    *733),5555-@@@@.666&...!g66644WJcekIl4mm 	=[M1111>T))))))Nr   Lcommands:
 default:
    unix: test {{port}}
    supports_http_options: falserG   r  s    r   test_unix_template_commandr  T  s;        4	!#tu         r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        du sJ |j        dk    sJ |j        J |j        J t          |           }|                    |g d          }||j        dgk    sJ |j	        du sJ d S t          NFr  r  )r  r  z--extra-arg-examplerf   r  z!test 8888 --extra-arg-example fooTr  r   s        r   r  zJtest_unix_template_command_with_extra_args.<locals>.check_template_commandk  s    *733),5555-@@@@.666&...!g66644 a a a 5 c c 	=%H$IIIII>T))))))Nr   r  rG   r  s    r   *test_unix_template_command_with_extra_argsr
  j  s;      " 4	!#tu         r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        du sJ |j        J |j        dk    sJ |j        J t          |           }|                    |ddg          }||j        dgk    sJ |j	        du sJ d S t          r  r  r   s        r   r  z=test_windows_template_command.<locals>.check_template_command  s    *733),5555-555./AAAA&...!g66644WJcekIl4mm 	=[M1111>T))))))Nr   Ocommands:
 default:
    windows: test {{port}}
    supports_http_options: falserG   r  s    r   test_windows_template_commandr    s?        4$`	
 "	# # # # #r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        du sJ |j        J |j        dk    sJ |j        J t          |           }|                    |g d          }||j        dgk    sJ |j	        du sJ d S t          r	  r  r   s        r   r  zMtest_windows_template_command_with_extra_args.<locals>.check_template_command  s    *733),5555-555./AAAA&...!g66644 a a a 5 c c 	=%H$IIIII>T))))))Nr   r  rG   r  s    r   -test_windows_template_command_with_extra_argsr    s?      " 4$`	
 "	# # # # #r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J t          |           }|                    |          }t          j	        
                    |d         |d         g          }t          d|          }|j        |t          j        
                    | d          dgk    sJ |j        du sJ d S )N
test.ipynbr  r  PATHjupyter-notebook/--NotebookApp.default_url=/notebooks/test.ipynbFr   r  notebookr  r  r  r   r  r%   pathsepr   r   r  r   r  r&   r-   r  r  r  r   jupyter_notebooks          r   check_notebook_commandz5test_notebook_command.<locals>.check_notebook_command  s    *733)<////-555.666&...!g66644W==z 6HII23EtLL}GLL,//1b!
 
 	
 	
 	
 ~&&&&&&r   -commands:
 default:
    notebook: test.ipynb
rG   )r  s    r   test_notebook_commandr    s@    ' ' '$ 4	!#UVXnp p p p pr   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J t          |           }|                    |ddg          }t          j	        
                    |d         |d         g          }t          d|          }|j        |t          j        
                    | d          d	ddgk    sJ |j        d
u sJ d S )Nr  r  rf   r   r  r  r  r  r  Fr  r  s          r   !check_notebook_command_extra_argszKtest_notebook_command_extra_args.<locals>.check_notebook_command_extra_args  s   *733)<////-555.666&...!g66644W%QV4XXz 6HII23EtLL}GLL,//1bdikp!
 
 	
 	
 	
 ~&&&&&&r   r  rG   )r"  s    r    test_notebook_command_extra_argsr#    s;    ' ' '$ 4	!#UV)+ + + + +r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        sJ t          |           }|                    |g d          }t          j
                            |d         |d         g          }t          d|          }|j        |t          j                            | d          dd	d
ddddddddgk    sJ |j        du sJ d S )Nr  r  )rf   r   --anaconda-project-url-prefixblahr  1234--anaconda-project-hostexample.com--anaconda-project-no-browser3--anaconda-project-iframe-hosts=foo1.com *.foo2.com--anaconda-project-use-xheaders--anaconda-project-address1.2.3.4r  r  r  r  r  --ipr/  zy--NotebookApp.tornado_settings={ 'headers': { 'Content-Security-Policy': "frame-ancestors 'self' foo1.com *.foo2.com" } }--no-browser--portr(  --NotebookApp.base_url=blahz!--NotebookApp.trust_xheaders=Truerf   r   Fr   r  r  r  r  r  r  r   r  r%   r  r   r   r  r   r  r  s          r   r   z;test_notebook_command_with_project_http_args.<locals>.check  sJ   *733)<////-555.666&...,,,,!g66644WA7 A7 A7 5 8 8 z 6HII23EtLL}GLL,//1bdjlumHf.KMprw!
 
 	
 	
 	
 ~&&&&&&r   r  rG   r   s    r   ,test_notebook_command_with_project_http_argsr5    sA    ' ' '@ 4	!#UVX]_ _ _ _ _r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        rJ t          |           }|                    |g d          }t          j
                            |d         |d         g          }t          d|          }|j        |t          j                            | d          dd	gk    sJ |j        d
u sJ d S )Nr  r  )rf   r   r&  r'  r  r(  r)  r*  r+  r-  r.  r/  r  r  r  r  rf   r   Fr4  r  s          r   r   z?test_notebook_command_disabled_project_http_args.<locals>.check  s!   *733)<////-555.666&...0000!g66644WA7 A7 A7 5 8 8 z 6HII23EtLL}!127<<3V3VX]_d eeeee~&&&&&&r   zNcommands:
 default:
    notebook: test.ipynb
    supports_http_options: false
rG   r   s    r   0test_notebook_command_disabled_project_http_argsr8    s?    ' ' '0 4$`	
 	    r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        sJ t          |           }|                    |g d          }t          j
                            |d         |d         g          }t          d|          }|j        |t          j                            | d          dd	d
dddddddddgk    sJ |j        du sJ d S )Nr  r  )--rf   r   r&  r'  r  r(  r)  r*  r+  r-  r  r  r  r  r  r;  rf   r   r&  r'  r  r(  r)  r*  r+  r-  Fr4  r  s          r   r   zJtest_notebook_command_project_http_args_after_double_hyphen.<locals>.check'  sK   *733)<////-555.666&...,,,,!g66644WA7 A7 A7 5 8 8 z 6HII23EtLL}GLL,//1bdhjoqv+V5NPVXq:<]	!
 
 	
 	
 	
 ~&&&&&&r   r  rG   r   s    r   ;test_notebook_command_project_http_args_after_double_hyphenr<  &  s@    ' ' '8 4	!#UVX]_ _ _ _ _r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J t          |           }|                    |g d          }t          j	        
                    |d         |d         g          }t          d|          }|j        |t          j        
                    | d          dd	d
ddddddgk    sJ |j        du sJ d S )Nr  r  )rf   r   z"--anaconda-project-url-prefix=blahz--anaconda-project-port=1234z#--anaconda-project-host=example.comr+  z"--anaconda-project-address=1.2.3.4r  r  r  r  r  r0  r/  r1  r2  r(  r3  rf   r   Fr  r  s          r   r   zOtest_notebook_command_with_project_http_args_separated_by_equals.<locals>.checkH  s1   *733)<////-555.666&...!g66644WA7 A7 A7 5 8 8 z 6HII23EtLL}GLL,//1bdjluHf.KUTY!
 
 	
 	
 	

 ~&&&&&&r   r  rG   r   s    r   @test_notebook_command_with_project_http_args_separated_by_equalsr?  G  @    ' ' '4 4	!#UVX]_ _ _ _ _r   c                  N    d } t          t          dddddddddddi|            d S )	Nc                    t          |           }d|j        j        z  g|j        k    sJ |j        d                             |           |j                                         d|j        v sJ d|j        v sJ t          |j                  dk    sJ |j	        j
        dk    sJ |j        d         }|j        dk    sJ |j        J |j        J |j        J t          j                            | d          }t%          |           }|                    |          }t          j                            |d         |d         g          }t+          d	|          }|j        ||d
gk    sJ |j        du sJ d S )N'%s: No command runs notebook test.ipynbr   r  rY   r9   r  r  r  r  r  F)r   r'   r)   suggestionssuggestion_objectsfixr   r  r?   r  r   r  r  r  r  r%   r   r   r   r  r  r   r  r  )r&   r-   r  expected_nb_pathr  r  r   r  s           r   check_notebook_guess_commandzAtest_notebook_guess_command.<locals>.check_notebook_guess_commandg  s   *7339G<P<YYZ^e^qqqqq"1%))'222!!###w/////G,,,,,7#$$))))&+y8888"<0<////-555.666&...7<<>>!g66644W==z 6HII23EtLL}!13CEv wwwww~&&&&&&r   `commands:
 default:
    unix: echo 'pass'
services:
    REDIS_URL: redis
packages: ['notebook']
r  {}envs/should_ignore_this.ipynb!services/should_ignore_this.ipynb.should_ignore_dotfile.ipynb.should_ignore_dotdir/foo.ipynbrG   )rH  s    r   test_notebook_guess_commandrO  f  sX    ' ' '6 4$t$+T/*D-t	
 (	) 	) 	) 	) 	)r   c                  R    d } t          t          dddddddddddd	di|            d S )
Nc                    t          |           }d|j        j        z  g|j        k    sJ |j        d                             |           |j                                         g |j        k    sJ t          |j	                  dk    sJ |j
        J |j
        j        dk    sJ g dt          d |j	        D                       k    sJ d S )NzT%s: No commands run notebooks a.ipynb, b.ipynb, c.ipynb, d/d.ipynb, e.ipynb, f.ipynbr      a.ipynb)rS  b.ipynbc.ipynb	d/d.ipynbe.ipynbf.ipynbc                     g | ]}|S ri   ri   )rl   cs     r   rn   zstest_notebook_guess_command_can_be_default.<locals>.check_notebook_guess_command_can_be_default.<locals>.<listcomp>  s    %B%B%BAa%B%B%Br   )r   r'   r)   rD  rE  rF  r   r#   r?   r  r  r  ry   r,   s     r   +check_notebook_guess_command_can_be_defaultz_test_notebook_guess_command_can_be_default.<locals>.check_notebook_guess_command_can_be_default  s   *733 c )*
  ! 	! 	! 	!
 	"1%))'222!!###W%%%%%7#$$))))&222&/9<<<<  $%B%B1A%B%B%BCCD 	D 	D 	D 	D 	Dr   zpackages: ['notebook']
rS  rJ  rT  rU  rV  rW  rX  rG   )r[  s    r   *test_notebook_guess_command_can_be_defaultr\    sb    D D D$ 4$&@ ttttt
	
 	45 5 5 5 5r   c                 @      fd}t          t          di|           d S )Nc                 l   t          |           }|j        }|j        dk    sJ t          |           }d }                    d|           |                    |          }d|j        d         v sJ |j        dd          t          j        	                    | d          dgk    sJ |j
        d	u sJ d S )
Nr  r  c                      d S r   ri   )r  kwargss     r   mock_find_executablezgtest_notebook_command_jupyter_not_on_path.<locals>.check_notebook_command.<locals>.mock_find_executable  s    4r   zdistutils.spawn.find_executabler  r   r;   r  F)r   r  r  r   r   r  r  r%   r   r   r  )r&   r-   r  r  ra  r  r   s         r   r  zItest_notebook_command_jupyter_not_on_path.<locals>.check_notebook_command  s    *733)<////!g666	 	 	 	=?STTT44W==!X]1%55555}QRR GLL,//1b%
 
 	
 	
 	
 ~&&&&&&r   r  rG   )r   r  s   ` r   )test_notebook_command_jupyter_not_on_pathrb    sK    ' ' ' ' '& 4	!#UVXnp p p p pr   c                  R    d } t          t          dddddddddd	d
ddi|            d S )Nc                    t          |           }d|j        j        z  g|j        k    sJ |j        d                             |           |j                                         d|j        vsJ d|j        vsJ d|j        v sJ t          |j                  dk    sJ |j	        j
        dk    sJ |j        g k    sJ ddg|j                            ddg          k    sJ d S )	Nz9%s: No commands run notebooks foo/test2.ipynb, test.ipynbr   r  foo/test2.ipynbrY   r;   skip_imports	notebooksr   r'   r)   rD  rE  no_fixr   r  r?   r  r   	get_valuer,   s     r   r   z:test_multiple_notebooks_suggestion_rejected.<locals>.check  s(   *733KgNbNkk () 	) 	) 	) 	"1%,,W555!!###7#33333 (88888G,,,,,7#$$))))&+y8888 "b((((!<0G4H4R4RTbdoSp4q4qqqqqqqr   rI  r  rJ  re  rK  "pretend this is more notebook datarL  rM  moar fake notebookrN  still moar fake notebookrG   r   s    r   +test_multiple_notebooks_suggestion_rejectedrn    sd    r r r( 4$t$t+-Q/1U*,@-/I		
 
 
 
 
 
r   c                  >    d } t          t          dddi|            d S )Nc                    t          |           }g |j        k    sJ d|j        j        z  g|j        k    sJ |j                            ddgd           |j                                         g |j        k    sJ g |j        k    sJ d S )NrC  rf  rg  T)r   r#   r'   r)   rD  r   r   r,   s     r   r   z-test_skip_all_notebook_imports.<locals>.check  s    *733W%%%%%9G<P<YYZ^e^qqqqq&&'DdKKK!!###W(((((W%%%%%%%r   rI  r  rJ  rG   r   s    r   test_skip_all_notebook_importsrq    sD    
& 
& 
& 4$t$	
     r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ d|j        d         v sJ g |j        k    sJ d S )Nr;   z1'skip_imports: notebooks:' value should be a listr   )r   r?   r#   rD  r,   s     r   r   z2test_invalid_skip_imports_notebooks.<locals>.check  s_    *733C())))))BgFVWXFYYYYYW(((((((r   z|commands:
 default:
    unix: echo 'pass'
services:
  REDIS_URL: redis
packages: ['notebook']
skip_imports:
  notebooks: {}
rG   r   s    r   #test_invalid_skip_imports_notebooksrt    sB    ) ) ) 4$ (v	
 	    r   c                  N    d } t          t          ddddddddd	d
di|            d S )Nc                    t          |           }d|j        j        z  g|j        k    sJ |j        d                             |           |j                                         d|j        vsJ d|j        v sJ t          |j                  dk    sJ |j	        j
        dk    sJ |j        g k    sJ dg|j                            ddg          k    sJ d S )NrC  r   r  rY   r;   rf  rg  rh  r,   s     r   r   z7test_single_notebook_suggestion_rejected.<locals>.check  s   *7339G<P<YYZ^e^qqqqq"1%,,W555!!###7#33333G,,,,,7#$$))))&+y8888 "b((((~!5!?!?Q\@]!^!^^^^^^^r   rI  r  rJ  rK  rk  rL  rM  rl  rN  rm  rG   r   s    r   (test_single_notebook_suggestion_rejectedrw    s_    _ _ _$ 4$t$+-Q/1U*,@-/I	
 	 	 	 	 	r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S )Nr;   r  rY   z>' has multiple commands in it, 'notebook' can't go with 'unix'r   r  r  s      r   check_notebook_conflict_commandzGtest_notebook_command_conflict.<locals>.check_notebook_conflict_command/  r  r   zBcommands:
 default:
    notebook: test.ipynb
    unix: echo 'pass'rG   )rz  s    r   test_notebook_command_conflictr{  .  s;    5 5 5 4	!#jk') ) ) ) )r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dt          |j                  k    sJ |j        j        ddd}||j        d         k    sJ d S )Nr;   r  rY   z?' has multiple commands in it, 'bokeh_app' can't go with 'unix'r   r  r  s      r   check_bokeh_conflict_commandzAtest_bokeh_command_conflict.<locals>.check_bokeh_conflict_command<  r  r   z?commands:
 default:
    bokeh_app: app.py
    unix: echo 'pass'rG   )r~  s    r   test_bokeh_command_conflictr  ;  s;    5 5 5 4	!#gh$& & & & &r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        J t          |           }|                    |          }t          j
                            |d         |d         g          }t          d|          }|j        |dt          j                            | d          dgk    sJ |j        du sJ d S )	Nr  r  r  r  bokehserve--showF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   check_bokeh_commandz/test_bokeh_command.<locals>.check_bokeh_commandI  s    *733) I----'''-555.666&...!g66644W==z 6HII'66}gy1Q1QS[ \\\\\~&&&&&&r   +commands:
 default:
    bokeh_app: test.py
rG   )r  s    r   test_bokeh_commandr  H  s@    ' ' '  4	!#STVik k k k kr   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        J t          |           }|                    |dg          }t          j
                            |d         |d         g          }t          d|          }|j        |dt          j                            | d          d	dgk    sJ |j        d
u sJ d S )Nr  r  --foor  r  r  r  r  r  Fr  r  s          r   check_bokeh_command_extra_argszJtest_bokeh_command_with_extra_args.<locals>.check_bokeh_command_extra_args^  s
   *733) I----'''-555.666&...!g66644W'4SSz 6HII'66}gy1Q1QS[]d eeeee~&&&&&&r   r  rG   )r  s    r   "test_bokeh_command_with_extra_argsr  ]  s@    ' ' '  4	!#STVtv v v v vr   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        J |j        sJ t          |           }|	                    |g d          }t          j                            |d         |d         g          }t          d|          }|j        |dt          j                            | d          d	d
ddddddddgk    sJ |j        du sJ d S )Nr  r  )r  r&  r'  r  r(  r)  r*  r+  r,  r-  r.  r/  r  r  r  r  r  	--addressr/  --hostr*  r2  r(  --prefixr'  z--use-xheadersr  Fr   r  r  r  r  r  r  r  r   r  r%   r  r   r   r  r   r  r  s          r   r   z8test_bokeh_command_with_project_http_args.<locals>.checks  sP   *733) I----'''-555.666&...,,,,!g66644WA7 A7 A7 5 8 8 z 6HII'66}7GLL),,k9hP]_gio 0'!
 
 	
 	
 	

 ~&&&&&&r   r  rG   r   s    r   )test_bokeh_command_with_project_http_argsr  r  s@    ' ' ': 4	!#STV[] ] ] ] ]r   c                  :    d } t          t          di|            d S )Nc           	         t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        J |j        sJ t          |           }|	                    |g d          }t          j                            |d         |d         g          }t          d|          }|j        |dt          j                            | d          d	d
d	ddgk    sJ |j        du sJ d S )Nr  r  )r)  r*  r)  example2.comr  r  r  r  r  r  r*  r  r  Fr  r  s          r   r   z9test_bokeh_command_with_multiple_host_args.<locals>.check  s;   *733) I----'''-555.666&...,,,,!g66644 u u u 5 w wz 6HII'66}7GLL),,hxQ_ai!
 
 	
 	
 	
 ~&&&&&&r   r  rG   r   s    r   *test_bokeh_command_with_multiple_host_argsr    s@    ' ' '* 4	!#STV[] ] ] ] ]r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        J |j        dk    sJ |j        J |j        J |j        J |j        sJ t          |           }|	                    |g d          }t          j                            |d         |d         g          }t          d|          }|j        |t          j                            | d          dd	gk    sJ |j        d
u sJ d S )Nr  r  )--anaconda-project-iframe-hostsr*  r  zfoo1.com *.foo2.comr  r  r  r  r  z--NotebookApp.tornado_settings={ 'headers': { 'Content-Security-Policy': "frame-ancestors 'self' example.com foo1.com *.foo2.com" } }Fr  )r&   r-   r  r  r  r   jupyters          r   r   zAtest_bokeh_command_with_multiple_iframe_hosts_args.<locals>.check  s?   *733) (((<////-555.666&...,,,,!g66644WA7 A7 A7 5 8 8
 z 6HII)*<dCC}GLL,//1by!
 
 	
 	
 	
 ~&&&&&&r   r  rG   r   s    r   2test_bokeh_command_with_multiple_iframe_hosts_argsr    r@  r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        J |j        sJ t          |           }|	                    |g d          }t          j                            |d         |d         g          }t          d|          }|j        |dt          j                            | d          d	d
dd
ddd
dd
dgk    sJ |j        du sJ d S )Nr  r  )r  r&  r  r)  r.  r  r  r  r  r  r  r"   r  r  r2  r  r  Fr  r  s          r   r   zJtest_bokeh_command_with_value_missing_for_project_http_args.<locals>.check  sP   *733) I----'''-555.666&...,,,,!g66644WA7 A7 A7 5 8 8 z 6HII'66}7GLL),,k2xXW_aceoqs!
 
 	
 	
 	

 ~&&&&&&r   r  rG   r   s    r   ;test_bokeh_command_with_value_missing_for_project_http_argsr    s@    ' ' '4 4	!#STV[] ] ] ] ]r   c                  :    d } t          t          di|            d S )Nc                    t          |           }|j        }|j        dk    sJ |j        J |j        J |j        J |j        J |j        rJ t          |           }|	                    |g d          }t          j                            |d         |d         g          }t          d|          }|j        |dt          j                            | d          d	gk    sJ |j        d
u sJ d S )Nr  r  )	r  r&  r'  r  r(  r)  r*  r+  r-  r  r  r  r  r  r  Fr  r  s          r   r   zAtest_bokeh_command_with_disabled_project_http_args.<locals>.check  s,   *733) I----'''-555.666&...0000!g66644WA7 A7 A7 5 8 8 z 6HII'66}gy1Q1QSZ [[[[[~&&&&&&r   zLcommands:
 default:
    bokeh_app: test.py
    supports_http_options: false
rG   r   s    r   2test_bokeh_command_with_disabled_project_http_argsr    s;    ' ' '. 4	!#uv    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ |j        }|j        dk    sJ |j        dk    sJ dt          |j                  k    sJ d|j        v sJ |j        d         |u sJ d S Nrf   zfoo bar ${PREFIX}r;   )r   r#   r  r   r  r?   r  r  s      r   check_run_argvzAtest_run_argv_from_project_file_app_entry.<locals>.check_run_argv
  s    *733W%%%%%)|u$$$$&*=====C())))))(((((&'111111r   z9
commands:
  foo:
    conda_app_entry: foo bar ${PREFIX}
rG   r  s    r   )test_run_argv_from_project_file_app_entryr  	  A    	2 	2 	2 4	! $ 	     r   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ |j        }|j        dk    sJ |j        dk    sJ dt          |j                  k    sJ d|j        v sJ |j        d         |u sJ d S r  )r   r#   r  r   r  r?   r  r  s      r   r  z=test_run_argv_from_project_file_shell.<locals>.check_run_argv  s    *733W%%%%%)|u$$$$-1DDDDDC())))))(((((&'111111r   z.
commands:
  foo:
    unix: foo bar ${PREFIX}
rG   r  s    r   %test_run_argv_from_project_file_shellr    r  r   c                 @      fd}t          t          di|           d S )Nc                    t          |           }g |j        k    sJ |j        }|j        dk    sJ |j        dk    sJ |j        J dt          |j                  k    sJ d|j        v sJ |j        d         |u sJ d }                    d|           t          |           }|
                    |          }|j        sJ d S )Nrf   zfoo bar %CONDA_DEFAULT_ENV%r;   c                      dS )NWindowsri   ri   r   r   mock_platform_systemz]test_run_argv_from_project_file_windows.<locals>.check_run_argv.<locals>.mock_platform_system>  s    9r   zplatform.systemr  )r   r#   r  r   r  r  r?   r  r   r   !default_exec_info_for_environmentr  )r&   r-   r  r  r  	exec_infor   s         r   r  z?test_run_argv_from_project_file_windows.<locals>.check_run_argv2  s   *733W%%%%%)|u$$$$.2OOOOO-555C())))))(((((&'1111	 	 	 	-/CDDD!g666==gFF	r   z;
commands:
  foo:
    windows: foo bar %CONDA_DEFAULT_ENV%
rG   )r   r  s   ` r   'test_run_argv_from_project_file_windowsr  1  sL        , 4	! $ 	     r   c                  :    d } t          t          di|            d S )Nc                     t          |           }g |j        k    sJ |j        }|J t          |           }|                    |          }|J d S )Nr  )r   r#   r  r   r  r&   r-   r  r  r  s        r   check_exec_infoz@test_exec_info_is_none_when_no_commands.<locals>.check_exec_infoQ  sl    *733W%%%%%)!g666==gFF	     r   
rG   )r  s    r   'test_exec_info_is_none_when_no_commandsr  P  s@    	! 	! 	! 45M P 5    r   c                  v    d } dd l }d} |j                    dk    rd}t          t          d|z  i|            d S )Nc                     t          |           }g |j        k    sJ |j        }|J |j        dk    sJ t	          |           }|                    |          }|J d S )Nrf   r  )r   r#   r  r   r   r  r  s        r   r  zQtest_exec_info_is_none_when_command_not_for_our_platform.<locals>.check_exec_infoa  s    *733W%%%%%)"""|u$$$$!g666==gFF	     r   r   windowsr  r  z
commands:
  foo:
    %s: foo
)platformsystemr   r   )r  r  not_uss      r   8test_exec_info_is_none_when_command_not_for_our_platformr  `  su    
! 
! 
! OOOFxI% 3	! $ 	$ 	          r   Fc                     t          di  pi  |rt          j                    nd}t          j                    dk    rddz   }d                    |          }d}nddz   }d	|z  }d
}|sd}}@d                    ddgpg z             }t          j        t          j	                  dz   |z   |d|d|d}	t          d|	z             t          dz             t          dt          j                    z             t          dt          j	                            d          z              fd}
t          t          d|	z  ddddi|
           d S )NPREFIXr  echo_stuff.batz%PROJECT_DIR%\\z%{}%r  zecho_stuff.shz${PROJECT_DIR}/z${%s}r  r   rf   r   z: "z	 foo bar"zYAML command line: %szExpected output: %szCurrent directory: %szPath: %sr  c                 t   dvr| d<   t          j        t           j                            | 
          t          j        t          j        z  t          j        z             d }	r't          j                    }t          j	        |            	 t          |           }g |j        k    sJ |                              }|j        r|j        d         }n|j        }t          dt!          |          z             t          dt#          |j                  z             t%          j        ||j                                                  }t          d|                                z             |                                                    |           k    sJ 	 |5t          d	|d
| t.          j                   t          j	        |           t           j                            | d          }d}t          d|dt!          t           j                            |                    t.          j                   t          d|dt          j        |                     t          d| dt          j        |                      |dk    rt           j                            |          r	 t          d|z  t.          j                   t          j        |           t          d|z  t.          j                   t          d|dt!          t           j                            |                    t.          j                   	 t          d|dt          j        |                     n# t6          $ r t          d           Y nw xY w	 t          d| dt          j        |           t.          j                   nn# t6          $ r Y nbw xY w# t6          $ rQ}t          d|dt#          |          t.          j                   t;          j        d           |dz
  }Y d }~nd }~ww xY w|dk    r&t           j                            |          d S d S d S d S # |5t          d	|d
| t.          j                   t          j	        |           t           j                            | d          }d}t          d|dt!          t           j                            |                    t.          j                   t          d|dt          j        |                     t          d| dt          j        |                      |dk    rt           j                            |          r	 t          d|z  t.          j                   t          j        |           t          d|z  t.          j                   t          d|dt!          t           j                            |                    t.          j                   	 t          d|dt          j        |                     n# t6          $ r t          d           Y nw xY w	 t          d| dt          j        |           t.          j                   nn# t6          $ r Y nbw xY w# t6          $ rQ}t          d|dt#          |          t.          j                   t;          j        d           |dz
  }Y d }~nd }~ww xY w|dk    r t           j                            |          w xY w)Nr  r  r   zCommand args: %szUsing shell: %s)r  r   zActual output: %sr   zChanging back to z from )filer  rR  zos.path.exists(z) = zbefore remove, os.stat(zAttempting to remove %sz#os.remove did not throw removing %szafter remove, os.path.exists(zafter remove, os.stat(z'after remove, could not stat the scriptzafter remove, files in r   zFailed to remove r;   )r%   chmodr   r   statS_IRUSRS_IWUSRS_IXUSRgetcwdchdirr   r#   r  r  r  r   reprstr
subprocesscheck_outputdecodestripformatsysstderrrg  remove	Exceptionlistdirtimesleep)r&   old_dirr-   r  r  output	batscriptattemptsr  r  
echo_stuffr  expected_outputr  s            r   check_echo_outputz4_run_argv_for_environment.<locals>.check_echo_output  sy   ' 	-%,GM"
gz22DL4<4ORVR^4^___ 	ikkGHW.	.w77G)))))AA'V`AaaI & ~a( ~$tDzz1222#c)/&:&::;;;,TgVVV]]__F%6777<<>>_%;%;G%;%L%LLLLLL "wwwHszZZZZ!!! W.>??IHEyyy$rw~~i?X?X:Y:Y:YZadakllllEyyy"')BTBTBTUVVVEwww@P@P@PQRRRQ, 27>>)#<#< 3yA
SSSSIi((( ?9MTWT^____EYYYPTUWU\UcUcdmUnUnPoPoPop"z+ + + +I)))RWU^M_M_M_`aaaa$ I I IGHHHHHI"*U\J]J]J]^eheoppppp$    ! , , ,Eyyy#a&&&IPSPZ[[[[JqMMM'!|HHHHHH,	 Q, 27>>)#<#<           "wwwHszZZZZ!!! W.>??IHEyyy$rw~~i?X?X:Y:Y:YZadakllllEyyy"')BTBTBTUVVVEwww@P@P@PQRRRQ, 27>>)#<#< 3yA
SSSSIi((( ?9MTWT^____EYYYPTUWU\UcUcdmUnUnPoPoPop"z+ + + +I)))RWU^M_M_M_`aaaa$ I I IGHHHHHI"*U\J]J]J]^eheoppppp$    ! , , ,Eyyy#a&&&IPSPZ[[[[JqMMM'!|HHHHHH,	 Q, 27>>)#<#<     s   DQ/ ;2O# 'M? ?NN3O 
O O #
P>-AP99P>/D\7
2Z2<A)\7&'Y\7Y*'\7)Y**\7.3Z"!\7"
Z/,\7.Z//\72
\<A\\7\*\7z
commands:
  default:
    %s
z#!/bin/sh
echo "$*"
z
@echo off
echo %*
ri   )r   r   rB   r  r  r  r   environ_get_prefixr%   r  r   r  rp   r   r   )r  r  r  os_specificr  
prefix_var	echo_pathcommand_namer  command_liner  r  s   ``` `      @r   _run_argv_for_environmentr  y  s   00B00G6AO0222xJI% 	%
'*4	]]:..
 $
%
2	z)
 (	 Pxx**:;<<#6rzBBSH4O,8LL)))ZZZPL	
!L
0111	
/
1222	
!BIKK
/000	*rz~~f--
-...6 6 6 6 6 6 6 6 6p 4$ ' 	'
    	
     r   c                  Z    t          j                    dk    rt          dg            d S d S )Nr  Fr  r  r  r  r  ri   r   r   test_run_command_in_project_dirr    s=    I% D!eCCCCCCD Dr   c                  \    t          j                    dk    rt          ddg           d S d S )Nr  Fbazr  r  ri   r   r   *test_run_command_in_project_dir_extra_argsr    s?    I% I!eHHHHHHI Ir   c                 (    t          dg            d S )NTr  r  r   s    r   +test_run_command_in_project_dir_os_specificr    s    $2>>>>>>r   c                 *    t          ddg           d S )NTr  r  r  r  s    r   6test_run_command_in_project_dir_os_specific_extra_argsr    s    $E7CCCCCCr   c                  *    t          dg d           d S )NT)r  r  r  r  ri   r   r   Btest_run_command_in_project_dir_os_specific_and_cwd_is_project_dirr    s    $2TJJJJJJr   c                  J    t          t          ddd          dd           d S )Nz
/someplace)r  r  r  z/someplace foo barT)r  )r  r0   ri   r   r   :test_run_command_in_project_dir_os_specific_with_conda_envr    sG    d2>5AC C C 3*.	0 0 0 0 0 0r   c                  :    d } t          t          di|            d S )Nc                 0   t          |           }t          |           }g |j        k    sJ |                    |          }t	          j        |j        |j        t          j                  	                                }|
                    d          sJ d S )Nr  )r  r  Python)r   r   r#   r  r  r  r  r  STDOUTr  r  )r&   r  r-   r  r  s        r   check_python_version_outputzGtest_run_command_is_on_system_path.<locals>.check_python_version_output  s    !g666*733W%%%%%==gFF	(yWaWhiiipprr  *******r   z<
commands:
  default:
    conda_app_entry: python --version
rG   )r  s    r   "test_run_command_is_on_system_pathr    sA    + + + 4	! $ 	 "# # # # #r   c                  :    d } t          t          di|            d S )Nc                    dd l }t          |           }t          |           }g |j        k    sJ |                    |          }|j        d         dk    sJ 	 | n# t          $ r
 t          }Y nw xY wt          j	        |          5 }t          j        |j        t          j        |j                                                   d d d            n# 1 swxY w Y   |j        j         |j        k    sJ d S )Nr   r  zthis-command-does-not-exist)r  r  )errnor   r   r#   r  r  	NameErrorr   pytestraisesr  r  r  r  r  valueENOENT)r&   r  r  r-   r  FileNotFoundErrorexcinfos          r   check_error_on_nonexistent_pathzHtest_run_command_does_not_exist.<locals>.check_error_on_nonexistent_path	  s]   !g666*733W%%%%%==gFF	~a $AAAAA	( 	( 	( 	( '	( ],-- 	n#IN:;LT]Tcdddkkmmm	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n 	n}"el222222s$   A A10A1>CCCzG
commands:
  default:
    conda_app_entry: this-command-does-not-exist
rG   )r  s    r   test_run_command_does_not_existr  	  sA    3 3 3  4	! $ 	 &' ' ' ' 'r   c                  :    d } t          t          di|            d S )Nc                 z   t          |           }g |j        k    sJ t          |           }t          j                    }d|dfD ]u}t          |          }||= t          j        t                    5 }|	                    |           d d d            n# 1 swxY w Y   d|z  t          |j                  v sJ vd S )Nr  r  r  z%s must be set)r   r#   r   r   rB   r   r  r	  
ValueErrorr  r  r
  )r&   r-   r  	conda_varrt   environ_copyr  s          r   check_run_with_stuff_missingzUtest_run_command_stuff_missing_from_environment.<locals>.check_run_with_stuff_missing(	  s#   *733W%%%%%!g666355	I}5 	C 	CC#G,,LS!z** Hg99,GGGH H H H H H H H H H H H H H H$s*tGM/B/BBBBBB	C 	Cs   2BB	B	z/
commands:
  default:
    conda_app_entry: foo
rG   )r  s    r   /test_run_command_stuff_missing_from_environmentr  '	  sD    
C 
C 
C 4	! $ 	 #$ $ $ $ $r   c                  :    d } t          t          di|            d S )Nc                     t          |           }t          j                            |           t          j                            |           dt          i dg g ddg i i i did}||                                k    sJ d S )Nr"   rY   DefaultF)r   packagesr+   locked	platforms	variables	downloadsservicesr   r*   r+   anaconda_project_versionr  r   )r   r%   r   r)   versionpublication_infor&   r-   expecteds      r   !check_publication_info_from_emptyzWtest_get_publication_info_from_empty_project.<locals>.check_publication_info_from_empty=	  s    *733G$$W--!#!1!1'!:!:(/ " "#,#!#!#!# "	 	
 
& 73355555555r   z6
env_specs:
  default:
    description: "Default"
    r  )r&  s    r   ,test_get_publication_info_from_empty_projectr'  <	  sA    6 6 6. 5 8 	 ,	- - - - -r   a+  
name: foo bar
description: "A very complicated project."

commands:
  foo:
    unix: echo hi
    description: "say hi"
    supports_http_options: true
  bar:
    windows: echo boo
    env_spec: lol
  baz:
    conda_app_entry: echo blah
  myapp:
    bokeh_app: main.py
    env_spec: woot
  foo.ipynb:
    description: 'Notebook foo.ipynb'
    notebook: foo.ipynb
    registers_fusion_function: true

packages:
  - foo

channels:
  - bar

env_specs:
  default:
    description: "Default"
    packages:
      - notebook
  woot:
    packages:
      - blah
      - bokeh
    channels:
      - woohoo
  w00t:
    description: "double 0"
    packages:
      - something
  lol: {}

downloads:
  FOO: https://example.com/blah

services:
  REDIS_URL: redis

variables:
  SOMETHING: {}
  SOMETHING_ELSE:
     default: 42
c                  L    d } t          t          t          ddddi|            d S )Nc                 2   t          |           }dddt          ddddddd	dd
ddd	ddddddddddd	dddddgddgddg dddddddidd d!d"dd#d$d%d&d'd(d(d)d*dd+id,dgdgddg dddddddidd d!d"dd#d$d%d&d'd(d(d)d*dd+id,dgdd-gd.dg dddddddidd d!d"dd#d$d%d&d'd(d(d)d*dd+id,dd/gg d0ddg dddddddidd d!d"dd#d$d%d&d'd(d(d)d*dd+id,d1d2}||                                k    sJ t          |j                  d3k    sJ d S )4Nzfoo barzfoo-barzA very complicated project.zecho boololF)r+   env_specr  r  z	echo blahrY   )r+   r+  r  zsay hiTzecho hi)r+   rY   r+  r  r  zBokeh app main.pymain.pywoot)r+   r  r+  r  zNotebook foo.ipynb	foo.ipynb)r+   r  r+  r  r  )r   r  rf   myappr.  r   rf   r  r  )linux-64zosx-64zwin-64r:   z-A downloaded file which is referenced by FOO.zhttps://example.com/blah)	encryptedrM   r+   url	SOMETHINGz+SOMETHING environment variable must be set.)r1  rM   r+   SOMETHING_ELSEz0SOMETHING_ELSE environment variable must be set.r^   )r1  rM   r+   rY   )r3  r4  	REDIS_URLzAA running Redis server, located by a redis: URL set as REDIS_URL.redis)rM   r+   typer1  )r   r  r+   r  r  r  r  r  	somethingzdouble 0woohoo)rf   r'  r  )rY   r*  w00tr-  r   r   )r   r"  r#  r?   rD  r$  s      r   #check_publication_info_from_complexz[test_get_publication_info_from_complex_project.<locals>.check_publication_info_from_complex	  sy   *733 !*8(/ $. %)-2	  $/ )-2  $,# )%-1  $7!* &-1	  $8 + )-115 3   F "'!&
 3#,#!A!A!A).%*+Z#=	   " */%0+X& & */%5+]'+	+ +" " $%0+n$+).	& &!7# #J "'!&#(#!A!A!A).%*+Z#=	   " */%0+X& & */%5+]'+	+ +" " $%0+n$+).	& &!7# #J "'!& 4#-#!A!A!A).%*+Z#=	   " */%0+X& & */%5+]'+	+ +" " $%0+n$+).	& &!7# #J "' 1 8 8 8#)#!A!A!A).%*+Z#=	   " */%0+X& & */%5+]'+	+ +" " $%0+n$+).	& &!7# #[Q QMx
 x
t 7335555557&''1,,,,,,r   r,  r"   r.  r   r   _complicated_project_contents)r;  s    r   .test_get_publication_info_from_complex_projectr>  	  sM    ~- ~- ~-@ 4$&Cr	
 /0 0 0 0 0r   c                  L    d } t          t          t          ddddi|            d S )Nc                    t          |           }g |j        k    sJ |j        }|                    |d          }t	          |          dk    sJ |d         j        dk    sJ |                    |t                    }t	          |          dk    sJ t          |d         t                    sJ |                    |t                    }t	          |          dk    sJ t          |d         t                    sJ |                    |t                    }t	          |          dk    sJ t          |d         t                    sJ |                    |t          d          }g |k    sJ d S )Nr3  r@   r;   r   )klass)rB  r@   )
r   r#   r>   find_requirementsr?   r@   r   rj   r   r   )r&   r-   	spec_namereqss       r   check_find_requirementsz7test_find_requirements.<locals>.check_find_requirements_
  s   *733W%%%%%1	((K(HH4yyA~Aw+----((:M(NN4yyA~$q'#677777((:L(MM4yyA~$q'#566666((:M(NN4yyA~$q'#677777 ((:MWb(ccTzr   r,  r"   r.  r<  )rF  s    r   test_find_requirementsrG  ^
  sI      4 4$&Cr	
 #$ $ $ $ $r   c                  L    d } t          t          t          ddddi|            d S )Nc                    t          |           }g |j        k    sJ |                    |j                  }t	          |          dk    sJ t          |d         t                    sJ |d         j        dk    sJ |                    |j                  }t	          |          dk    sJ t          |d         t                    sJ |d         j        dk    sJ |
                    |j                  }d |D             }g dt          |          dd          k    sJ |                    |j                  }d |D             }dd	gt          |          k    sJ d S )
Nr;   r   r5  r:   c                     g | ]	}|j         
S ri   rA  rk   s     r   rn   zQtest_requirements_subsets.<locals>.check_requirements_subsets.<locals>.<listcomp>
  s    >>>CCK>>>r   r:   r5  r3  r4  c                     g | ]	}|j         
S ri   rA  rk   s     r   rn   zQtest_requirements_subsets.<locals>.check_requirements_subsets.<locals>.<listcomp>
  s    444ss{444r   r3  r4  )r   r#   service_requirementsr>   r?   rj   r   r@   download_requirementsr   all_variable_requirementsry   plain_variable_requirements)r&   r-   r  r  
everythingeverything_namesplainplain_namess           r   check_requirements_subsetsz=test_requirements_subsets.<locals>.check_requirements_subsets
  s   *733W%%%%%//0MNN8}}!!!!(1+'9:::::{"k111111'2OPP	9~~"""")A,(;<<<<<|#u,,,,66w7TUU
>>:>>>BBBfM]F^F^_`_a_aFbbbbb33G4QRR44e444-.&2E2EEEEEEEr   r,  r"   r.  r<  )rU  s    r   test_requirements_subsetsrV  
  sL    F F F. 4$&Cr	
 &' ' ' ' 'r   c                  L    d } t          t          t          ddddi|            d S )Nc                    t          |           }g |j        k    sJ |                    |j                  }dg|k    sJ |                    |j                  }dg|k    sJ |                    |j                  }g dt          |          dd          k    sJ |                    |j                  }ddgt          |          k    sJ d S )Nr5  r:   rK  r;   r3  r4  )r   r#   r  r>   r  all_variablesry   plain_variables)r&   r-   r  r  rQ  rS  s         r   "check_env_var_name_list_propertieszMtest_env_var_name_list_properties.<locals>.check_env_var_name_list_properties
  s    *733W%%%%%##G$ABB}((((%%g&CDD	w)####**7+HII
BBBfZFXFXYZY[Y[F\\\\\''(EFF-.&--??????r   r,  r"   r.  r<  )r[  s    r   !test_env_var_name_list_propertiesr\  
  sL    @ @ @" 4$&Cr	
 ./ / / / /r   c                     t          d          } | j        dk    sJ | j        rJ |                     d           J d }t          dd|          }|j        dk    sJ |j        sJ |                    d           dk    sJ d S )Nrf   )textc                     dS )Nr  ri   )r-   s    r   fixitz#test_project_problem.<locals>.fixit
  s    rr   r   prompt)r^  
fix_promptfix_functionr  )r   r^  can_fixrF  )	unfixabler`  fixables      r   test_project_problemrg  
  s    E***I>U""""    ==&&&   %H5QQQG<5    ?;;t""""""r   c                  :    d } t          t          di|            d S )Nc                    t          |           }t          |j                  dk    sJ t          |j                  dk    sJ |j        d         }|j        dt
          z  k    sJ |j        sJ |                    |           |j        	                                 |j        g k    sJ |j
        t          j                            |           k    sJ d|j        j        v sJ d S )Nr;   r   z!%s: The 'name:' field is missing.r   )r   r?   r#   r  r^  r   rd  rF  r'   r   r   r%   r   r)   rootr&   r-   problems      r   r   z)test_auto_fix_missing_name.<locals>.check
  s    *7337#$$))))7*++q0000)!,| CF^ ^____G!!###2%%%%|rw//888888-2222222r   zMenv_specs:
  default: {}
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
r  r   s    r   test_auto_fix_missing_namerm  
  s;    3 3 3 	!#uv    r   c                  >    d } t          t          dddi|            d S )Nc                 >   t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ |j        d         }|j        dk    sJ |j        sJ |                    |           |j        	                                 |j        g k    sJ t          |j                                                  dgk    sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ d S )Nr;   r   MEnvironment spec 'stuff' from environment.yml is not in anaconda-project.yml.stuffrn  ro  rf   r   r   r?   r#   r  fixable_problemsr^  rd  rF  r'   r   r  r   keysr   r   r   r&   r-   rl  rA  s       r   r   z,test_auto_fix_env_spec_import.<locals>.check
  sE   *7337#$$))))7*++q00007+,,1111)!,|nnnnnG!!###2%%%%G%**,,--':::: )"j0000 I----}	))))))r   Lname: foo
env_specs: {}
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
environment.ymlG
name: stuff
dependencies:
 - a
 - b
 - pip:
   - foo
channels:
 - bar
r  r   s    r   test_auto_fix_env_spec_importr|  
  sG    * * *& $&w 	 	
     r   c                  >    d } t          t          dddi|            d S )Nc                 >   t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ |j        d         }|j        dk    sJ |j        sJ |                    |           |j        	                                 |j        g k    sJ t          |j                                                  dgk    sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ d S )Nr;   r   zPEnvironment spec 'default' from requirements.txt is not in anaconda-project.yml.rY   ri   )r:  efgru  rx  s       r   r   z4test_auto_fix_requirements_txt_import.<locals>.check  sE   *7337#$$))))7*++q00007+,,1111)!,|qqqqqG!!###2%%%%G%**,,--)<<<< +"b(((( N2222}""""""r   ry  zrequirements.txtz(
# these are some pip packages.
abc
efg
r  r   s    r   %test_auto_fix_requirements_txt_importr    sG    # # #& $&w !	
     r   c                  >    d } t          t          dddi|            d S )Nc                 >   t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ |j        d         }d|j        k    sJ |j        sJ |                    |           |j        	                                 |j        g k    sJ t          |j                                                  dgk    sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ d S )Nr;   r   Environment spec 'stuff' from environment.yml is out of sync with anaconda-project.yml. Diff:
  channels:
    + bar
+ a
+ b
  pip:
    + foorq  rr  rs  rt  ru  rx  s       r   r   z1test_auto_fix_env_spec_out_of_sync.<locals>.check#  sT   *7337#$$))))7*++q00007+,,1111)!,FJQ,W 	W 	W 	WG!!###2%%%%G%**,,--':::: )"j0000 I----}	))))))r   hname: foo
env_specs: { 'stuff': { 'packages':[] } }
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
rz  r{  r  r   s    r   "test_auto_fix_env_spec_out_of_syncr  "  sJ    * * *( $ 'F 	 	
     r   c                  >    d } t          t          dddi|            d S )Nc                 &   t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ |j        d         }|j        dk    sJ |j        sJ |                    |           |j        	                                 |j        g k    sJ t          |j                                                  dgk    sJ |j                            ddg          }|J |dk    sJ d S )Nr;   r   rp  rY   rf  environmentr"   )r   r?   r#   r  rv  r^  rd  ri  r'   r   r  r   rw  rj  )r&   r-   rl  skip_importing_hashs       r   r   z6test_auto_fix_env_spec_import_saying_no.<locals>.checkI  s6   *7337#$$))))7*++q00007+,,1111)!,|nnnnnw!!###2%%%%G%**,,--)<<<<%2<<nm=\]]"..."b((((((r   zename: foo
env_specs: {'default':{'packages':[]}}
platforms: [linux-32,linux-64,osx-64,win-32,win-64]
rz  r{  r  r   s    r   'test_auto_fix_env_spec_import_saying_nor  H  sG    ) ) )& $v 	 	
     r   c                  >    d } t          t          dddi|            d S )Nc                 	   t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ |j        d         }d|j        k    sJ |j        sJ |                    |           |j        	                                 |j        g k    sJ t          |j                                                  dgk    sJ |j        d         }|j        dk    sJ |j        dk    sJ |j        dk    sJ |j                            g d          }|                    d	d
g           |j                            g d|           |j        	                                 |j        g k    sJ |j        d         }|j        dk    sJ |j                            g d          }|                    dg           |j                            g d|           |j        	                                 t          |j                  dk    sJ |j                            g d          }|                    d           |j                            g d|           |j        	                                 t          |j                  dk    sJ |j                            g d          }|                    d           |j                            g d|           |j        	                                 t          |j                  dk    sJ |j        d         }|j        dk    sJ |j                            g d          }|                    d           |j                            g d|           |j        	                                 t          |j                  dk    sJ |j                            g d          }d }|D ]}t+          |t,                    r|d         } |                    d           |j                                         |j        	                                 t          |j                  dk    sJ |j        d         }|j        dk    sJ d S )Nr;   r   r  rq  rr  rs  rt  )r   rq  r  r  r  )rn  ro  r  r  	someother)r   rq  r   boo)r   r  pip)rf   r  )r   r?   r#   r  rv  r^  rd  rF  r'   r   r  r   rw  r   r   r   rj  extendr   r  appendrj   r0   use_changes_without_saving)r&   r-   rl  rA  r  r   pip_listps           r   r   zFtest_no_auto_fix_env_spec_with_notebook_bokeh_injection.<locals>.checkn  s   *7337#$$))))7*++q00007+,,1111)!,FJQ,W 	W 	W 	WG!!###2%%%%G%**,,--':::: )"j0000 I----}	)))) '112T2T2TUU*-...&&'I'I'I8TTT!!### 2%%%% )"&EEEEE '112T2T2TUU&&&&&'I'I'I8TTT!!###7#$$)))) '112T2T2TUU$$$&&'I'I'I8TTT!!###7#$$)))) '112T2T2TUU&&'I'I'I8TTT!!###7#$$)))) )}.... '112T2T2TUU&&'I'I'I8TTT!!###7#$$)))) '112T2T2TUU 	$ 	$A!T"" $U8$$$77999!!###7#$$)))) ) $8888888r   r  rz  r{  r  r   s    r   7test_no_auto_fix_env_spec_with_notebook_bokeh_injectionr  m  sN    M9 M9 M9^ $ 'F 	 	
     r   c                  >    d } t          t          dddi|            d S )Nc                    t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ t          |j        d         j                  dk    sJ |j        d         }d|j	        j
        z  |j        k    sJ |j        sJ |                    |           |j	                                         |j        g k    sJ |j        g k    sJ |j        d         j        t          dg          k    sJ d S )Nr   r;   rY   zV%s: Command foo.ipynb uses env spec default which does not have the packages: notebookr  r   r?   r#   r  rv  rD  rE  r   r   r'   r)   r^  rd  rF  r   r   rk  s      r   r   z)test_auto_fix_notebook_dep.<locals>.check  s   *7337#$$))))7*++q00007+,,11117&''1,,,,7-..!33337$Y/GHHAMMMM,Q/h$-.29,? 	? 	? 	?G!!###2%%%%"b(((( +CsJ<GXGXXXXXXXr   z/commands:
  foo.ipynb:
    notebook: foo.ipynb
r.  not a real notebookrG   r   s    r   test_auto_fix_notebook_depr    sM    Y Y Y, 4$ (C .		

     r   c                  >    d } t          t          dddi|            d S )Nc                     t          |           }|j        g k    sJ |j        g k    sJ |j        d         j        t          dg          k    sJ d S )NrY   anaconda)r   r#   rD  r   r   r   r,   s     r   r   z@test_no_auto_fix_notebook_dep_if_we_have_anaconda.<locals>.check  sc    *7332%%%%"b(((( +CsJ<GXGXXXXXXXr   zEpackages:
 - anaconda
commands:
  foo.ipynb:
    notebook: foo.ipynb
r.  r  rG   r   s    r   1test_no_auto_fix_notebook_dep_if_we_have_anacondar    sM    Y Y Y 4$ (C
 !	
 	 	 	 	 	r   c                  >    d } t          t          dddi|            d S )Nc                     t          |           }|j        g k    sJ |j        d         j        t	          dg          k    sJ d S )NrY   r  )r   r#   r   r   r   r,   s     r   r   z@test_no_auto_fix_notebook_dep_if_we_have_notebook.<locals>.check  sO    *7332%%%% +CsJ<GXGXXXXXXXr   zEpackages:
 - notebook
commands:
  foo.ipynb:
    notebook: foo.ipynb
r.  r  rG   r   s    r   1test_no_auto_fix_notebook_dep_if_we_have_notebookr    sM    Y Y Y 4$ (C
 !	
 	 	 	 	 	r   c                  >    d } t          t          dddi|            d S )Nc                    t          |           }t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ t          |j                  dk    sJ t          |j        d         j                  dk    sJ |j        d         }d|j	        j
        z  |j        k    sJ |j        sJ |                    |           |j	                                         |j        g k    sJ |j        d         j        t          dg          k    sJ d S )Nr   r;   rY   zT%s: Command bokeh_test uses env spec default which does not have the packages: bokehr  r  rk  s      r   r   z&test_auto_fix_bokeh_dep.<locals>.check  si   *7337#$$))))7*++q00007+,,11117&''1,,,,7-..!33337$Y/GHHAMMMM,Q/f$-.29,? 	? 	? 	?G!!###2%%%% +CsG9~~UUUUUUr   z/commands:
  bokeh_test:
    bokeh_app: main.py
r,  rW   rG   r   s    r   test_auto_fix_bokeh_depr    sL    V V V* 4$ (B w		

     r   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }g |j        k    sJ d|j        j        z  }|g|j        k    sJ d S Nz!%s: Unknown field name 'somejunk'r   r#   r'   r)   rD  r&   r-   expected_suggestions      r   r   z)test_unknown_field_in_root.<locals>.check5  Q    *733W%%%%%BWEYEbb#$(;;;;;;;r   zsomejunk: False
rG   r   s    r   test_unknown_field_in_rootr  4  s1    < < < 45MOb4cejkkkkkr   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }g |j        k    sJ d|j        j        z  }|g|j        k    sJ d S r  r  r  s      r   r   z,test_unknown_field_in_command.<locals>.check?  r  r   z8commands:
  foo:
    unix: something
    somejunk: True
rG   r   s    r   test_unknown_field_in_commandr  >  s@    < < < 4	!#abdik k k k kr   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }g |j        k    sJ d|j        j        z  }|g|j        k    sJ d S r  r  r  s      r   r   z-test_unknown_field_in_env_spec.<locals>.checkJ  r  r   z?env_specs:
  foo:
    packages: [something]
    somejunk: True
rG   r   s    r   test_unknown_field_in_env_specr  I  s@    < < < 4	!#hikpr r r r rr   c                  :    d } t          t          di|            d S )Nc                 X    t          |           }g |j        k    sJ g |j        k    sJ d S r   r   r#   rD  r,   s     r   r   z5test_unknown_field_in_env_spec_allowed.<locals>.checkU  s=    *733W%%%%%W(((((((r   z[env_specs:
  foo:
    packages: [something]
    somejunk: True
    user_fields: [somejunk]
rG   r   s    r   &test_unknown_field_in_env_spec_allowedr  T  s?    ) ) )
 4$n	
 	    r   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }g |j        k    sJ d|j        j        z  }|g|j        k    sJ d S r  r   r#   r  r)   rD  r  s      r   r   z6test_unknown_field_in_root_of_lock_file.<locals>.checkb  Q    *733W%%%%%BWEVE__#$(;;;;;;;r   z'locking_enabled: false
somejunk: False
r  r   s    r   'test_unknown_field_in_root_of_lock_filer  a  s@    < < < 4	&(STV[] ] ] ] ]r   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }g |j        k    sJ d|j        j        z  }|g|j        k    sJ d S r  r  r  s      r   r   z:test_unknown_field_in_lock_set_of_lock_file.<locals>.checkm  r  r   zX
env_specs:
  default:
     platforms: [linux-64,osx-64,win-64]
     somejunk: True
    r  r   s    r   +test_unknown_field_in_lock_set_of_lock_filer  l  sA    < < < 4)	
 	 	 	 	 	r   c                  :    d } t          t          di|            d S )Nc                 @    t          |           }dg|j        k    sJ d S )N3anaconda-project.yml: The 'name:' field is missing.r   r,   s     r   r   z+test_empty_file_has_problems.<locals>.check  s,    *733EF'JZZZZZZZr   r"   r  r   s    r   test_empty_file_has_problemsr    s2    [ [ [ 5r:EBBBBBr   c                  H    d } t          t          dt          di|            d S )Nc                 B    t          |           }ddg|j        k    sJ d S Nr  Xanaconda-project.yml: The 'platforms:' field should list platforms the project supports.r   r,   s     r   r   z9test_with_one_locked_env_spec_has_problems.<locals>.check  @    *733Af
  	 	 	 	 	r   z%
env_specs:
  foo:
     packages: []
locking_enabled: true
r
   r   r   r   s    r   *test_with_one_locked_env_spec_has_problemsr    sI       $ '
 *+D	
     r   c                  H    d } t          t          dt          di|            d S )Nc                 B    t          |           }ddg|j        k    sJ d S r  r   r,   s     r   r   zBtest_with_locking_enabled_no_env_specs_has_problems.<locals>.check  r  r   r"   r  r  r   s    r   3test_with_locking_enabled_no_env_specs_has_problemsr    sD        "%'@     r   c                  H    d } t          t          dt          di|            d S )Nc                 >    t          |           }g |j        k    sJ d S r   r   r,   s     r   r   z?test_with_locking_disabled_no_platforms_required.<locals>.check  )    *733W%%%%%%%r   z1name: foo
env_specs:
  default:
    packages: []
zlocking_enabled: false
r  r   s    r   0test_with_locking_disabled_no_platforms_requiredr    sE    & & & $&])+E	
 	    r   c                  :    d } t          t          di|            d S )Nc                     t          |           }dg|j        k    sJ dg|j        k    sJ |j        d         }|j        dk    sJ d S )Nzwanaconda-project.yml: Unusual platform name 'weird-valid' may be a typo (more usual examples: linux-64, osx-64, win-64)zhanaconda-project.yml: Platform name 'weirdinvalid' is invalid (valid examples: linux-64, osx-64, win-64)rY   )r0  zweird-valid)r   rD  r#   r   r  )r&   r-   rA  s      r   r   z'test_load_weird_platform.<locals>.check  s    *733>
  ! 	! 	! 	!
9
  	 	 	
  +~!<<<<<<<r   zf
name: foo
platforms: [linux-64, weird-valid, weirdinvalid]
env_specs:
  default:
    packages: [foo]
r  r   s    r   test_load_weird_platformr    sA    = = = $		
 
 
 
 
 
r   c                  :    d } t          t          di|            d S )Nc                 >    t          |           }g |j        k    sJ d S r   r   r,   s     r   r   zGtest_only_some_env_specs_have_platforms_locking_disabled.<locals>.check  r  r   zt
name: foo

env_specs:
  default:
    platforms: [linux-64]
    packages: [foo]
  no_platforms:
    packages: [bar]
r  r   s    r   8test_only_some_env_specs_have_platforms_locking_disabledr    sA    & & & $		
     r   c                  H    d } t          t          dt          di|            d S )Nc                 @    t          |           }dg|j        k    sJ d S )Nz]anaconda-project.yml: Env spec no_platforms does not have anything in its 'platforms:' field.r   r,   s     r   r   zFtest_only_some_env_specs_have_platforms_locking_enabled.<locals>.check  s;    *733u %& 	& 	& 	& 	& 	&r   z|
name: foo

env_specs:
  default:
    platforms: [linux-64]
    packages: [foo]
  no_platforms:
    packages: [bar]
        r  r  r   s    r   7test_only_some_env_specs_have_platforms_locking_enabledr    sI    & & &
 $ 	' *+D	
     r   c                  :    d } t          t          di|            d S )Nc                 6    t          |           }|j        sJ d S r   r   locking_globally_enabledr,   s     r   r   z3test_empty_lock_file_enables_locking.<locals>.check  s$    *733//////r   r  r  r   s    r   $test_empty_lock_file_enables_lockingr    s@    0 0 0 45R U 5    r   c                  D    d } t          t                      |            d S )Nc                 6    t          |           }|j        rJ d S r   r  r,   s     r   r   z6test_default_lock_file_disables_locking.<locals>.check  s$    *733333333r   )r   r0   r   s    r   'test_default_lock_file_disables_lockingr    s-    4 4 4 4DFFEBBBBBr   c                  :    d } t          t          di|            d S )Nc                 b    t          |           }|j        j        dd}|g|j        k    sJ d S )Nz;: Value for locking_enabled should be true or false, found r  r   r  r)   r#   r  s      r   r   z6test_lock_file_non_bool_locking_enabled.<locals>.check  sF    *733&&&,7#3333333r   zlocking_enabled:  42
r  r   s    r   'test_lock_file_non_bool_locking_enabledr    s1    4 4 4 45RTl4motuuuuur   c                  :    d } t          t          di|            d S )Nc                 b    t          |           }|j        j        dd}|g|j        k    sJ d S )Nzj: 'env_specs:' section in lock file should be a dictionary from env spec names to lock information, found r  r  r  s      r   r   z0test_lock_file_non_dict_env_specs.<locals>.check  sI    *733RYRcRlRlRlnpnpr7#3333333r   zenv_specs:  42
r  r   s    r   !test_lock_file_non_dict_env_specsr    s1    4 4 4 45RTf4ginooooor   c                  :    d } t          t          di|            d S )Nc                 b    t          |           }|j        j        dd}|g|j        k    sJ d S )NzJ: Field 'default' in env_specs in lock file should be a dictionary, found r  r  r  s      r   r   z/test_lock_file_non_dict_lock_set.<locals>.check"  G    *733)0):)C)C)CRRI7#3333333r   z
env_specs:
  default: 42
r  r   s    r    test_lock_file_non_dict_lock_setr  !  sB    4 4 4 45R U 5     r   c                  :    d } t          t          di|            d S )Nc                 b    t          |           }|j        j        dd}|g|j        k    sJ d S )NzI: Value for locked for env spec 'default' should be true or false, found r  r  r  s      r   r   z6test_lock_file_non_bool_lock_set_locked.<locals>.check/  r  r   z&
env_specs:
  default:
    locked: 42
r  r   s    r   'test_lock_file_non_bool_lock_set_lockedr  .  A    4 4 4 4	& ) 	     r   c                  :    d } t          t          di|            d S )Nc                 b    t          |           }|j        j        dd}|g|j        k    sJ d S )NzK: Value for env_spec_hash for env spec 'default' should be a string, found r  r  r  s      r   r   z6test_lock_file_non_string_lock_set_hash.<locals>.check>  r  r   z-
env_specs:
  default:
    env_spec_hash: 42
r  r   s    r   'test_lock_file_non_string_lock_set_hashr  =  r  r   c                  :    d } t          t          di|            d S )Nc                 b    t          |           }|j        j        dd}|g|j        k    sJ d S )NzW: 'packages:' section in env spec 'default' in lock file should be a dictionary, found r  r  r  s      r   r   z8test_lock_file_non_dict_lock_set_packages.<locals>.checkM  r  r   z(
env_specs:
  default:
    packages: 42
r  r   s    r   )test_lock_file_non_dict_lock_set_packagesr  L  r  r   c                  :    d } t          t          di|            d S )Nc                 x    t          |           }g |j        k    sJ |j        j        d}|g|j        k    sJ d S )NzM: env spec 'default': pip dependencies are currently ignored in the lock filer  )r&   r-   expected_warnings      r   r   z.test_lock_file_has_pip_packages.<locals>.check\  sY    *733W%%%%% &&&* !W%8888888r   zz
env_specs:
  default:
    platforms: [linux-64,osx-64,win-64]
    packages:
      all:
        - pip:
          - foobar
r  r   s    r   test_lock_file_has_pip_packagesr  [  sA    9 9 9 4)	
     r   c                  :    d } t          t          di|            d S )Nc                 n    t          |           }|j        j        }d|z  d|z  d|z  g|j        k    sJ d S r  r  r  s      r   r   z2test_lock_file_has_invalid_packages.<locals>.checkt  s]    *733$-2X=88C3h>
 	 	 	 	 	 	r   zo
env_specs:
  default:
    packages:
      all:
        - "="
        - foo bar
        - pip:
          - "%"
r  r   s    r   #test_lock_file_has_invalid_packagesr  s  sA       4)		
     r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }g |j        k    sJ dg|j        k    sJ d S )Nzanaconda-project-lock.yml: Env spec 'default' specifies platforms 'linux-64,osx-64,win-64' but the lock file has locked versions for platforms 'win-64'r  r,   s     r   r   z1test_lock_file_has_wrong_platforms.<locals>.check  sS    *733W%%%%%.
  	! 	! 	! 	! 	! 	!r   zP
env_specs:
  default:
    platforms: ["win-64"]
    packages:
      all: [foo]
r  r   s    r   "test_lock_file_has_wrong_platformsr    sA    ! ! ! 4)		
 
 
 
 
 
r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }g |j        k    sJ dg|j        k    sJ d S )Nzanaconda-project-lock.yml: Env spec 'default' specifies platforms 'linux-64,osx-64,win-64' but the lock file lists no platforms for itr  r,   s     r   r   z0test_lock_file_has_zero_platforms.<locals>.check  sT    *733W%%%%%S
  ! 	! 	! 	! 	! 	!r   zH
env_specs:
  default:
    platforms: []
    packages:
      all: [foo]
r  r   s    r   !test_lock_file_has_zero_platformsr    sA    ! ! ! 4	& ) 	     r   c                  :    d } t          t          di|            d S )Nc                 Z    t          |           }g |j        k    sJ dg|j        k    sJ d S )Nzanaconda-project-lock.yml: Env spec 'default' has changed since the lock file was last updated (env spec hash has changed from wrong to a30f02c961ef4f3fe07ceb09e0906394c3885a79)r  r,   s     r   r   z,test_lock_file_has_wrong_hash.<locals>.check  sS    *733W%%%%%8
  	! 	! 	! 	! 	! 	!r   zw
env_specs:
  default:
    env_spec_hash: wrong
    platforms: [linux-64,osx-64,win-64]
    packages:
      all: [foo]
r  r   s    r   test_lock_file_has_wrong_hashr    sA    ! ! ! 4)
	
     r   c                  H    d } t          t          dt          di|            d S )Nc                 \    t          |           }g |j        k    sJ g d|j        k    sJ d S )N)zbanaconda-project-lock.yml: Lock file lists no packages for env spec 'default' on platform linux-64zaanaconda-project-lock.yml: Lock file is missing 1 packages for env spec default on osx-64 (hello)z`anaconda-project-lock.yml: Lock file lists no packages for env spec 'default' on platform win-64r  r,   s     r   r   z?test_lock_file_has_empty_and_wrong_package_lists.<locals>.check  sX    *733W%%%%%
 
 
  ! 	! 	! 	! 	! 	!r   9
env_specs:
   default:
      packages:
         - hello
z
env_specs:
  default:
    platforms: [linux-64,osx-64,win-64]
    packages:
      linux-64: []
      win-64: []
      win-32: [foo]
      osx-64: [bar]
      linux-32: [baz]
r   r   r   r   s    r   0test_lock_file_has_empty_and_wrong_package_listsr    sK    ! ! ! 4$ *
	
( +    r   c                  H    d } t          t          dt          di|            d S )Nc                 Z    t          |           }g |j        k    sJ dg|j        k    sJ d S )Nzaanaconda-project-lock.yml: Lock file lists env spec 'orphan' which is not in anaconda-project.ymlr  r,   s     r   r   z1test_lock_file_has_orphan_env_spec.<locals>.check  sO    *733W%%%%%s () 	) 	) 	) 	) 	)r   r
  z
env_specs:
  default:
    platforms: [linux-64,osx-64,win-64]
    packages:
      all: [hello]
  orphan:
    platforms: [linux-64,osx-64,win-64]
    packages: {}
r  r   s    r   "test_lock_file_has_orphan_env_specr    sK    ) ) ) 4$ *		
& )    r   c                  H    d } t          t          dt          di|            d S )Nc                    t          |           }dg|j        k    sJ d|j        d         j        k    sJ |                                 g |j        k    sJ t          j                    |j        d         j        k    sJ d S )Nr  ri   rY   r   r#   r   r  fix_problems_and_suggestionsr   default_platforms_with_currentr,   s     r   r   z6test_fix_project_file_with_no_platforms.<locals>.check  s    *733j %& 	& 	& 	& W&y1;;;;;,,...W%%%%%799W=Ny=Y=cccccccr   zC
name: foo
env_specs:
   default:
      packages:
         - hello

locking_enabled: true
r  r   s    r   'test_fix_project_file_with_no_platformsr    sN    d d d $ ' * ,	
     r   c                  H    d } t          t          dt          di|            d S )Nc                    t          |           }ddg|j        k    sJ d|j        d         j        k    sJ d|j        d         j        k    sJ d|j        d         j        k    sJ |                                 g |j        k    sJ d|j        d         j        k    sJ t          j                    |j        d         j        k    sJ t          j                    |j        d         j        k    sJ d S )NzTanaconda-project.yml: Env spec bar does not have anything in its 'platforms:' field.zTanaconda-project.yml: Env spec foo does not have anything in its 'platforms:' field.)r0  rY   ri   rf   r   r  r,   s     r   r   z2test_fix_env_spec_with_no_platforms.<locals>.check9  s!   *733 cb
  	 	 	
 !29!=!GGGGGW&u-77777W&u-77777,,...W%%%%%!29!=!GGGGG799W=Nu=U=_____799W=Nu=U=_______r   z
name: foo
env_specs:
   default:
      platforms: ['linux-64']
      packages:
         - hello
   foo:
      platforms: []
      packages:
         - apackage
   bar:
      platforms: []
      packages:
         - package2
r  r  r   s    r   #test_fix_env_spec_with_no_platformsr  8  sN    ` ` `( $ '  * ,#	
( +    r   )NNFFN)
__future__r   r   copyr   distutils.spawnr   r%   r  r  r  r  r  r  unittestr   anaconda_project.env_specr   anaconda_projectr	   r"  ,anaconda_project.internal.test.tmpfile_utilsr
   r   anaconda_project.internalr   /anaconda_project.requirements_registry.registryr   2anaconda_project.requirements_registry.requirementr   =anaconda_project.requirements_registry.requirements.conda_envr   ;anaconda_project.requirements_registry.requirements.servicer   <anaconda_project.requirements_registry.requirements.downloadr   anaconda_project.projectr   r   anaconda_project.project_filer   "anaconda_project.project_lock_filer   #anaconda_project.test.environ_utilsr   #anaconda_project.test.project_utilsr   r   r2   r6   rI   rN   rS   rZ   r`   rc   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&  rF  rL  rO  rR  rU  rX  r[  r^  ra  rd  rk  rp  ru  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#  r5  r8  r<  r?  rO  r\  rb  rn  rq  rt  rw  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>  rG  rV  r\  rg  rm  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  ri   r   r   <module>r,     s   7 6 6 6 6 6 6 6       + + + + + + 				       



         ; ; ; ; ; ; 3 3 3 3 3 3k k k k k k k k / / / / / / P P P P P P P P P P P P ] ] ] ] ] ] Z Z Z Z Z Z \ \ \ \ \ \ > > > > > > > > B B B B B B L L L L L L ? ? ? ? ? ? H H H H H H  
6 
6 
66 6 6  $  *  ,  $  $  &* * *Z
 
 
  D	 	 	
: 
: 
:8 8 8"  $	& 	& 	&( ( (( ( (& & &  $/ / // / /) ) )( ( (( ( (  .) ) )X) ) )Xh h h	 	 		 	 	    (. . ."/ / /&r r rj. . .b  2      	 	 	     (  8@ @ @0b b b4@ @ @
y 
y 
y
w 
w 
w  $
r 
r 
r  *  *v v vv v v	E 	E 	E	E 	E 	E	b 	b 	b	m 	m 	m
 
 

 
 
    j j jk k k  2u u uE E E	h 	h 	h	J 	J 	J     ,     .# # #0# # #2p p p.+ + +0"_ "_ "_J  @_ _ _B_ _ _>%) %) %)T5 5 5Dp p p0  D  *    >
) 
) 
)
& 
& 
&k k k*v v v*] ] ]D] ] ]4_ _ _>] ] ]>  :  (  (  >        2` ` ` `FD D DI I I? ? ?D D DK K K
0 0 0# # #"' ' '2$ $ $*- - ->7! tF0 F0 F0R $  $  $F' ' '@/ / /4# # #  *! ! !H  ># # #L" " "J^ ^ ^B  @  (  &  >l l lk k kr r r
 
 
] ] ]  &C C C  &  	 	 	  :  *  ,  C C Cv v vp p p
 
 
        0  6  0  (  2% % %P  >  <* * * * *r   