B
    u9aÐ  ã               @   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
   ú"/usr/lib/python3.7/test_keyword.pyÚtest_true_is_a_keyword   s    z%Test_iskeyword.test_true_is_a_keywordc             C   s   |   t d¡¡ d S )NZ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ÚPIPEZ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ÚassertEqualr2   Ú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.   r4   r   r   r5   r   ÚGRAMMAR_TEST_FILEr#   ÚtextwrapÚdedentr2   ÚreadÚ
splitlinesr$   r8   )r	   r%   Z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   r3   )r(   r.   ÚPY_FILE_WITHOUT_KEYWORDSr   r   r5   ÚshutilZcopyfiler4   r8   r2   ÚosÚdevnullr   r6   r7   )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)r2   rG   rH   Ú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))r2   ÚNONEXISTENT_FILEr.   rJ   rK   Úencode)r	   rL   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))r2   rG   rH   rN   rJ   rK   rO   )r	   rL   r)   r
   r
   r   Ú,test_missing_keywords_py_file_produces_errorƒ   s    zBTestKeywordGeneration.test_missing_keywords_py_file_produces_errorN)r   r   r   r(   r2   ÚunittestZskipIfrG   ÚpathÚexistsr9   r:   rD   rI   rM   rP   rQ   r
   r
   r
   r   r   '   s   	,
r   Ú__main__)r   rR   Ztestr   r6   rG   r,   r*   rF   r=   Zfindfiler.   rS   ÚjoinÚsplitÚ__file__r9   r4   r<   rE   rN   ZTestCaser   r   r   Úmainr
   r
   r
   r   Ú<module>   s&   
b