winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

PSUnitResult.cs (6213B)


      1 // -----------------------------------------------------------------------------
      2 // <copyright file="PSUnitResult.cs" company="Microsoft Corporation">
      3 //     Copyright (c) Microsoft Corporation. Licensed under the MIT License.
      4 // </copyright>
      5 // -----------------------------------------------------------------------------
      6 
      7 namespace Microsoft.WinGet.Configuration.Engine.PSObjects
      8 {
      9     using Microsoft.Management.Configuration;
     10     using Microsoft.WinGet.Configuration.Engine.Exceptions;
     11     using Microsoft.WinGet.Resources;
     12 
     13     /// <summary>
     14     /// Unit result.
     15     /// </summary>
     16     public abstract class PSUnitResult
     17     {
     18         /// <summary>
     19         /// Initializes a new instance of the <see cref="PSUnitResult"/> class.
     20         /// </summary>
     21         /// <param name="unit">Unit.</param>
     22         /// <param name="resultInfo">Result info.</param>
     23         internal PSUnitResult(ConfigurationUnit unit, IConfigurationUnitResultInformation resultInfo)
     24         {
     25             this.Type = unit.Type;
     26             this.ResultCode = resultInfo.ResultCode?.HResult ?? ErrorCodes.S_OK;
     27 
     28             if (this.ResultCode != ErrorCodes.S_OK)
     29             {
     30                 this.Message = this.GetUnitMessage(unit, resultInfo);
     31                 this.Description = resultInfo.Description.Trim();
     32                 this.Details = resultInfo.Details;
     33             }
     34         }
     35 
     36         /// <summary>
     37         /// Gets the unit type.
     38         /// </summary>
     39         public string Type { get; private init; }
     40 
     41         /// <summary>
     42         /// Gets the result code.
     43         /// </summary>
     44         public int ResultCode { get; private init; }
     45 
     46         /// <summary>
     47         /// Gets the message.
     48         /// </summary>
     49         public string? Message { get; private init; }
     50 
     51         /// <summary>
     52         /// Gets the short description.
     53         /// </summary>
     54         public string? Description { get; private init; }
     55 
     56         /// <summary>
     57         /// Gets detailed information.
     58         /// </summary>
     59         public string? Details { get; private init; }
     60 
     61         private string GetUnitMessage(ConfigurationUnit unit, IConfigurationUnitResultInformation resultInfo)
     62         {
     63             if (resultInfo.ResultCode == null)
     64             {
     65                 if (unit.State == ConfigurationUnitState.Skipped)
     66                 {
     67                     return string.Format(Resources.ConfigurationUnitSkipped, "null");
     68                 }
     69 
     70                 return string.Format(Resources.ConfigurationUnitFailed, "null");
     71             }
     72 
     73             int resultCode = resultInfo.ResultCode.HResult;
     74             switch (resultCode)
     75             {
     76                 case ErrorCodes.WingetConfigErrorDuplicateIdentifier:
     77                     return string.Format(Resources.ConfigurationUnitHasDuplicateIdentifier, unit.Identifier);
     78                 case ErrorCodes.WingetConfigErrorMissingDependency:
     79                     return string.Format(Resources.ConfigurationUnitHasMissingDependency, resultInfo.Details);
     80                 case ErrorCodes.WingetConfigErrorAssertionFailed:
     81                     return Resources.ConfigurationUnitAssertHadNegativeResult;
     82                 case ErrorCodes.WinGetConfigUnitNotFound:
     83                     return Resources.ConfigurationUnitNotFoundInModule;
     84                 case ErrorCodes.WinGetConfigUnitNotFoundRepository:
     85                     return Resources.ConfigurationUnitNotFound;
     86                 case ErrorCodes.WinGetConfigUnitMultipleMatches:
     87                     return Resources.ConfigurationUnitMultipleMatches;
     88                 case ErrorCodes.WinGetConfigUnitInvokeGet:
     89                     return Resources.ConfigurationUnitFailedDuringGet;
     90                 case ErrorCodes.WinGetConfigUnitInvokeTest:
     91                     return Resources.ConfigurationUnitFailedDuringTest;
     92                 case ErrorCodes.WinGetConfigUnitInvokeSet:
     93                     return Resources.ConfigurationUnitFailedDuringSet;
     94                 case ErrorCodes.WinGetConfigUnitModuleConflict:
     95                     return Resources.ConfigurationUnitModuleConflict;
     96                 case ErrorCodes.WinGetConfigUnitImportModule:
     97                     return Resources.ConfigurationUnitModuleImportFailed;
     98                 case ErrorCodes.WinGetConfigUnitInvokeInvalidResult:
     99                     return Resources.ConfigurationUnitReturnedInvalidResult;
    100                 case ErrorCodes.WingetConfigErrorManuallySkipped:
    101                     return Resources.ConfigurationUnitManuallySkipped;
    102                 case ErrorCodes.WingetConfigErrorDependencyUnsatisfied:
    103                     return Resources.ConfigurationUnitNotRunDueToDependency;
    104                 case ErrorCodes.WinGetConfigUnitSettingConfigRoot:
    105                     return Resources.WinGetConfigUnitSettingConfigRoot;
    106                 case ErrorCodes.WinGetConfigUnitImportModuleAdmin:
    107                     return Resources.WinGetConfigUnitImportModuleAdmin;
    108             }
    109 
    110             switch (resultInfo.ResultSource)
    111             {
    112                 case ConfigurationUnitResultSource.ConfigurationSet:
    113                     return string.Format(Resources.ConfigurationUnitFailedConfigSet, resultCode);
    114                 case ConfigurationUnitResultSource.Internal:
    115                     return string.Format(Resources.ConfigurationUnitFailedInternal, resultCode);
    116                 case ConfigurationUnitResultSource.Precondition:
    117                     return string.Format(Resources.ConfigurationUnitFailedPrecondition, resultCode);
    118                 case ConfigurationUnitResultSource.SystemState:
    119                     return string.Format(Resources.ConfigurationUnitFailedSystemState, resultCode);
    120                 case ConfigurationUnitResultSource.UnitProcessing:
    121                     return string.Format(Resources.ConfigurationUnitFailedUnitProcessing, resultCode);
    122             }
    123 
    124             if (unit.State == ConfigurationUnitState.Skipped)
    125             {
    126                 return string.Format(Resources.ConfigurationUnitSkipped, resultCode);
    127             }
    128 
    129             return string.Format(Resources.ConfigurationUnitFailed, resultCode);
    130         }
    131     }
    132 }