Private/ValidationHelpers.ps1

# Returns the XLIFF 1.2 target states accepted by validation commands.
function Get-XliffValidState {
    [CmdletBinding()]
    param()

    return @(
        'final'
        'new'
        'needs-adaptation'
        'needs-l10n'
        'needs-review'
        'needs-review-adaptation'
        'needs-review-l10n'
        'needs-review-translation'
        'needs-translation'
        'signed-off'
        'translated'
    )
}

function Test-XliffTargetMissing {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [XliffTranslationUnit]$Unit
    )

    return [string]::IsNullOrWhiteSpace($Unit.Target)
}

function Test-XliffStateInvalid {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [XliffTranslationUnit]$Unit
    )

    if ([string]::IsNullOrWhiteSpace($Unit.State)) {
        return $false
    }

    return (Get-XliffValidState) -notcontains $Unit.State
}

function New-XliffValidationResult {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Rule,

        [Parameter(Mandatory)]
        [ValidateSet('Info', 'Warning', 'Error')]
        [string]$Severity,

        [string]$Id,

        [string]$Message,

        [string]$Path
    )

    [pscustomobject]@{
        PSTypeName = 'XliffParser.ValidationResult'
        Rule       = $Rule
        Severity   = $Severity
        Id         = $Id
        Message    = $Message
        Path       = $Path
    }
}