Public/Read-CustomerCodeAndData_fromNECformated_IRKitGetData.Tests.ps1

BeforeDiscovery {
    # for errorTestCases
    function conv([int[]]$intar) { "[" + (($intar | ForEach-Object { $_ * 2 * 562 }) -join ",") + ",1124]" }
}
BeforeAll {
    . $PSCommandPath.Replace('.Tests.ps1', '.ps1')
    function conv([int[]]$intar) { "[" + (($intar | ForEach-Object { $_ * 2 * 562 }) -join ",") + ",1124]" }
}

Describe "Read-CustomerCodeAndData_fromNECformated_IRKitGetData" {

    Context "with no error message" {
        It "returns Customer Code and Data from NEC formated IRKit get-data." {
            $validLeaderData = @(16, 8)
            $validCustomerCode = @(1, 1) * 8 + @(1, 3) * 8
            $validDataandRevData = @(1, 3) * 8 + @(1, 1) * 8      
            $inputString = conv ($validLeaderData + $validCustomerCode + $validDataandRevData)

            [PSCustomObject]$return = Read-CustomerCodeAndData_fromNECformated_IRKitGetData $inputString
            @($return.CustomerCode, $return.Data) | Should -Be @("0000000011111111", "11111111")
        }
        It "returns null, when the input has no []." {
            Read-CustomerCodeAndData_fromNECformated_IRKitGetData "test" | Should -Be $null
        }
    }
    
    Context "with error message" {
        $validLeaderData = @(16, 8)
        $inValidLeaderData = @(9, 8)
        $validCustomerCode = @(1, 1) * 8 + @(1, 3) * 8
        $inValidCustomerCode = @(1, 4) * 8 + @(1, 3) * 8
        $validDataandRevData = @(1, 3) * 8 + @(1, 1) * 8   
        $inValidDataandRevData = @(1, 3) * 8 + @(1, 3) * 8   

        $errorTestCases = @(
            @{
                inputData      = "[test]"
                expectedResult = "Input data do not has minimum required length." 
            }
            @{
                inputData      = conv ( $inValidLeaderData + $validCustomerCode + $validDataandRevData )
                expectedResult = "Leader data mismatch (12-20T:On, 6-10T:Off)."
            }
            @{
                inputData      = conv ( $validLeaderData + $inValidCustomerCode + $validDataandRevData )
                expectedResult = "Wrong Customer code. 2T based IRKit data=1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3."
            }
            @{
                inputData      = conv ( $validLeaderData + $validCustomerCode + $inValidDataandRevData )
                expectedResult = "Data(8bit) is not equal to the bit reversed Reverse Data(8bits). 11111111 <=> bit-reversed (11111111)." 
            }
        )
        It "returns error: <expectedResult>, when input is <inputData>." -TestCases $errorTestCases {
            param ($inputData, $expectedResult)

            { Read-CustomerCodeAndData_fromNECformated_IRKitGetData $inputData } | Should -Throw $expectedResult
        }
    }
}