# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
Describe "Tee-Object" -Tags "CI" {

    Context "Validate Tee-Object is correctly forking output" {

        BeforeAll {
            $testfile = Join-Path $TestDrive -ChildPath "testfile.txt"
            $testvalue = "ф"
            if ($IsWindows) {
                # Expected bytes: 244 - 'ф', 13  - '`r', 10  - '`n'.
                $expectedBytes = 244,13,10 -join "-"
            } else {
                $expectedBytes = 244,10 -join "-"
            }
        }

        BeforeEach {
            Remove-Item -Path $testfile -ErrorAction SilentlyContinue -Force
        }

	    It "Should return the output to the screen and to the variable" {
	        Write-Output teeobjecttest1 | Tee-Object -Variable teeresults
	        $teeresults | Should -BeExactly "teeobjecttest1"
	    }

	    It "Should tee the output to a file" {
	        $teefile = $testfile
	        Write-Output teeobjecttest3  | Tee-Object $teefile
	        Get-Content $teefile | Should -BeExactly "teeobjecttest3"
        }

        It "Parameter 'Encoding' should accept encoding" {
            $teefile = $testfile
            $encoding = 1251
            $testvalue | Tee-Object -Encoding $encoding $teefile
            Get-Content $teefile -Encoding $encoding | Should -BeExactly $testvalue
            (Get-Content $teefile -AsByteStream) -join "-" | Should -BeExactly $expectedBytes
        }
    }
}

Describe "Tee-Object DRT Unit Tests" -Tags "CI" {
    BeforeAll {
        $tempFile = Join-Path $TestDrive -ChildPath "TeeObjectTestsTempFile"
    }
    It "Positive File Test" {
        $expected = "1", "2", "3"
        $results = $expected | Tee-Object -FilePath $tempFile
        $results.Length | Should -Be 3
        $results | Should -Be $expected
        $content = Get-Content $tempFile
        $content | Should -Be $expected
    }

    It "Positive File Test with Path parameter alias" {
        $expected = "1", "2", "3"
        $results = $expected | Tee-Object -Path $tempFile
        $results.Length | Should -Be 3
        $results | Should -Be $expected
        $content = Get-Content $tempFile
        $content | Should -Be $expected
    }

    It "Positive Variable Test" {
        $expected = "1", "2", "3"
        $varName = "teeObjectTestVar"
        $results = $expected | Tee-Object -Variable $varName
        $results.Length | Should -Be 3
        $results | Should -Be $expected

        $results = Get-Variable -Name $varName -ValueOnly
        $results.Length | Should -Be 3
        $results | Should -Be $expected
    }

}
