Describe "Export-Csv" { $testObject = @("test","object","array") $testCsv = "output.csv" AfterEach { Remove-Item $testCsv -Force -ErrorAction SilentlyContinue } It "Should be able to be called without error" { { $testObject | Export-Csv $testCsv } | Should Not Throw } It "Should throw if an output file isn't specified" { { $testObject | Export-Csv -ErrorAction SilentlyContinue } | Should Throw } It "Should be a string when exporting via pipe" { $testObject | Export-Csv $testCsv $piped = Get-Content $testCsv $piped[0] | Should Match ".String" } It "Should be an object when exporting via the inputObject switch" { Export-Csv -InputObject $testObject -Path $testCsv $switch = Get-Content $testCsv $switch[0] | Should Match ".Object" } It "Should output a csv file containing a string of all the lengths of each element when piped input is used" { $testObject | Export-Csv -Path $testCsv $first = "`"" + $testObject[0].Length.ToString() + "`"" $second = "`"" + $testObject[1].Length.ToString() + "`"" $third = "`"" + $testObject[2].Length.ToString() + "`"" $expected = @("#TYPE System.String", "`"Length`"", $first , $second, $third) for ( $i = 0; $i -lt $testCsv.Length; $i++) { $(Get-Content $testCsv)[$i] | Should Be $expected[$i] } } It "Should be able to use the epcsv alias without error" { { $testObject | Export-Csv -Path $testCsv } | Should Not Throw } It "Should have the same information when using the alias vs the cmdlet" { $testObject | Export-Csv -Path $testCsv $aliasObject = "alias.csv" $testObject | epcsv -Path $aliasObject for ( $i = 0; $i -lt $testCsv.Length; $i++) { $(Get-Content $testCsv)[$i] | Should Be $(Get-Content $aliasObject)[$i] } # Clean up after yourself Remove-Item $aliasObject -Force } } Describe "Export-Csv DRT Unit Tests" -Tags DRT{ $filePath = Join-Path $TestDrive -ChildPath "test.csv" $newLine = [environment]::NewLine It "Test basic function works well" { $input = [pscustomobject]@{ "P1" = "V11"; "P2" = "V12"; "P3" = "V13" } $input | Export-Csv -Path $filePath -NoTypeInformation $results = Import-Csv $filePath $results.P1 | Should Be "V11" $results.P2 | Should Be "V12" $results.P3 | Should Be "V13" } It "Test if it works with special character" { $v3 = "abc" + $newLine + "foo" $input = [pscustomobject]@{ "P1" = " "; "P2" = "abc,foo"; "P3" = $v3} $input | Export-Csv -Path $filePath -NoTypeInformation $results = Import-Csv $filePath $results.P1 | Should Be " " $results.P2 | Should Be "abc,foo" $results.P3 | Should Be $v3 } It "Test force switch works well" { $input = [pscustomobject]@{ "P1" = "first" } $input | Export-Csv -Path $filePath $input = [pscustomobject]@{ "P2" = "second" } $input | Export-Csv -Path $filePath -Force $results = Import-Csv $filePath $results.P2 | Should be "second" $property = $results | Get-Member | ? { $_.MemberType -eq "NoteProperty" } | % { $_.Name } $property | should not be P1 } It "Test export-csv with a useculture flag" { $outputFilesDir = Join-Path $TestDrive -ChildPath "Monad" $fileToGenerate = Join-Path $outputFilesDir -ChildPath "CSVTests.csv" $delimiter = (Get-Culture).TextInfo.ListSeparator New-Item -Path $outputFilesDir -ItemType Directory -Force Get-Item -Path $outputFilesDir| Export-Csv -Path $fileToGenerate -UseCulture -NoTypeInformation $contents = Get-Content -Path $fileToGenerate $contents.Count | Should Be 2 $contents[0].Contains($delimiter) | Should Be $true $contents[1].Contains($delimiter) | Should Be $true } }