diff --git a/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs b/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs
index f027c7fa9e..fa481d6732 100644
--- a/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs
+++ b/src/System.Management.Automation/FormatAndOutput/common/FormatXMLWriter.cs
@@ -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
{
diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-FormatData.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-FormatData.Tests.ps1
index 2920a21f4c..447a8ae402 100644
--- a/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-FormatData.Tests.ps1
+++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/Export-FormatData.Tests.ps1
@@ -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=@"
+
+
+
+ ExportFormatDataName
+
+ ExportFormatDataTypeName
+
+
+
+
+
+
+
+ Guid
+
+
+
+
+
+
+
+
+"@
+ $expected = @"
+
+
+
+
+ ExportFormatDataName
+
+ ExportFormatDataTypeName
+
+
+
+
+
+
+
+ Guid
+
+
+
+
+
+
+
+
+"@ -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()
+ }
}
}
diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/formatdata.tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/formatdata.tests.ps1
deleted file mode 100644
index ea3a89bd96..0000000000
--- a/test/powershell/Modules/Microsoft.PowerShell.Utility/formatdata.tests.ps1
+++ /dev/null
@@ -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'
- }
- }
-}