
    _fy,                     r   d Z ddlmZmZ d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Z ej                    dk    rddlmZ n<	 ddlmZ n4# e$ r,  ej        e                              d           ddlmZ Y nw xY wdd	lmZ ej                            ej                            ej                            e                    d
          Z G d de
j                  Z G d de
j                  Z G d de
j                  Z G d de
j                  Z edk    r e
j!                     dS dS )zUser Agent Parser Unit Tests.
Run:
# python -m user_agent_parser_test  (runs all the tests, takes awhile)
or like:
# python -m user_agent_parser_test ParseTest.testBrowserscopeStrings
    )unicode_literalsabsolute_importzslamm@google.com (Stephen Lamm)NPyPy)
SafeLoader)CSafeLoaderz[PyYaml C extension not available to run tests, this will result in dramatic tests slowdown.)user_agent_parserz../uap-corec                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )	ParseTestc                 v    |                      t          j                            t          d                     d S )Nztests/test_ua.yamlrunUserAgentTestsFromYAMLospathjoinTEST_RESOURCES_DIRselfs    R/var/www/html/env/lib/python3.11/site-packages/ua_parser/user_agent_parser_test.pytestBrowserscopeStringsz!ParseTest.testBrowserscopeStrings:   s9    &&GLL+-ABB	
 	
 	
 	
 	
    c                 v    |                      t          j                            t          d                     d S )Nztests/test_os.yamlrunOSTestsFromYAMLr   r   r   r   r   s    r   testBrowserscopeStringsOSz#ParseTest.testBrowserscopeStringsOS?   s.    -?AU V VWWWWWr   c                 v    |                      t          j                            t          d                     d S )Nz'test_resources/additional_os_tests.yamlr   r   s    r   testStringsOSzParseTest.testStringsOSB   s9    GLL+-VWW	
 	
 	
 	
 	
r   c                 v    |                      t          j                            t          d                     d S )Nztests/test_device.yaml)runDeviceTestsFromYAMLr   r   r   r   r   s    r   testStringsDevicezParseTest.testStringsDeviceG   s9    ##GLL+-EFF	
 	
 	
 	
 	
r   c                 v    |                      t          j                            t          d                     d S )Nz.test_resources/firefox_user_agent_strings.yamlr   r   s    r   testMozillaStringszParseTest.testMozillaStringsL   s=    &&GLL"$T 	
 	
 	
 	
 	
r   c                 v    |                      t          j                            t          d                     d S )Nz%test_resources/pgts_browser_list.yamlr   r   s    r   testPGTSStringszParseTest.testPGTSStringsY   s9    &&GLL+-TUU	
 	
 	
 	
 	
r   c           	          d}dddddddd d dd	d
ddd|d}t          j        |          }|                     ||d                    |||                     d S )NzpMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; fr; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5,gzip(gfe),gzip(gfe)MacApplefamilybrandmodelzMac OS X104r(   majorminorpatchpatch_minorFirefox35r(   r.   r/   r0   )devicer   
user_agentstringz%UA: {0}
 expected<{1}> != actual<{2}>)r   ParseassertEqualformat)r   user_agent_stringexpectedresults       r   testParseAllzParseTest.testParseAll^   s     O!&5II$#  $	  (
 
$ #():;;4;;!8V 	
 	
 	
 	
 	
r   c                    t          t          j                            t          |                    }t          j        |t                    }|                                 |d         D ]}|d         }|d         |d         |d         |d         d}i }t          j
        |          }|                     ||d	                    ||d         |d         |d         |d         |d         |d         |d         |d         	  	                   |                     t          t          j                  t          j        d
           d S )NLoader
test_casesr<   r(   r.   r/   r0   r5   zCUA: {0}
 expected<{1}, {2}, {3}, {4}> != actual<{5}, {6}, {7}, {8}>z?verify that the cache size never exceeds the configured setting)openr   r   r   r   yamlloadr   closer   ParseUserAgentr:   r;   assertLessEquallen_PARSE_CACHEMAX_CACHE_SIZEr   	file_nameyamlFileyamlContents	test_caser<   r=   r>   s           r   r   z#ParseTest.runUserAgentTestsFromYAML|   s\   %7CCDDy*===%l3 !	 !	I )*= > $H-"7+"7+"7+	 H F&56GHHFV]]%X&W%W%W%8$7O7O7O
 
     %233!0Q   ;!	 !	r   c                 B   t          t          j                            t          |                    }t          j        |t                    }|                                 |d         D ]}|d         }|d         |d         |d         |d         |d         d	}t          j
        |          }|                     ||d
                    ||d         |d         |d         |d         |d         |d         |d         |d         |d         |d                              d S )NrA   rC   r<   r(   r.   r/   r0   r1   r-   zFUA: {0}
 expected<{1} {2} {3} {4} {5}> != actual<{6} {7} {8} {9} {10}>)rD   r   r   r   r   rE   rF   r   rG   r   ParseOSr:   r;   rM   s           r   r   zParseTest.runOSTestsFromYAML   s=   %7CCDDy*===%l3 	 	I )*= > $H-"7+"7+"7+(7 H './@AAFY``%X&W%W%W%]+8$7O7O7O=)    	 	r   c                    t          t          j                            t          |                    }t          j        |t                    }|                                 |d         D ]}|d         }|d         |d         |d         d}t          j
        |          }|                     ||d                    ||d         |d         |d         |d         |d         |d                              d S )	NrA   rC   r<   r(   r)   r*   r'   z5UA: {0}
 expected<{1} {2} {3}> != actual<{4} {5} {6}>)rD   r   r   r   r   rE   rF   r   rG   r   ParseDevicer:   r;   rM   s           r   r   z ParseTest.runDeviceTestsFromYAML   s   %7CCDDy*===%l3 	 	I )*= > $H-"7+"7+ H '23DEEFHOO%X&W%W%8$7O7O    	 	r   N)__name__
__module____qualname__r   r   r   r   r!   r#   r?   r   r   r    r   r   r
   r
   9   s        
 
 

X X X
 
 


 
 


 
 

 
 


 
 
<& & &P# # #J    r   r
   c                        e Zd Zd Zd Zd ZdS )GetFiltersTestc                 b    d}t          j        |d           }|                     i |           d S )Nfoojs_user_agent_stringr   
GetFiltersr:   r   r<   filterss      r   $testGetFiltersNoMatchesGiveEmptyDictz3GetFiltersTest.testGetFiltersNoMatchesGiveEmptyDict   sB    !#.D
 
 
 	W%%%%%r   c                 f    d}t          j        |d          }|                     ddi|           d S )Nr]   barr^   r_   r`   rb   s      r   testGetFiltersJsUaPassedThroughz.GetFiltersTest.testGetFiltersJsUaPassedThrough   sH    !#.E
 
 
 	0%8'BBBBBr   c                 j    d}t          j        |dd          }|                     ddd|           d S )NzMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)rf   r]   )r_   js_user_agent_familyr`   rb   s      r   *testGetFiltersJsUserAgentFamilyAndVersionsz9GetFiltersTest.testGetFiltersJsUserAgentFamilyAndVersions   s^    : 	
 $.EPU
 
 
 	%*EJJG	
 	
 	
 	
 	
r   N)rV   rW   rX   rd   rg   rj   rY   r   r   r[   r[      sD        & & &C C C
 
 
 
 
r   r[   c                   :     e Zd Z fdZ fdZd Zd Zd Z xZS )TestDeprecationWarningsc                     t          t          |                                            t          j        dt
                     dS )zIn Python 2.7, catch_warnings apparently does not do anything if
        the warning category is not active, whereas in 3(.6 and up) it
        seems to work out of the box.
        alwaysN)superrl   setUpwarningssimplefilterDeprecationWarningr   	__class__s    r   rp   zTestDeprecationWarnings.setUp  s<    
 	%t,,22444h(:;;;;;r   c                 |    t          j                     t          t          |                                            d S N)rq   resetwarningsro   rl   tearDownrt   s    r   ry   z TestDeprecationWarnings.tearDown  s7     	   %t,,5577777r   c                    t          j        d          5 }t          j        d           d d d            n# 1 swxY w Y   |                     t          |          d           |                     |d         j        t                     d S NTrecord    r   )rq   catch_warningsr   ParseWithJSOverridesr:   rJ   categoryrs   r   wss     r   test_parser_deprecationz/TestDeprecationWarnings.test_parser_deprecation  s    $D111 	7R22666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7R!$$$A);<<<<<   7;;c                    t          j        d          5 }t          j        d           d d d            n# 1 swxY w Y   |                     t          |          d           |                     |d         j        t                     d S r{   )rq   r   r   Prettyr:   rJ   r   rs   r   s     r   test_printer_deprecationz0TestDeprecationWarnings.test_printer_deprecation  s    $D111 	)R$R(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)R!$$$A);<<<<<r   c                    t           j        dft           j        dft           j        dft           j        dffD ]\  }}t           j                                         t          j        d          5 } |dd           d d d            n# 1 swxY w Y   | 	                    t          |          |           |D ]"}| 	                    |j        t                     #d S )N   r   Tr|   zsome random thing)js_attribute)r   r9   rH   rS   rU   rK   clearrq   r   r:   rJ   r   rs   )r   parsercountr   ws        r   test_js_bits_deprecationz0TestDeprecationWarnings.test_js_bits_deprecation"  s3   $a(-q1&**A.	
 	A 	AMFE *00222(555 ?*>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SWWe,,, A A  -?@@@@A	A 	As   /B		B	B	)	rV   rW   rX   rp   ry   r   r   r   __classcell__)ru   s   @r   rl   rl     s        < < < < <8 8 8 8 8= = == = =A A A A A A Ar   rl   c                   f    e Zd Z ej        ej        dk     d          d             Zd Zd Z	d Z
dS )ErrTest)r   z*bytes and str are not differentiated in P2c                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nr   assertRaises	TypeErrorr   r9   r   s    r   
test_byteszErrTest.test_bytes2  s     y)) 	) 	)#C(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)   =AAc                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   s    r   test_intzErrTest.test_int9  s    y)) 	' 	'#A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   c                     |                      t                    5  t          j        g            d d d            d S # 1 swxY w Y   d S rw   r   r   s    r   	test_listzErrTest.test_list=      y)) 	( 	(#B'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r   c                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )NrY   r   r   s    r   
test_tuplezErrTest.test_tupleA  r   r   N)rV   rW   rX   unittestskipIfsysversion_infor   r   r   r   rY   r   r   r   r   1  sy        X_4!M ) ) )' ' '( ( (( ( ( ( (r   r   __main__)"__doc__
__future__r   r   
__author__loggingr   platformrer   r   rq   rE   python_implementationr   r   ImportError	getLoggerrV   warning	ua_parserr   r   r   abspathdirname__file__r   TestCaser
   r[   rl   r   mainrY   r   r   <module>r      sQ     9 8 8 8 8 8 8 8.
  				  				 



   !8!##v--$2222222 $ $ $(##++*	
 	
 	
 	$#######$ ( ' ' ' ' 'W\\GOOBGOOH--..  
m m m m m! m m m`
 
 
 
 
X& 
 
 
:(A (A (A (A (Ah/ (A (A (AV( ( ( ( (h ( ( (* zHMOOOOO s   A .B ?B 