24
24
import org .junit .Test ;
25
25
26
26
import java .io .ByteArrayOutputStream ;
27
+ import java .util .ArrayList ;
27
28
import java .util .Date ;
29
+ import java .util .List ;
28
30
import java .util .concurrent .CountDownLatch ;
29
31
import java .util .concurrent .TimeUnit ;
30
32
@@ -722,7 +724,7 @@ public void messagesAdded(MessageCountEvent e) {
722
724
723
725
@ Test
724
726
public void testMessageChangedListener () throws MessagingException {
725
- CountDownLatch latch = new CountDownLatch (1 );
727
+ CountDownLatch latch = new CountDownLatch (2 );
726
728
727
729
greenMail .setUser ("foo@localhost" , "pwd" );
728
730
@@ -731,10 +733,11 @@ public void testMessageChangedListener() throws MessagingException {
731
733
732
734
GreenMailUtil .sendTextEmail ("foo@localhost" , "bar@localhost" , "Test subject" , "Test message" ,
733
735
ServerSetupTest .SMTP );
736
+ GreenMailUtil .sendTextEmail ("foo@localhost" , "bar@localhost" , "Test subject 2" , "Test message 2" ,
737
+ ServerSetupTest .SMTP );
734
738
735
739
Thread thread = null ;
736
- try {
737
- Folder inboxFolder = store .getFolder ("INBOX" );
740
+ try (Folder inboxFolder = store .getFolder ("INBOX" )) {
738
741
inboxFolder .open (Folder .READ_ONLY );
739
742
thread = new Thread (() -> {
740
743
try {
@@ -747,12 +750,12 @@ public void testMessageChangedListener() throws MessagingException {
747
750
});
748
751
thread .start ();
749
752
750
- int [] messages = new int [] { 0 } ;
753
+ List < Integer > messages = new ArrayList <>( 2 ) ;
751
754
MessageChangedListener listener = new MessageChangedListener () {
752
755
@ Override
753
756
public void messageChanged (MessageChangedEvent e ) {
754
757
assert e .getMessageChangeType () == MessageChangedEvent .FLAGS_CHANGED ;
755
- messages [ 0 ] = e .getMessage ().getMessageNumber ();
758
+ messages . add ( e .getMessage ().getMessageNumber () );
756
759
latch .countDown ();
757
760
}
758
761
};
@@ -765,9 +768,13 @@ public void messageChanged(MessageChangedEvent e) {
765
768
// Ignore
766
769
}
767
770
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 );
771
778
} catch (MessagingException ex ) {
772
779
assertThat (false ).isTrue ();
773
780
}
@@ -778,9 +785,9 @@ public void messageChanged(MessageChangedEvent e) {
778
785
} catch (InterruptedException e1 ) {
779
786
// Ignore
780
787
}
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 );
784
791
} finally {
785
792
if (thread != null ) {
786
793
thread .interrupt ();
0 commit comments