
    磥i5                         d Z ddlZddlZddlZddlZddlmZ  G d d      Zedk(  r* e       Z	e	j                         Z ej                  e       yy)z
Playwright MCP Installation Validation Tests
Tests for verifying the correct installation and functionality of Playwright MCP
    N)Pathc                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
PlaywrightMCPValidatorz)Validator for Playwright MCP installationc                 r    i | _         t        d      | _        t        d      | _        t        d      | _        y )Nz&/home/jay/workspace/mcp/playwright-mcpz/home/jay/.cache/ms-playwright/z/home/jay/.claude/settings.json)resultsr   playwright_mcp_path
cache_pathsettings_json_path)selfs    1/home/jay/workspace/teams/dev1/test_task_134_1.py__init__zPlaywrightMCPValidator.__init__   s2    #'(P#Q @A"&'H"I    c                 (   ddi d}	 | j                   dz  }|j                         s
d| |d<   |S g d}g }|D ]'  }||z  j                         r|j                  |       ) |rdd	j                  |       |d<   |S d
| j                    d}t	        j
                  |ddd      }d|j                  v r%d|d<   d|d<   d|d   d<   t        |      |d   d<   |S d|j                   |d<   	 |S # t        $ r}t        |      |d<   Y d}~|S d}~ww xY w)z3Test 1: Verify @playwright/mcp package is installedFAIL statusmessagedetailsznode_modules/@playwright/mcpzDirectory not found: r   )zpackage.jsonzindex.jszcli.jszMissing files: , cd z && npm ls @playwright/mcpTshellcapture_outputtextz@playwright/mcp@0.0.68PASSr   z&Package installed with correct version0.0.68r   versionpathz2Unexpected version or installation issue. Output: N)	r   existsappendjoin
subprocessrunstdoutstr	Exception)	r   resultmcp_diressential_filesmissing_filesfilecmdoutputes	            r   test_package_installationz0PlaywrightMCPValidator.test_package_installation   s`   "rbA	'..1OOG>>#&;G9$Ey! EOM' /$..0!((./ &5dii6N5O$Py! 0011KLC^^CtDtTF'6==8#)x $Ly!/7y!),,/Ly!&)  'YY_YfYfXg$hy!
   	' #AF9	's/   (C/ C/ -C/ >AC/ C/ /	D8DDc                    ddi d}	 | j                   j                         sd| j                    |d<   |S t        | j                   j                  d            }|sd|d<   |S t        | j                   j                  d            }|sd	|d<   |S d
|d<   d|d<   |D cg c]  }|j                   c}|d   d<   t        |      |d   d<   |S c c}w # t        $ r}t        |      |d<   Y d}~|S d}~ww xY w)z6Test 2: Verify Chromium browser binaries are installedr   r   r   zCache directory not found: r   z	chromium*zNo chromium directories foundz*/INSTALLATION_COMPLETEz'INSTALLATION_COMPLETE markers not foundr   r   z$Chromium binaries properly installedr   chromium_dirsinstallation_complete_countN)r	   r    listglobnamelenr'   r&   )r   r(   r2   installation_complete_filesdr/   s         r   test_chromium_binariesz-PlaywrightMCPValidator.test_chromium_binaries=   s   "rbA	'??))+&A$//AR$Sy! !!5!5k!BCM $Cy! +/t/C/CD]/^*_'.$My!%F8 FF9BO1PQ!&&1PF9o.?BC^?_F9;<
  2Q  	' #AF9	's:   -C ,C #,C C C1C C 	C4C//C4c           
         ddi d}	 t        j                  ddddi dd	d
dd      }d| j                   d| d}t        j                  |ddd      }|j
                  sd|d<   |S 	 t        j                  |j
                  j                               }d|vrd|d<   |S d|d   vrd|d<   |S |d   d   }|j                  d      dk7  rd|j                  d       |d<   |S |j                  d      dk7  rd|j                  d       |d<   |S d|d<   d |d<   |j                  d      |d!   d"<   |j                  d      |d!   d#<   |d   j                  d$      |d!   d%<   |S # t         j                  $ r#}d&| d'|j
                  d(d)  |d<   Y d(}~|S d(}~ww xY w# t        $ r}t        |      |d<   Y d(}~|S d(}~ww xY w)*z.Test 3: Test MCP protocol initialize handshaker   r   r   z2.0   
initializez
2024-11-05testz1.0)r6   r   )protocolVersioncapabilities
clientInfo)jsonrpcidmethodparamsr   z
 && echo 'z<' | timeout 15 npx -y @playwright/mcp --headless 2>/dev/nullTr   No response from MCP serverr   r(   zMissing 'result' in response
serverInfozMissing 'serverInfo' in resultr6   
PlaywrightzUnexpected server name: r   r   zUnexpected version: r   r   zMCP handshake successfulr   server_nameserver_versionr?   protocol_versionzFailed to parse JSON response: z. Raw output: N   )jsondumpsr   r#   r$   r%   loadsstripgetJSONDecodeErrorr'   r&   )r   r(   initialize_msgr-   r.   responseserver_infor/   s           r   test_mcp_handshakez)PlaywrightMCPValidator.test_mcp_handshake\   s4   "rbA3	'!ZZ &'3$&+1e"D		) 	N 001N;K  LH  IC^^CtDtTF==$Ay!m::fmm&9&9&;< 8+(FF9%!Mx'99(HF9%!M&x0>??6*l:*B;??SYCZB[(\F9%!M??9-9*>{y?Y>Z([F9%!M#)x $>y!3>??63Jy!-06Aooi6Py!"238@8J8N8NO`8ay!"45  '' m&EaSW]WdWdeifiWjVk$ly!
 m  	' #AF9	'sU   AF )7E% !E% /4E% $,E% AE% %F8FF FF 	G 'F;;G c                 ,   ddi d}	 d}d| j                    d}t        j                  |dt        j                  t        j                  t        j                  d      }|j	                  |d	
      \  }}|sd|d<   |S g }|j                         j                  d      D ]8  }|j                         s	 |j                  t        j                  |             : d}	|D ]  }
|
j                  d      dk(  sd|
v s|
}	 n |	sd|d<   |S |	d   j                  dg       }|sd|d<   |S |D ch c]  }|d   	 }}g d}|D cg c]	  }||vs| }}|r*ddj                  |       |d<   t        |      |d   d<   |S d|d<   d|d<   t        |      |d   d<   ||d   d<   t        |      |d   d <   |S # t        j                  $ r Y *w xY wc c}w c c}w # t        j                  $ r	 d!|d<   Y |S t         $ r}t#        |      |d<   Y d}~|S d}~ww xY w)"z1Test 4: Verify tools/list returns available toolsr   r   r   a  {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
{"jsonrpc":"2.0","id":2,"method":"notifications/initialized"}
{"jsonrpc":"2.0","id":3,"method":"tools/list","params":{}}
r   z< && timeout 15 npx -y @playwright/mcp --headless 2>/dev/nullT)r   stdinr%   stderrr      )inputtimeoutrF   r   
NrC      r(   zNo tools/list response foundtoolszNo tools returnedr6   )browser_navigatebrowser_clickbrowser_take_screenshotzMissing essential tools: r   r   available_toolsr   r   z!Tools list retrieved successfullytotal_toolsessential_tools_found	all_toolsz MCP server communication timeout)r   r#   PopenPIPEcommunicaterP   splitr!   rM   rO   rR   rQ   r"   r4   r7   TimeoutExpiredr'   r&   )r   r(   messagesr-   processr.   _	responseslinetools_responserespr_   tool
tool_namesessential_toolstmissing_toolsr/   s                     r   test_tools_listz&PlaywrightMCPValidator.test_tools_list   sw   "rbA@	'O  0011mnC &&4zz!TG  ++(B+GIFA$Ay! I,,T2 !::<!!((D)9:! "N! 88D>Q&8t+;%)N
 "$By!"8,00"=E$7y! 4994$v,9J9^O(7O11J;NQOMO&?		-@X?Y$Zy!7;J7Gy!"34%F8 CF9/25zF9m,9HF956-1*-=F9k* Q  // ! !( :O (( 	C BF9   	' #AF9	's   A5G >4G 4$F3G 6G ;G 	G 'G +G7
G 	GG-G =4G 3G
G 	G

G H2H:HHc                    ddi d}	 | j                   j                         sd| j                    |d<   |S t        | j                   d      5 }t        j                  |      }ddd       d|d	   d
<   dvrd|d<   |S |d   }d|vr&d|d<   t        |j                               |d	   d<   |S |d   }|j                  d      dk7  rd|j                  d       d|d<   |S |j                  dg       }t        |t
              sd|d<   |S d|vrd|d<   ||d	   d<   |S d|vrd|d<   ||d	   d<   |S d|vrd|d<   |S d|d<   d|d<   t        |j                               |d	   d<   |j                  d      |d	   d <   ||d	   d!<   d|d	   d"<   |S # 1 sw Y   +xY w# t        j                  $ r}d#| |d<   Y d}~|S d}~wt        $ r}t        |      |d<   Y d}~|S d}~ww xY w)$z*Test 5: Verify settings.json configurationr   r   r   zsettings.json not found: r   rNTr   
json_valid
mcpServersz)mcpServers key not found in settings.json
playwrightz.playwright server not configured in mcpServersconfigured_serverscommandnpxzExpected command 'npx', got ''argszargs should be a listz
--headlessz--headless not found in argsz@playwright/mcpz!@playwright/mcp not found in argsopenclawz&openclaw server configuration was lostr   r   z$settings.json configuration is validmcp_serversplaywright_commandplaywright_argsopenclaw_preservedzInvalid JSON in settings.json: )r
   r    openrM   loadr4   keysrQ   
isinstancerR   r'   r&   )r   r(   fsettingsr   playwright_configr   r/   s           r   test_settings_jsonz)PlaywrightMCPValidator.test_settings_json   s}   "rbA=	'**113&?@W@W?X$Yy! d--s3 (q99Q<( /3F9l+ 8+$Oy!"<0K ;.$Ty!:>{?O?O?Q:Ry!"67 +L 9 !$$Y/58&CDUDYDYZcDdCeef$gy!$((4DdD)$;y!4'$By!,0y!&) ,$Gy!,0y!&) ,$Ly!%F8 FF9/3K4D4D4F/GF9m,6G6K6KI6VF92337F9/06:F923 s( (h ## 	F"A! EF9   	' #AF9	'sk   -F F F"F =.F ,2F (F F F .
F 9AF FF G+F99GGGc                    t        d       t        d       t        d       t                d| j                  fd| j                  fd| j                  fd| j                  fd| j
                  fg}d}|D ]  \  }}t        d	|        t        d
        |       }|| j                  |<   |d   }t        d|        t        d|d           |d   rt        d       |d   j                         D ]u  \  }}t        |t        t        f      rIt        t        |            dkD  r2t        d| dt        |      j                   dt        |       d       et        d| d|        w t                |dk7  sd}
 t        d       t        d       t        d       t        d | j                  j!                         D              }	t        | j                        }
t        d|	 d|
        | j                  j                         D ]!  \  }}|d   dk(  rdnd}t        | d|        # t                |rt        d        y!t        d"       y#)$zRun all validation testszP================================================================================z,Playwright MCP Installation Validation TestszPackage InstallationzChromium BinarieszMCP Handshakez
Tools ListzSettings ConfigurationTzTest: zP--------------------------------------------------------------------------------r   zStatus: z	Message: r   r   zDetails:d   z  z: [Large output - z with z items]z: r   FSummaryc              3   2   K   | ]  }|d    dk(  sd  yw)r   r   r<   N ).0rz   s     r   	<genexpr>z7PlaywrightMCPValidator.run_all_tests.<locals>.<genexpr>Q  s     Uq{f?T1Us   zPassed: /z[PASS]z[FAIL] zFAll tests PASSED! Playwright MCP is properly installed and configured.r   z3Some tests FAILED. Please review the details above.r<   )printr0   r:   rV   rx   r   r   itemsr   r4   dictr7   r&   type__name__sumvalues)r   tests
all_passed	test_name	test_funcr(   r   keyvaluepassed_counttotal_countstatus_symbols               r   run_all_testsz$PlaywrightMCPValidator.run_all_tests$  sK   h<=h $T%C%CD $"="=>d5564//0%t'>'>?
 
$) 	# IyF9+&'(O[F&,DLL#H%FHVH%&IfY/012i j!"("3"9"9"; 3JC!%$63s5z?S;P3%'9$u+:N:N9OvVYZ_V`Uaahij3%r%12	3 G"
-	#2 	hihUdll&9&9&;UU$,,'a}56!%!3!3!5 	2Iv(.x(8F(BHM]O1YK01	2 	Z[GHr   N)r   
__module____qualname____doc__r   r0   r:   rV   rx   r   r   r   r   r   r   r      s/    3J%N>9vFPCJ<r   r   __main__)r   rM   osr#   syspathlibr   r   r   	validatorr   	exit_codeexitr   r   r   <module>r      s[   
  	  
 S Sl
 z&(I'')ICHHY r   