From 58dacb051c75d713692575106587c1f661cf9e57 Mon Sep 17 00:00:00 2001 From: Yaroslav <116111680+IoannTerrible@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:07:29 -0500 Subject: [PATCH] Add new constructor to AvaloniaDictionary and include unit tests #17311 (#17312) * Give AvaloniaDictionary new .ctor and add Tests for it #17311 * AvaloniaDictionary accept IDictionary as init collection --------- Co-authored-by: Julien Lebosquain --- .../Collections/AvaloniaDictionary.cs | 15 +++++++++ .../Collections/AvaloniaDictionaryTests.cs | 31 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs index d4c7137fdc..2fef8f77c8 100644 --- a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs +++ b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs @@ -34,6 +34,21 @@ namespace Avalonia.Collections _inner = new Dictionary(capacity); } + /// + /// Initializes a new instance of the class using an IDictionary. + /// + public AvaloniaDictionary(IDictionary dictionary, IEqualityComparer? comparer = null) + { + if (dictionary != null) + { + _inner = new Dictionary(dictionary, comparer ?? EqualityComparer.Default); + } + else + { + throw new ArgumentNullException(nameof(dictionary)); + } + } + /// /// Occurs when the collection changes. /// diff --git a/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs b/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs index 739c3fed79..35fd946670 100644 --- a/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs +++ b/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; + using Avalonia.Collections; using Avalonia.Data.Core; + using Xunit; namespace Avalonia.Base.UnitTests.Collections @@ -156,5 +158,34 @@ namespace Avalonia.Base.UnitTests.Collections Assert.Equal(new[] { "Count", CommonPropertyNames.IndexerName }, tracker.Names); } + + [Fact] + public void Constructor_Should_Throw_ArgumentNullException_When_Collection_Is_Null() + { + Assert.Throws(() => + { + var target = new AvaloniaDictionary(null, null); + }); + } + + + [Fact] + public void Constructor_Should_Initialize_With_Provided_Collection() + { + var initialCollection = new Dictionary + { + { "key1", "value1" }, + { "key2", "value2" } + }; + + var target = new AvaloniaDictionary(initialCollection, null); + + Assert.Equal(2, target.Count); + Assert.Equal("value1", target["key1"]); + Assert.Equal("value2", target["key2"]); + } + + + } }