From 1d3eab7a0097c46b0aec0f6d7fc1a04adead0178 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 27 Mar 2018 10:45:48 -0700 Subject: [PATCH 1/2] Make LanguagePrimitive.GetEnumerable treat 'DataTable' as Enumerable --- .../engine/LanguagePrimitives.cs | 4 ---- .../engine/Api/LanguagePrimitive.Tests.ps1 | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/System.Management.Automation/engine/LanguagePrimitives.cs b/src/System.Management.Automation/engine/LanguagePrimitives.cs index 27aa00c00f3..9892dfc368b 100644 --- a/src/System.Management.Automation/engine/LanguagePrimitives.cs +++ b/src/System.Management.Automation/engine/LanguagePrimitives.cs @@ -476,12 +476,10 @@ private static IEnumerable ReturnNullEnumerable(object obj) return null; } -#if !CORECLR private static IEnumerable DataTableEnumerable(object obj) { return (((DataTable)obj).Rows); } -#endif private static IEnumerable TypicalEnumerable(object obj) { @@ -517,12 +515,10 @@ private static IEnumerable TypicalEnumerable(object obj) private static GetEnumerableDelegate CalculateGetEnumerable(Type objectType) { -#if !CORECLR if (typeof(DataTable).IsAssignableFrom(objectType)) { return LanguagePrimitives.DataTableEnumerable; } -#endif // Don't treat IDictionary or XmlNode as enumerable... if (typeof(IEnumerable).IsAssignableFrom(objectType) diff --git a/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 b/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 index 1108b1664fa..bc60a76519c 100644 --- a/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 +++ b/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 @@ -32,4 +32,18 @@ Describe "Language Primitive Tests" -Tags "CI" { $a[0] = $a = [PSObject](,1) [System.Management.Automation.LanguagePrimitives]::IsTrue($a) | Should -BeTrue } + + It "LanguagePrimitives.GetEnumerable should treat 'DataTable' as Enumerable" { + $dt = [System.Data.DataTable]::new("test") + $dt.Columns.Add("Name", [string]) > $null + $dt.Columns.Add("Age", [string]) > $null + $dr = $dt.NewRow(); $dr["Name"] = "John"; $dr["Age"] = "20" + $dr2 = $dt.NewRow(); $dr["Name"] = "Susan"; $dr["Age"] = "25" + $dt.Rows.Add($dr); $dt.Rows.Add($dr2) + + [System.Management.Automation.LanguagePrimitives]::IsObjectEnumerable($dt) | Should -BeTrue + $count = 0 + [System.Management.Automation.LanguagePrimitives]::GetEnumerable($dt) | ForEach-Object { $cnt++ } + $count | Should -Be 2 + } } From 0dbaebfc4668c70eb2aa8dd0c23915b4315d89a4 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 27 Mar 2018 11:33:10 -0700 Subject: [PATCH 2/2] Fix a typo in the test --- test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 b/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 index bc60a76519c..7b34e9174c9 100644 --- a/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 +++ b/test/powershell/engine/Api/LanguagePrimitive.Tests.ps1 @@ -43,7 +43,7 @@ Describe "Language Primitive Tests" -Tags "CI" { [System.Management.Automation.LanguagePrimitives]::IsObjectEnumerable($dt) | Should -BeTrue $count = 0 - [System.Management.Automation.LanguagePrimitives]::GetEnumerable($dt) | ForEach-Object { $cnt++ } + [System.Management.Automation.LanguagePrimitives]::GetEnumerable($dt) | ForEach-Object { $count++ } $count | Should -Be 2 } }