
    Vh                        d 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m	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZ  G d de	      Zy)#Sanity test using PSScriptAnalyzer.    )annotationsN   )SanityVersionNeutralSanityMessageSanityFailureSanitySuccessSanitySkippedSanityTargetsSANITY_ROOT   )
TestResult)
TestTarget)SubprocessErrorfind_executableANSIBLE_TEST_DATA_ROOT)run_command)SanityConfig)data_contextc                  2    e Zd ZdZedd       ZddZddZy)	
PslintTestr   c                     y)zError code for ansible-test matching the format used by the underlying test program, or None if the program does not use error codes.AnsibleTest )selfs    ]/home/dcms/DCMS/lib/python3.12/site-packages/ansible_test/_internal/commands/sanity/pslint.py
error_codezPslintTest.error_code1   s         c                    |D cg c]3  }t         j                  j                  |j                        d   dv s2|5 c}S c c}w )z\Return the given list of test targets, filtered to include only those relevant for the test.r   )z.ps1z.psm1z.psd1)ospathsplitext)r   targetstargets      r   filter_targetszPslintTest.filter_targets6   s6    %,o60@0@0Ma0PTn0nooos
   3A A c                   | j                  |      }|j                  D cg c]  }|j                   }}t        dd      st	        | j
                        S g }|j                  j                  s|j                  r6|j                  dt        j                  j                  t        dd      g       |j                  dt        j                  j                  t        dd      g|z          d}|D ]'  }	 t        ||d	
      \  }}	d}
|	st        ||
|	|       |j&                  rt)        | j
                        S g d}t+               j,                  j.                  dz   }t1        j2                  dd|      }t1        j2                  dd|      }t1        j2                  dd|      }t5        j6                  |      }|D cg c]@  }t9        |d   |d   |d   j;                  |d      |d   xs d|d   xs d||d            B }}|j=                  ||      }|rt?        | j
                  |      S t)        | j
                        S c c}w # t        $ r/}|j                   }|j"                  }	|j$                  }
Y d }~vd }~ww xY wc c}w )Npwshwarning)requiredrequirementszsanity.pslint.ps1pslintz
pslint.ps1 T)capturer   )cmdstatusstderrstdout)InformationWarningError
ParseError/u   [‘’]'u   [“”]"u   […]z...RuleNameMessage
ScriptPathLineColumnSeverity)codemessager!   linecolumnlevel)messages) load_processorincluder!   r   r
   name
controller
is_managedr*   appendr    joinr   r   r   r   r1   r0   r/   explainr	   r   contentrootresubjsonloadsr   replaceprocess_errorsr   )r   argsr#   settingsr$   pathscmdsr1   r.   r0   r/   exseveritycwdrD   merrorss                    r   testzPslintTest.test:   sO   &&t,+2??;;;v	: ++??%%):):KK.DnVi!jklVRWW\\+xNORWWX 
	\C#!,T3!E %#fVTZ[[
	\ << ++
 n$$))C/ (#v6(#v6
E62::f%    :iL<((b16aX;#!1Z=)
   ((7 V<<TYY''w <$ # ##6s$   I2I<AJ	J $I;;J N)returnzt.Optional[str])r#   list[TestTarget]r_   r`   )rU   r   r#   r   r_   r   )__name__
__module____qualname____doc__propertyr   r%   r^   r   r   r   r   r   .   s"    - p>(r   r   )rd   
__future__r   rQ   r    rO   typingtr,   r   r   r   r	   r
   r   r   r^   r   r$   r   utilr   r   r   util_commonr   configr   datar   r   r   r   r   <module>rm      sX    ) "  	 	    
J(% J(r   