71 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using StellaOps.Feedser.Normalization.Identifiers;
 | |
| 
 | |
| namespace StellaOps.Feedser.Normalization.Tests;
 | |
| 
 | |
| public sealed class CpeNormalizerTests
 | |
| {
 | |
|     [Fact]
 | |
|     public void TryNormalizeCpe_Preserves2Dot3Format()
 | |
|     {
 | |
|         var input = "cpe:2.3:A:Example:Product:1.0:*:*:*:*:*:*:*";
 | |
| 
 | |
|         var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
 | |
| 
 | |
|         Assert.True(success);
 | |
|         Assert.Equal("cpe:2.3:a:example:product:1.0:*:*:*:*:*:*:*", normalized);
 | |
|     }
 | |
| 
 | |
|     [Fact]
 | |
|     public void TryNormalizeCpe_UpgradesUriBinding()
 | |
|     {
 | |
|         var input = "cpe:/o:RedHat:Enterprise_Linux:8";
 | |
| 
 | |
|         var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
 | |
| 
 | |
|         Assert.True(success);
 | |
|         Assert.Equal("cpe:2.3:o:redhat:enterprise_linux:8:*:*:*:*:*:*:*", normalized);
 | |
|     }
 | |
| 
 | |
|     [Fact]
 | |
|     public void TryNormalizeCpe_InvalidInputReturnsFalse()
 | |
|     {
 | |
|         var success = IdentifierNormalizer.TryNormalizeCpe("not-a-cpe", out var normalized);
 | |
| 
 | |
|         Assert.False(success);
 | |
|         Assert.Null(normalized);
 | |
|     }
 | |
| 
 | |
|     [Fact]
 | |
|     public void TryNormalizeCpe_DecodesPercentEncodingAndEscapes()
 | |
|     {
 | |
|         var input = "cpe:/a:Example%20Corp:Widget%2fSuite:1.0:update:%7e:%2a";
 | |
| 
 | |
|         var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
 | |
| 
 | |
|         Assert.True(success);
 | |
|         Assert.Equal(@"cpe:2.3:a:example\ corp:widget\/suite:1.0:update:*:*:*:*:*:*", normalized);
 | |
|     }
 | |
| 
 | |
|     [Fact]
 | |
|     public void TryNormalizeCpe_ExpandsEditionFields()
 | |
|     {
 | |
|         var input = "cpe:/a:Vendor:Product:1.0:update:~pro~~windows~~:en-US";
 | |
| 
 | |
|         var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
 | |
| 
 | |
|         Assert.True(success);
 | |
|         Assert.Equal("cpe:2.3:a:vendor:product:1.0:update:*:en-us:pro:*:windows:*", normalized);
 | |
|     }
 | |
| 
 | |
|     [Fact]
 | |
|     public void TryNormalizeCpe_PreservesEscapedCharactersIn23()
 | |
|     {
 | |
|         var input = @"cpe:2.3:a:example:printer\/:1.2.3:*:*:*:*:*:*:*";
 | |
| 
 | |
|         var success = IdentifierNormalizer.TryNormalizeCpe(input, out var normalized);
 | |
| 
 | |
|         Assert.True(success);
 | |
|         Assert.Equal(@"cpe:2.3:a:example:printer\/:1.2.3:*:*:*:*:*:*:*", normalized);
 | |
|     }
 | |
| }
 |