@@ -812,6 +812,8 @@ foreach ($inputFile in $inputFiles) {
812812 $projectedJsonCanonical = $null
813813 $projectedReference = ' '
814814 $projectionError = ' '
815+ $jsonOracleValues = $null
816+ $jsonOracleCanonical = $null
815817 $eventExpected = $null
816818 $eventActual = $null
817819 $jsonExpected = $null
@@ -879,6 +881,19 @@ foreach ($inputFile in $inputFiles) {
879881 }
880882 }
881883
884+ if ($hasJson -and ($CompareJson -or ($CompareEmitYaml -and $hasEmitYaml ))) {
885+ $expectedDocuments = Split-YamlSuiteJsonDocument - Text (
886+ [System.IO.File ]::ReadAllText($jsonPath , [System.Text.UTF8Encoding ]::new($false , $true ))
887+ )
888+ $expectedValues = [System.Collections.Generic.List [object ]]::new()
889+ foreach ($document in $expectedDocuments ) {
890+ $expectedValues.Add ((ConvertFrom-Json - InputObject $document - AsHashtable - NoEnumerate))
891+ }
892+ $jsonOracleValues = [object []] $expectedValues.ToArray ()
893+ $jsonOracleCanonical = ConvertTo-YamlSuiteCanonicalValue `
894+ - Value $jsonOracleValues - SortMappings
895+ }
896+
882897 if ($CompareEvents -and $hasEvent ) {
883898 if ($null -eq $representation -or $expectsError ) {
884899 $eventResult = ' NotApplicable'
@@ -906,22 +921,13 @@ foreach ($inputFile in $inputFiles) {
906921 if ($syntaxResult -eq ' PolicyDifference' ) { $jsonReason = $syntaxReason }
907922 if ($projectionError ) { $jsonReason = $projectionError }
908923 } else {
909- $expectedDocuments = Split-YamlSuiteJsonDocument - Text (
910- [System.IO.File ]::ReadAllText($jsonPath , [System.Text.UTF8Encoding ]::new($false , $true ))
911- )
912- $expectedValues = [System.Collections.Generic.List [object ]]::new()
913- foreach ($document in $expectedDocuments ) {
914- $expectedValues.Add ((ConvertFrom-Json - InputObject $document - AsHashtable - NoEnumerate))
915- }
916- $expectedCanonical = ConvertTo-YamlSuiteCanonicalValue `
917- - Value ([object []] $expectedValues.ToArray ()) - SortMappings
918- $jsonExpected = $expectedCanonical
924+ $jsonExpected = $jsonOracleCanonical
919925 $jsonActual = $projectedJsonCanonical
920- if ($projectedJsonCanonical -ceq $expectedCanonical ) {
926+ if ($projectedJsonCanonical -ceq $jsonOracleCanonical ) {
921927 $jsonResult = ' Pass'
922928 } else {
923929 $reason = Get-YamlSuiteJsonPolicyReason `
924- - ExpectedValues ([ object []] $expectedValues .ToArray ()) `
930+ - ExpectedValues $jsonOracleValues `
925931 - ActualValues ([object []] $projectedValues )
926932 if ($reason ) {
927933 $jsonResult = ' PolicyDifference'
@@ -990,14 +996,30 @@ foreach ($inputFile in $inputFiles) {
990996 $fixtureReference = ConvertTo-YamlSuiteReferenceSignature `
991997 - Value ([object []] $fixtureValues )
992998
993- if ($null -ne $projectedCanonical -and
994- ($fixtureCanonical -cne $projectedCanonical -or
995- $fixtureReference -cne $projectedReference )) {
999+ $fixtureOracleCanonical = $null
1000+ $fixtureOracleActual = $fixtureCanonical
1001+ $fixtureReferenceMismatch = $false
1002+ if ($null -ne $projectedCanonical ) {
1003+ $fixtureOracleCanonical = $projectedCanonical
1004+ $fixtureReferenceMismatch = $fixtureReference -cne $projectedReference
1005+ } elseif ($null -ne $jsonOracleCanonical ) {
1006+ $fixtureOracleCanonical = $jsonOracleCanonical
1007+ $fixtureOracleActual = ConvertTo-YamlSuiteCanonicalValue `
1008+ - Value ([object []] $fixtureValues ) - SortMappings
1009+ }
1010+
1011+ if ($null -eq $fixtureOracleCanonical ) {
1012+ $emitYamlResult = ' Fail'
1013+ $emitYamlReason = ' EmitYamlOracleUnavailable'
1014+ } elseif ($fixtureOracleActual -cne $fixtureOracleCanonical -or
1015+ $fixtureReferenceMismatch ) {
9961016 $emitYamlResult = ' Fail'
9971017 $emitYamlReason = ' EmitYamlRepresentationMismatch'
998- $emitYamlExpected = $projectedCanonical
999- $emitYamlActual = $fixtureCanonical
1000- $emitYamlExpectedReference = $projectedReference
1018+ $emitYamlExpected = $fixtureOracleCanonical
1019+ $emitYamlActual = $fixtureOracleActual
1020+ if ($null -ne $projectedCanonical ) {
1021+ $emitYamlExpectedReference = $projectedReference
1022+ }
10011023 $emitYamlActualReference = $fixtureReference
10021024 } else {
10031025 $fixtureEmittedDocuments = [System.Collections.Generic.List [string ]]::new()
0 commit comments