B
    18™\Ð  ã               @   s¾   d dl Z d dl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	e 
d¡Zej ej e¡d  dddd¡ZdZdZd	Zd
ZG dd„ dejƒZG dd„ dejƒZedkrºe ¡  dS )é    N)Úsupportz
keyword.pyz..ÚPythonz
graminit.czkeyword_test.pyzgraminit_test.czminimal_keyword.pyznot_here.txtc               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTest_iskeywordc             C   s   |   t d¡¡ d S )NÚTrue)Ú
assertTrueÚkeywordÚ	iskeyword)Úself© r
   úU/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_keyword.pyÚtest_true_is_a_keyword   s    z%Test_iskeyword.test_true_is_a_keywordc             C   s   |   t d¡¡ d S )NÚTRUE)ÚassertFalser   r   )r	   r
   r
   r   Ú$test_uppercase_true_is_not_a_keyword   s    z3Test_iskeyword.test_uppercase_true_is_not_a_keywordc             C   s   |   t d ¡¡ d S )N)r   r   r   )r	   r
   r
   r   Ú test_none_value_is_not_a_keyword   s    z/Test_iskeyword.test_none_value_is_not_a_keywordc             C   s>   t j}|  tt d|¡ dddddddgt _|  t  d¡¡ d S )	NÚkwlistZitsÚallZeggsZbeansÚandÚaÚslice)r   r   Ú
addCleanupÚsetattrr   r   )r	   Zoldlistr
   r
   r   Ú2test_changing_the_kwlist_does_not_affect_iskeyword    s    zATest_iskeyword.test_changing_the_kwlist_does_not_affect_iskeywordN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r
   r
   r
   r   r      s   r   c               @   sb   e Zd Zdd„ Zdd„ Ze ej 	e
¡ d¡dd„ ƒZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestKeywordGenerationc          	   C   s   t |dƒ}| ¡ }W d Q R X |d t|d  ¡ ƒd … }t |dƒB}| |d | d| ¡d … ¡ | || d| ¡d … ¡ W d Q R X d S )NÚrbr   Úwbs   #--start keywords--é   s   #--end keywords--)ÚopenÚ	readlinesÚlenÚstripÚ
writelinesÚindex)r	   Zsource_fileZ	dest_fileÚfpÚlinesÚnlr
   r
   r   Ú%_copy_file_without_generated_keywords)   s     z;TestKeywordGeneration._copy_file_without_generated_keywordsc             C   s0   t jtjt||gt jd}| ¡ d }|j|fS )N)Ústderrr   )Ú
subprocessÚPopenÚsysÚ
executableÚKEYWORD_FILEÚPIPEÚcommunicateÚ
returncode)r	   Zgrammar_fileZtarget_keyword_py_fileÚprocr*   r
   r
   r   Ú_generate_keywords1   s    z(TestKeywordGeneration._generate_keywordsz+test only works from source build directoryc             C   sV   |   tt¡ |  tjt¡ |  t tt¡¡ |  	d|  
tt¡¡ |  t tt¡¡ d S )N)r   ó    )r)   r/   ÚTEST_PY_FILEr   r   Úunlinkr   ÚfilecmpÚcmpÚassertEqualr4   ÚGRAMMAR_FILEr   )r	   r
   r
   r   Ú"test_real_grammar_and_keyword_file9   s    z8TestKeywordGeneration.test_real_grammar_and_keyword_filec          	   C   sÄ   |   tt¡ |  tjt¡ ttdƒ}| t	 
d¡¡ W d Q R X |  tjt¡ |  tt¡ ddddddd	d
dg	}ttƒ}| ¡  ¡ }W d Q R X | d¡d }| d¡}|||… }|  ||¡ d S )NÚwaŒ                  {2, 1},
                    {11, "encoding_decl", 0, 2, states_79,
                     "            "
                     "         "},
                    {1, "jello"},
                    {326, 0},
                    {1, "turnip"},
                	{1, "This one is tab indented"
                    {278, 0},
                    {1, "crazy but legal"
                "also legal" {1, "
                    {1, "continue"},
                   {1, "lemon"},
                     {1, "tomato"},
                {1, "wigii"},
                    {1, 'no good'}
                    {283, 0},
                    {1,  "too many spaces"}z#        'This one is tab indented',z        'also legal',z        'continue',z        'crazy but legal',z        'jello',z        'lemon',z        'tomato',z        'turnip',z        'wigii',z#--start keywords--r   z#--end keywords--)r)   r/   r6   r   r   r7   r    ÚGRAMMAR_TEST_FILEr$   ÚtextwrapÚdedentr4   ÚreadÚ
splitlinesr%   r:   )r	   r&   Úexpectedr'   ÚstartÚendÚactualr
   r
   r   Útest_grammarC   s,    

z"TestKeywordGeneration.test_grammarc             C   s`   |   tt¡ |  tjt¡ t tt¡ |  tjt¡ |  	d|  
tjt¡¡ |  t tt¡¡ d S )N)r   r5   )r)   r/   ÚPY_FILE_WITHOUT_KEYWORDSr   r   r7   ÚshutilÚcopyfiler6   r:   r4   ÚosÚdevnullr   r8   r9   )r	   r
   r
   r   Ú)test_empty_grammar_results_in_no_keywordso   s    z?TestKeywordGeneration.test_empty_grammar_results_in_no_keywordsc             C   s0   |   tjtj¡\}}|  |d¡ |  |d¡ d S )Nr   s   does not contain format markers)r4   rK   rL   ÚassertNotEqualÚassertRegex)r	   Úrcr*   r
   r
   r   Ú/test_keywords_py_without_markers_produces_errory   s    zETestKeywordGeneration.test_keywords_py_without_markers_produces_errorc             C   s4   |   tt¡\}}|  |d¡ |  |dt ¡  ¡ d S )Nr   s   (?ms))r4   ÚNONEXISTENT_FILEr/   rN   rO   Úencode)r	   rP   r*   r
   r
   r   Ú(test_missing_grammar_file_produces_error~   s    z>TestKeywordGeneration.test_missing_grammar_file_produces_errorc             C   s6   |   tjt¡\}}|  |d¡ |  |dt ¡  ¡ d S )Nr   s   (?ms))r4   rK   rL   rR   rN   rO   rS   )r	   rP   r*   r
   r
   r   Ú,test_missing_keywords_py_file_produces_errorƒ   s    zBTestKeywordGeneration.test_missing_keywords_py_file_produces_errorN)r   r   r   r)   r4   ÚunittestÚskipIfrK   ÚpathÚexistsr;   r<   rG   rM   rQ   rT   rU   r
   r
   r
   r   r   '   s   	,
r   Ú__main__)r   rV   Útestr   r8   rK   r-   r+   rI   r?   Úfindfiler/   rX   ÚjoinÚsplitÚ__file__r;   r6   r>   rH   rR   ÚTestCaser   r   r   Úmainr
   r
   r
   r   Ú<module>   s&   
b