Skip to content

Commit aa3fcd5

Browse files
committed
fixed TMultiMapBase<TKey, TValue>.Extract to return an empty collection instead of nil
1 parent cc264ad commit aa3fcd5

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

Source/Base/Collections/Spring.Collections.MultiMaps.pas

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -758,11 +758,9 @@ function TMultiMapBase<TKey, TValue>.Extract(const key: TKey): ICollection<TValu
758758
entry: THashTableEntry;
759759
begin
760760
entry.HashCode := fKeyComparer.GetHashCode(key);
761+
Result := CreateCollection;
761762
if fHashTable.Find(key, entry) then
762-
begin
763-
Result := CreateCollection;
764763
DoRemove(entry, caExtracted, Result);
765-
end;
766764
end;
767765

768766
function TMultiMapBase<TKey, TValue>.GetCount: Integer;

Tests/Source/Base/Spring.Tests.Collections.pas

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3611,7 +3611,7 @@ procedure TTestMultiMapBase.TestExtractValues;
36113611
var
36123612
map: IMultiMap<Integer, TObject>;
36133613
values: IReadOnlyCollection<TObject>;
3614-
extractedValues: ICollection<TObject>;
3614+
extractedValues, emptyValues: ICollection<TObject>;
36153615
obj: TObject;
36163616
begin
36173617
map := TCollections.CreateMultiMap<Integer, TObject>([doOwnsValues]);
@@ -3624,6 +3624,8 @@ procedure TTestMultiMapBase.TestExtractValues;
36243624
CheckEquals(0, map.Count);
36253625
CheckEquals(1, extractedValues.Count);
36263626
CheckEquals(0, values.Count);
3627+
emptyValues := map.Extract(2);
3628+
CheckEquals(0, emptyValues.Count);
36273629
map := nil;
36283630
obj := extractedValues.First;
36293631
extractedValues := nil;
@@ -4615,6 +4617,8 @@ procedure TTestMultiMapChangedEventBase.TestDestroy;
46154617
end;
46164618

46174619
procedure TTestMultiMapChangedEventBase.TestExtract;
4620+
var
4621+
notExisting: ICollection<string>;
46184622
begin
46194623
SUT.Add(1, 'a');
46204624
SUT.Add(2, 'b');
@@ -4623,7 +4627,8 @@ procedure TTestMultiMapChangedEventBase.TestExtract;
46234627
AddEventHandlers;
46244628
CheckEquals('c', SUT.Extract(3).First);
46254629
CheckEquals('a', SUT.Extract(1).First);
4626-
CheckNull(SUT.Extract(1));
4630+
notExisting := SUT.Extract(1);
4631+
CheckEquals(0, notExisting.Count);
46274632

46284633
CheckEquals(2, fChangedEvents.Count);
46294634
CheckChanged(0, 3, 'c', caExtracted);

0 commit comments

Comments
 (0)