Skip to content

Commit 8ab7b8c

Browse files
committed
Correctly test changing a message's flag
1 parent 04db7d6 commit 8ab7b8c

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

greenmail-core/src/test/java/com/icegreen/greenmail/test/ImapServerTest.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import org.junit.Test;
2727

2828
import java.io.ByteArrayOutputStream;
29+
import java.util.ArrayList;
2930
import java.util.Date;
31+
import java.util.List;
3032
import java.util.concurrent.CountDownLatch;
3133
import java.util.concurrent.TimeUnit;
3234

@@ -794,7 +796,7 @@ public void messagesAdded(MessageCountEvent e) {
794796

795797
@Test
796798
public void testMessageChangedListener() throws MessagingException {
797-
CountDownLatch latch = new CountDownLatch(1);
799+
CountDownLatch latch = new CountDownLatch(2);
798800

799801
greenMail.setUser("foo@localhost", "pwd");
800802

@@ -803,10 +805,11 @@ public void testMessageChangedListener() throws MessagingException {
803805

804806
GreenMailUtil.sendTextEmail("foo@localhost", "bar@localhost", "Test subject", "Test message",
805807
ServerSetupTest.SMTP);
808+
GreenMailUtil.sendTextEmail("foo@localhost", "bar@localhost", "Test subject 2", "Test message 2",
809+
ServerSetupTest.SMTP);
806810

807811
Thread thread = null;
808-
try {
809-
Folder inboxFolder = store.getFolder("INBOX");
812+
try (Folder inboxFolder = store.getFolder("INBOX")) {
810813
inboxFolder.open(Folder.READ_ONLY);
811814
thread = new Thread(() -> {
812815
try {
@@ -819,12 +822,12 @@ public void testMessageChangedListener() throws MessagingException {
819822
});
820823
thread.start();
821824

822-
int[] messages = new int[] { 0 };
825+
List<Integer> messages = new ArrayList<>(2);
823826
MessageChangedListener listener = new MessageChangedListener() {
824827
@Override
825828
public void messageChanged(MessageChangedEvent e) {
826829
assert e.getMessageChangeType() == MessageChangedEvent.FLAGS_CHANGED;
827-
messages[0] = e.getMessage().getMessageNumber();
830+
messages.add(e.getMessage().getMessageNumber());
828831
latch.countDown();
829832
}
830833
};
@@ -837,9 +840,13 @@ public void messageChanged(MessageChangedEvent e) {
837840
// Ignore
838841
}
839842

840-
try {
841-
greenMail.getReceivedMessages()[0].setFlag(Flags.Flag.DELETED, true);
842-
greenMail.getReceivedMessages()[0].saveChanges();
843+
try (Folder anotherInboxFolder = store.getFolder("INBOX")) {
844+
// test changing a flag from the same folder that we're listening on
845+
inboxFolder.getMessages()[0].setFlag(Flags.Flag.DELETED, true);
846+
847+
// test changing a flag from the "outside"
848+
anotherInboxFolder.open(Folder.READ_ONLY);
849+
anotherInboxFolder.getMessages()[1].setFlag(Flags.Flag.DELETED, true);
843850
} catch (MessagingException ex) {
844851
assertThat(false).isTrue();
845852
}
@@ -850,9 +857,9 @@ public void messageChanged(MessageChangedEvent e) {
850857
} catch (InterruptedException e1) {
851858
// Ignore
852859
}
853-
assertThat(messages).hasSize(1);
854-
assertThat(messages[0]).isGreaterThan(0);
855-
inboxFolder.close();
860+
assertThat(messages.size()).isEqualTo(2);
861+
assertThat(messages.get(0)).isGreaterThan(0);
862+
assertThat(messages.get(1)).isGreaterThan(0);
856863
} finally {
857864
if (thread != null) {
858865
thread.interrupt();

0 commit comments

Comments
 (0)