Skip to content

Commit b832049

Browse files
committed
Correctly test changing a message's flag
1 parent c224127 commit b832049

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
@@ -24,7 +24,9 @@
2424
import org.junit.Test;
2525

2626
import java.io.ByteArrayOutputStream;
27+
import java.util.ArrayList;
2728
import java.util.Date;
29+
import java.util.List;
2830
import java.util.concurrent.CountDownLatch;
2931
import java.util.concurrent.TimeUnit;
3032

@@ -722,7 +724,7 @@ public void messagesAdded(MessageCountEvent e) {
722724

723725
@Test
724726
public void testMessageChangedListener() throws MessagingException {
725-
CountDownLatch latch = new CountDownLatch(1);
727+
CountDownLatch latch = new CountDownLatch(2);
726728

727729
greenMail.setUser("foo@localhost", "pwd");
728730

@@ -731,10 +733,11 @@ public void testMessageChangedListener() throws MessagingException {
731733

732734
GreenMailUtil.sendTextEmail("foo@localhost", "bar@localhost", "Test subject", "Test message",
733735
ServerSetupTest.SMTP);
736+
GreenMailUtil.sendTextEmail("foo@localhost", "bar@localhost", "Test subject 2", "Test message 2",
737+
ServerSetupTest.SMTP);
734738

735739
Thread thread = null;
736-
try {
737-
Folder inboxFolder = store.getFolder("INBOX");
740+
try (Folder inboxFolder = store.getFolder("INBOX")) {
738741
inboxFolder.open(Folder.READ_ONLY);
739742
thread = new Thread(() -> {
740743
try {
@@ -747,12 +750,12 @@ public void testMessageChangedListener() throws MessagingException {
747750
});
748751
thread.start();
749752

750-
int[] messages = new int[] { 0 };
753+
List<Integer> messages = new ArrayList<>(2);
751754
MessageChangedListener listener = new MessageChangedListener() {
752755
@Override
753756
public void messageChanged(MessageChangedEvent e) {
754757
assert e.getMessageChangeType() == MessageChangedEvent.FLAGS_CHANGED;
755-
messages[0] = e.getMessage().getMessageNumber();
758+
messages.add(e.getMessage().getMessageNumber());
756759
latch.countDown();
757760
}
758761
};
@@ -765,9 +768,13 @@ public void messageChanged(MessageChangedEvent e) {
765768
// Ignore
766769
}
767770

768-
try {
769-
greenMail.getReceivedMessages()[0].setFlag(Flags.Flag.DELETED, true);
770-
greenMail.getReceivedMessages()[0].saveChanges();
771+
try (Folder anotherInboxFolder = store.getFolder("INBOX")) {
772+
// test changing a flag from the same folder that we're listening on
773+
inboxFolder.getMessages()[0].setFlag(Flags.Flag.DELETED, true);
774+
775+
// test changing a flag from the "outside"
776+
anotherInboxFolder.open(Folder.READ_ONLY);
777+
anotherInboxFolder.getMessages()[1].setFlag(Flags.Flag.DELETED, true);
771778
} catch (MessagingException ex) {
772779
assertThat(false).isTrue();
773780
}
@@ -778,9 +785,9 @@ public void messageChanged(MessageChangedEvent e) {
778785
} catch (InterruptedException e1) {
779786
// Ignore
780787
}
781-
assertThat(messages).hasSize(1);
782-
assertThat(messages[0]).isGreaterThan(0);
783-
inboxFolder.close();
788+
assertThat(messages.size()).isEqualTo(2);
789+
assertThat(messages.get(0)).isGreaterThan(0);
790+
assertThat(messages.get(1)).isGreaterThan(0);
784791
} finally {
785792
if (thread != null) {
786793
thread.interrupt();

0 commit comments

Comments
 (0)