26
26
import org .junit .Test ;
27
27
28
28
import java .io .ByteArrayOutputStream ;
29
+ import java .util .ArrayList ;
29
30
import java .util .Date ;
31
+ import java .util .List ;
30
32
import java .util .concurrent .CountDownLatch ;
31
33
import java .util .concurrent .TimeUnit ;
32
34
@@ -794,7 +796,7 @@ public void messagesAdded(MessageCountEvent e) {
794
796
795
797
@ Test
796
798
public void testMessageChangedListener () throws MessagingException {
797
- CountDownLatch latch = new CountDownLatch (1 );
799
+ CountDownLatch latch = new CountDownLatch (2 );
798
800
799
801
greenMail .setUser ("foo@localhost" , "pwd" );
800
802
@@ -803,10 +805,11 @@ public void testMessageChangedListener() throws MessagingException {
803
805
804
806
GreenMailUtil .sendTextEmail ("foo@localhost" , "bar@localhost" , "Test subject" , "Test message" ,
805
807
ServerSetupTest .SMTP );
808
+ GreenMailUtil .sendTextEmail ("foo@localhost" , "bar@localhost" , "Test subject 2" , "Test message 2" ,
809
+ ServerSetupTest .SMTP );
806
810
807
811
Thread thread = null ;
808
- try {
809
- Folder inboxFolder = store .getFolder ("INBOX" );
812
+ try (Folder inboxFolder = store .getFolder ("INBOX" )) {
810
813
inboxFolder .open (Folder .READ_ONLY );
811
814
thread = new Thread (() -> {
812
815
try {
@@ -819,12 +822,12 @@ public void testMessageChangedListener() throws MessagingException {
819
822
});
820
823
thread .start ();
821
824
822
- int [] messages = new int [] { 0 } ;
825
+ List < Integer > messages = new ArrayList <>( 2 ) ;
823
826
MessageChangedListener listener = new MessageChangedListener () {
824
827
@ Override
825
828
public void messageChanged (MessageChangedEvent e ) {
826
829
assert e .getMessageChangeType () == MessageChangedEvent .FLAGS_CHANGED ;
827
- messages [ 0 ] = e .getMessage ().getMessageNumber ();
830
+ messages . add ( e .getMessage ().getMessageNumber () );
828
831
latch .countDown ();
829
832
}
830
833
};
@@ -837,9 +840,13 @@ public void messageChanged(MessageChangedEvent e) {
837
840
// Ignore
838
841
}
839
842
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 );
843
850
} catch (MessagingException ex ) {
844
851
assertThat (false ).isTrue ();
845
852
}
@@ -850,9 +857,9 @@ public void messageChanged(MessageChangedEvent e) {
850
857
} catch (InterruptedException e1 ) {
851
858
// Ignore
852
859
}
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 );
856
863
} finally {
857
864
if (thread != null ) {
858
865
thread .interrupt ();
0 commit comments