diff --git a/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 b/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 index 4de80c74199..7386c03f1b8 100644 --- a/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 +++ b/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 @@ -28,15 +28,15 @@ Function Convert-ListToSnakeCase($list) { foreach ($value in $list) { if ($value -is [Hashtable]) { $new_value = Convert-DictToSnakeCase -dict $value - } elseif ($value -is [Array]) { + } elseif ($value -is [Array] -or $value -is [System.Collections.ArrayList]) { $new_value = Convert-ListToSnakeCase -list $value } else { $new_value = $value } - $snake_list.Add($new_value) | Out-Null + [void]$snake_list.Add($new_value) } - return $snake_list + return ,$snake_list } # converts a dict/hashtable keys from camelCase to snake_case @@ -51,14 +51,14 @@ Function Convert-DictToSnakeCase($dict) { $value = $dict_entry.Value if ($value -is [Hashtable]) { $snake_dict.$snake_key = Convert-DictToSnakeCase -dict $value - } elseif ($value -is [Array]) { + } elseif ($value -is [Array] -or $value -is [System.Collections.ArrayList]) { $snake_dict.$snake_key = Convert-ListToSnakeCase -list $value } else { $snake_dict.$snake_key = $value } } - return $snake_dict + return ,$snake_dict } # this line must stay at the bottom to ensure all defined module parts are exported diff --git a/test/integration/targets/win_module_utils/library/camel_conversion_test.ps1 b/test/integration/targets/win_module_utils/library/camel_conversion_test.ps1 index 45de2bd7790..5fc3534ae74 100644 --- a/test/integration/targets/win_module_utils/library/camel_conversion_test.ps1 +++ b/test/integration/targets/win_module_utils/library/camel_conversion_test.ps1 @@ -3,7 +3,7 @@ #Requires -Module Ansible.ModuleUtils.Legacy #Requires -Module Ansible.ModuleUtils.CamelConversion -$ErrorActionPreference = 'Continue' +$ErrorActionPreference = 'Stop' Function Assert-Equals($actual, $expected) { if ($actual -cne $expected) { @@ -31,6 +31,8 @@ $input_dict = @{ ID = 'id' IEnumerable = 'i_enumerable' } + emptyList = @() + singleList = @("a") } $output_dict = Convert-DictToSnakeCase -dict $input_dict @@ -38,24 +40,32 @@ foreach ($entry in $output_dict.GetEnumerator()) { $key = $entry.Name $value = $entry.Value + $type = $value.GetType() if ($value -is [Hashtable]) { Assert-Equals -actual $key -expected "inner_hash_table" foreach ($inner_hash in $value.GetEnumerator()) { Assert-Equals -actual $inner_hash.Name -expected $inner_hash.Value } - } elseif ($value -is [Array]) { - # there is one array in our original dict, we know the structure - foreach ($inner_list in $value) { - if ($inner_list -is [Hashtable]) { - foreach ($inner_list_hash in $inner_list.GetEnumerator()) { - Assert-Equals -actual $inner_list_hash.Name -expected $inner_list_hash.Value + } elseif ($value -is [Array] -or $value -is [System.Collections.ArrayList]) { + if ($key -eq "list_dict") { + foreach ($inner_list in $value) { + if ($inner_list -is [Hashtable]) { + foreach ($inner_list_hash in $inner_list.GetEnumerator()) { + Assert-Equals -actual $inner_list_hash.Name -expected $inner_list_hash.Value + } + } elseif ($inner_list -is [String]) { + # this is not a string key so we need to keep it the same + Assert-Equals -actual $inner_list -expected "stringTwo" + } else { + Assert-Equals -actual $inner_list -expected 0 } - } elseif ($inner_list -is [String]) { - # this is not a string key so we need to keep it the same - Assert-Equals -actual $inner_list -expected "stringTwo" - } else { - Assert-Equals -actual $inner_list -expected 0 } + } elseif ($key -eq "empty_list") { + Assert-Equals -actual $value.Count -expected 0 + } elseif ($key -eq "single_list") { + Assert-Equals -actual $value.Count -expected 1 + } else { + Fail-Json -obj $result -message "invalid key found for list $key" } } else { Assert-Equals -actual $key -expected $value