Skip to content

Commit

Permalink
Added tests for HeaderList.set_Item[int index] and fixed a bug that w…
Browse files Browse the repository at this point in the history
…as exposed
  • Loading branch information
jstedfast committed Jun 22, 2024
1 parent 56fe291 commit 3255547
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 3 deletions.
6 changes: 3 additions & 3 deletions MimeKit/HeaderList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1150,11 +1150,11 @@ public void RemoveAt (int index)
}

// update the table for the header being set
if (table.TryGetValue (value.Field, out header)) {
int idx = headers.IndexOf (header);
if (table.TryGetValue (value.Field, out var oldValue)) {
int idx = headers.IndexOf (oldValue);

if (idx > index)
table[header.Field] = value;
table[oldValue.Field] = value;
} else {
table.Add (value.Field, value);
}
Expand Down
37 changes: 37 additions & 0 deletions UnitTests/HeaderListTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,5 +273,42 @@ public void TestReplacingMultipleHeaders ()
Assert.That (headers.IndexOf ("From"), Is.EqualTo (0), "From header not in the expected position.");
Assert.That (headers.IndexOf ("Cc"), Is.EqualTo (2), "Cc header not in the expected position.");
}

[Test]
public void TestSetHeaderAtIndex ()
{
var headers = new HeaderList {
new Header ("From", "Joe Schmoe <joe.schmoe@example.com>"),
new Header ("To", "Jane Doe <jane@example.com>"),
new Header ("Subject", "Hello, World!"),
new Header ("Date", "Wed, 17 Jul 2019 16:00:00 -0400")
};
int index = headers.IndexOf (HeaderId.Subject);
var subject = headers[index];
var changedActions = new List<HeaderListChangedAction> ();
int changedCount = 0;

Assert.That (subject.Id, Is.EqualTo (HeaderId.Subject));

// listen for CHanged events
headers.Changed += (sender, e) => {
changedActions.Add (e.Action);
changedCount++;
};

// setting the same header should not trigger a change eventheaders[index] = subject;
Assert.That (changedCount, Is.EqualTo (0), "Setting the same header at an index should not raise a Changed event");

// setting a header with the same field name/id
headers[index] = new Header (HeaderId.Subject, "This is a different subject!");
Assert.That (changedCount, Is.EqualTo (1), "Setting a different header at an index should raise a Changed event");
Assert.That (changedActions[0], Is.EqualTo (HeaderListChangedAction.Changed), "Setting a different header at an index should raise a Changed event");

// setting a header with a different field name/id
headers[index] = new Header (HeaderId.MessageId, "<msg-id@example.com>");
Assert.That (changedCount, Is.EqualTo (3), "Setting a different header at an index should raise a Changed event");
Assert.That (changedActions[1], Is.EqualTo (HeaderListChangedAction.Removed), "Expected a Removed action for the old header");
Assert.That (changedActions[2], Is.EqualTo (HeaderListChangedAction.Added), "Expected an Added action for the new header");
}
}
}
2 changes: 2 additions & 0 deletions UnitTests/HeaderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,8 @@ public void TestToHeaderId ()
parsed = "X-MadeUp-Header".ToHeaderId ();

Assert.That (parsed, Is.EqualTo (HeaderId.Unknown), "Failed to parse the made-up header value");

Assert.That (((HeaderId) 1025).ToHeaderName (), Is.EqualTo ("Unknown"), "Unknown HeaderId");
}

[Test]
Expand Down

0 comments on commit 3255547

Please sign in to comment.