mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Pretty print Export-FormatData XML output (#6691)
Pretty print Export-FormatData XML output by default. Refactor Export-FormatData tests, remove test duplications.
This commit is contained in:
@@ -41,7 +41,12 @@ namespace Microsoft.PowerShell.Commands
|
||||
|
||||
try
|
||||
{
|
||||
using (XmlWriter xmlWriter = XmlWriter.Create(streamWriter))
|
||||
var settings = new XmlWriterSettings();
|
||||
settings.Indent = true;
|
||||
settings.IndentChars = " ";
|
||||
settings.NewLineOnAttributes = true;
|
||||
|
||||
using (XmlWriter xmlWriter = XmlWriter.Create(streamWriter, settings))
|
||||
{
|
||||
var writer = new FormatXmlWriter
|
||||
{
|
||||
|
||||
@@ -1,11 +1,68 @@
|
||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License.
|
||||
Describe "Export-FormatData DRT Unit Tests" -Tags "CI" {
|
||||
It "Test basic functionality" {
|
||||
Describe "Export-FormatData" -Tags "CI" {
|
||||
BeforeAll {
|
||||
$fd = Get-FormatData
|
||||
$tempFile = Join-Path $TestDrive -ChildPath "exportFormatTest.txt"
|
||||
$results = Export-FormatData -InputObject $fd[0] -Path $tempFile
|
||||
$content = Get-Content $tempFile
|
||||
$testOutput = Join-Path -Path $TestDrive -ChildPath "outputfile"
|
||||
}
|
||||
|
||||
AfterEach {
|
||||
Remove-Item $testOutput -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
It "Can export all types" {
|
||||
try
|
||||
{
|
||||
$fd | Export-FormatData -path $TESTDRIVE\allformat.ps1xml -IncludeScriptBlock
|
||||
|
||||
$sessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
|
||||
$sessionState.Formats.Clear()
|
||||
$sessionState.Types.Clear()
|
||||
|
||||
$runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($sessionState)
|
||||
$runspace.Open()
|
||||
|
||||
$runspace.CreatePipeline("Update-FormatData -AppendPath $TESTDRIVE\allformat.ps1xml").Invoke()
|
||||
$actualAllFormat = $runspace.CreatePipeline("Get-FormatData -TypeName *").Invoke()
|
||||
|
||||
$fd.Count | Should -Be $actualAllFormat.Count
|
||||
Compare-Object $fd $actualAllFormat | Should -Be $null
|
||||
}
|
||||
finally
|
||||
{
|
||||
$runspace.Close()
|
||||
Remove-Item -Path $TESTDRIVE\allformat.ps1xml -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
|
||||
It "Works with literal path" {
|
||||
$filename = 'TestDrive:\[formats.ps1xml'
|
||||
$fd | Export-FormatData -LiteralPath $filename
|
||||
(Test-Path -LiteralPath $filename) | Should -BeTrue
|
||||
}
|
||||
|
||||
It "Should overwrite the destination file" {
|
||||
$filename = 'TestDrive:\ExportFormatDataWithForce.ps1xml'
|
||||
$unexpected = "SHOULD BE OVERWRITTEN"
|
||||
$unexpected | Out-File -FilePath $filename -Force
|
||||
$file = Get-Item $filename
|
||||
$file.IsReadOnly = $true
|
||||
$fd | Export-FormatData -Path $filename -Force
|
||||
|
||||
$actual = @(Get-Content $filename)[0]
|
||||
$actual | Should -Not -Be $unexpected
|
||||
}
|
||||
|
||||
It "should not overwrite the destination file with NoClobber" {
|
||||
$filename = "TestDrive:\ExportFormatDataWithNoClobber.ps1xml"
|
||||
$fd | Export-FormatData -LiteralPath $filename
|
||||
|
||||
{ $fd | Export-FormatData -LiteralPath $filename -NoClobber } | Should -Throw -ErrorId 'NoClobber,Microsoft.PowerShell.Commands.ExportFormatDataCommand'
|
||||
}
|
||||
|
||||
It "Test basic functionality" {
|
||||
Export-FormatData -InputObject $fd[0] -Path $testOutput
|
||||
$content = Get-Content $testOutput -Raw
|
||||
$formatViewDefinition = $fd[0].FormatViewDefinition
|
||||
$typeName = $fd[0].TypeName
|
||||
$content.Contains($typeName) | Should -BeTrue
|
||||
@@ -14,33 +71,86 @@ Describe "Export-FormatData DRT Unit Tests" -Tags "CI" {
|
||||
$content.Contains($formatViewDefinition[$i].Name) | Should -BeTrue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Describe "Export-FormatData" -Tags "CI" {
|
||||
|
||||
$testOutput = Join-Path -Path $TestDrive -ChildPath "outputfile"
|
||||
|
||||
AfterEach {
|
||||
Remove-Item $testOutput -Force -ErrorAction SilentlyContinue
|
||||
It "Should have a valid xml tag at the start of the file" {
|
||||
$fd | Export-FormatData -Path $testOutput
|
||||
$piped = Get-Content $testOutput -Raw
|
||||
$piped[0] | Should -BeExactly "<"
|
||||
}
|
||||
|
||||
Context "Check Export-FormatData can be called validly." {
|
||||
It "Should be able to be called without error" {
|
||||
{ Get-FormatData | Export-FormatData -Path $testOutput } | Should -Not -Throw
|
||||
}
|
||||
}
|
||||
It "Should pretty print xml output" {
|
||||
$xmlContent=@"
|
||||
<Configuration>
|
||||
<ViewDefinitions>
|
||||
<View>
|
||||
<Name>ExportFormatDataName</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>ExportFormatDataTypeName</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders />
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Guid</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
</ViewDefinitions>
|
||||
</Configuration>
|
||||
"@
|
||||
$expected = @"
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Configuration>
|
||||
<ViewDefinitions>
|
||||
<View>
|
||||
<Name>ExportFormatDataName</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>ExportFormatDataTypeName</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders />
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Guid</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
</ViewDefinitions>
|
||||
</Configuration>
|
||||
"@ -replace "`r`n?|`n", ""
|
||||
try
|
||||
{
|
||||
$testfilename = [guid]::NewGuid().ToString('N')
|
||||
$testfile = Join-Path -Path $TestDrive -ChildPath "$testfilename.ps1xml"
|
||||
Set-Content -Path $testfile -Value $xmlContent
|
||||
|
||||
Context "Check that the output is in the correct format" {
|
||||
It "Should not return an empty xml file" {
|
||||
Get-FormatData | Export-FormatData -Path $testOutput
|
||||
$piped = Get-Content $testOutput
|
||||
$piped | Should -Not -BeNullOrEmpty
|
||||
}
|
||||
$sessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
|
||||
$sessionState.Formats.Clear()
|
||||
$sessionState.Types.Clear()
|
||||
|
||||
It "Should have a valid xml tag at the start of the file" {
|
||||
Get-FormatData | Export-FormatData -Path $testOutput
|
||||
$piped = Get-Content $testOutput
|
||||
$piped[0] | Should -BeExactly "<"
|
||||
}
|
||||
$runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($sessionState)
|
||||
$runspace.Open()
|
||||
|
||||
$runspace.CreatePipeline("Update-FormatData -prependPath $testfile").Invoke()
|
||||
$runspace.CreatePipeline("Get-FormatData -TypeName 'ExportFormatDataTypeName' | Export-FormatData -Path $testOutput").Invoke()
|
||||
|
||||
$content = (Get-Content $testOutput -Raw) -replace "`r`n?|`n", ""
|
||||
|
||||
$content | Should -BeExactly $expected
|
||||
}
|
||||
finally
|
||||
{
|
||||
$runspace.Close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License.
|
||||
Describe "FormatData" -tags "Feature" {
|
||||
|
||||
Context "Export" {
|
||||
It "can export all types" {
|
||||
try
|
||||
{
|
||||
$expectAllFormat = Get-FormatData -typename *
|
||||
$expectAllFormat | Export-FormatData -path $TESTDRIVE\allformat.ps1xml -IncludeScriptBlock
|
||||
|
||||
$sessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
|
||||
$sessionState.Formats.Clear()
|
||||
$sessionState.Types.Clear()
|
||||
|
||||
$runspace = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace($sessionState)
|
||||
$runspace.Open()
|
||||
|
||||
$runspace.CreatePipeline("Update-FormatData -AppendPath $TESTDRIVE\allformat.ps1xml").Invoke()
|
||||
$actualAllFormat = $runspace.CreatePipeline("Get-FormatData -TypeName *").Invoke()
|
||||
|
||||
$expectAllFormat.Count | Should -Be $actualAllFormat.Count
|
||||
Compare-Object $expectAllFormat $actualAllFormat | Should -Be $null
|
||||
$runspace.Close()
|
||||
}
|
||||
finally
|
||||
{
|
||||
Remove-Item -Path $TESTDRIVE\allformat.ps1xml -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
|
||||
It "works with literal path" {
|
||||
$filename = 'TestDrive:\[formats.ps1xml'
|
||||
Get-FormatData -TypeName * | Export-FormatData -LiteralPath $filename
|
||||
(Test-Path -LiteralPath $filename) | Should -BeTrue
|
||||
}
|
||||
|
||||
It "should overwrite the destination file" {
|
||||
$filename = 'TestDrive:\ExportFormatDataWithForce.ps1xml'
|
||||
$unexpected = "SHOULD BE OVERWRITTEN"
|
||||
$unexpected | Out-File -FilePath $filename -Force
|
||||
$file = Get-Item $filename
|
||||
$file.IsReadOnly = $true
|
||||
Get-FormatData -TypeName * | Export-FormatData -Path $filename -Force
|
||||
|
||||
$actual = @(Get-Content $filename)[0]
|
||||
$actual | Should -Not -Be $unexpected
|
||||
}
|
||||
|
||||
It "should not overwrite the destination file with NoClobber" {
|
||||
$filename = "TestDrive:\ExportFormatDataWithNoClobber.ps1xml"
|
||||
Get-FormatData -TypeName * | Export-FormatData -LiteralPath $filename
|
||||
|
||||
{ Get-FormatData -TypeName * | Export-FormatData -LiteralPath $filename -NoClobber } | Should -Throw -ErrorId 'NoClobber,Microsoft.PowerShell.Commands.ExportFormatDataCommand'
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user