]> git.sesse.net Git - vlc/blobdiff - bindings/java/core/src/test/java/org/videolan/jvlc/internal/MediaListPlayerTest.java
jvlc: wait for correct player status before releasing libvlc
[vlc] / bindings / java / core / src / test / java / org / videolan / jvlc / internal / MediaListPlayerTest.java
index 853653ac3d85f36c80be240af6fca5eb310c17f4..bad81380fc8413134dd351d7b9b28c758aa5fdd2 100644 (file)
 
 package org.videolan.jvlc.internal;
 
-import java.io.File;
-
 import junit.framework.Assert;
 
 import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.videolan.jvlc.internal.LibVlc.LibVlcInstance;
 import org.videolan.jvlc.internal.LibVlc.LibVlcMediaDescriptor;
 import org.videolan.jvlc.internal.LibVlc.LibVlcMediaInstance;
 import org.videolan.jvlc.internal.LibVlc.LibVlcMediaList;
@@ -40,29 +36,10 @@ import org.videolan.jvlc.internal.LibVlc.LibVlcMediaListPlayer;
 import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
 
 
-public class MediaListPlayerTest
+public class MediaListPlayerTest extends AbstractVLCInternalTest
 {
 
-    private LibVlc libvlc = LibVlc.SYNC_INSTANCE;
-
-    private LibVlcInstance libvlcInstance;
-
-    private String mrl = this.getClass().getResource("/raffa_voice.ogg").getPath();
-
-    @Before
-    public void testSetup() throws Exception
-    {
-        libvlc_exception_t exception = new libvlc_exception_t();
-        libvlcInstance = libvlc.libvlc_new(0, new String[]{"-A","file","--audiofile-file=" + File.createTempFile("jvlc", ".wav").getAbsolutePath()}, exception);
-        // use the following line to use your audio card.
-        // libvlcInstance = libvlc.libvlc_new(0, new String[]{}, exception);
-    }
-
-    @After
-    public void tearDown()
-    {
-        libvlc.libvlc_release(libvlcInstance);
-    }
+    private LibVlcMediaListPlayer current;
 
     @Test
     public void mediaListPlayerNewTest()
@@ -71,6 +48,7 @@ public class MediaListPlayerTest
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         Assert.assertNotNull(mediaListPlayer);
         Assert.assertEquals(0, exception.raised);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
@@ -81,6 +59,8 @@ public class MediaListPlayerTest
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         Assert.assertEquals(0, exception.raised);
+        libvlc.libvlc_media_list_release(mediaList);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
@@ -89,10 +69,12 @@ public class MediaListPlayerTest
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         Assert.assertEquals(0, exception.raised);
+        libvlc.libvlc_media_list_release(mediaList);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
@@ -103,6 +85,7 @@ public class MediaListPlayerTest
         int result = libvlc.libvlc_media_list_player_is_playing(mediaListPlayer, exception);
         Assert.assertEquals(0, result);
         Assert.assertEquals(0, exception.raised);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
@@ -112,22 +95,27 @@ public class MediaListPlayerTest
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         libvlc.libvlc_media_list_player_play(mediaListPlayer, exception);
         Assert.assertEquals(1, exception.raised);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     /**
      * this fails: see https://trac.videolan.org/vlc/ticket/1527
      */
-//    @Test
+    @Test
     public void mediaListPlayerPlay()
     {
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
+        current = mediaListPlayer;
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         libvlc.libvlc_media_list_player_play(mediaListPlayer, exception);
         Assert.assertEquals("Exception message: " + exception.message + ".\n", 0, exception.raised);
+        libvlc.libvlc_media_release(mediaDescriptor);
+        libvlc.libvlc_media_list_release(mediaList);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
@@ -136,8 +124,8 @@ public class MediaListPlayerTest
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         libvlc.libvlc_media_list_player_play_item_at_index(mediaListPlayer, 0, exception);
         while (true)
@@ -154,7 +142,14 @@ public class MediaListPlayerTest
             Thread.sleep(150);
         }
         libvlc.libvlc_media_list_player_stop(mediaListPlayer, exception);
-
+        while (libvlc.libvlc_media_list_player_get_state(mediaListPlayer, exception) != LibVlcState.libvlc_Ended
+            .ordinal())
+        {
+            Thread.sleep(100);
+        }
+        libvlc.libvlc_media_release(mediaDescriptor);
+        libvlc.libvlc_media_list_release(mediaList);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
@@ -163,8 +158,8 @@ public class MediaListPlayerTest
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         libvlc.libvlc_media_list_player_play_item(mediaListPlayer, mediaDescriptor, exception);
         Assert.assertEquals(0, exception.raised);
@@ -181,59 +176,69 @@ public class MediaListPlayerTest
             }
             Thread.sleep(150);
         }
+        Thread.sleep(400);
         libvlc.libvlc_media_list_player_stop(mediaListPlayer, exception);
+        libvlc.libvlc_media_list_release(mediaList);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
     @Test
-    public void mediaListPlayerPause() throws Exception
+    public void mediaListPlayerGetStateEnded()
+    {
+        libvlc_exception_t exception = new libvlc_exception_t();
+        LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
+        int state = libvlc.libvlc_media_list_player_get_state(mediaListPlayer, exception);
+        Assert.assertEquals(LibVlcState.libvlc_Ended.ordinal(), state);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
+    }
+
+    @Test
+    public void mediaLtistPlayerPause() throws Exception
     {
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         libvlc.libvlc_media_list_player_play_item(mediaListPlayer, mediaDescriptor, exception);
-        libvlc.libvlc_media_list_player_pause(mediaListPlayer, exception);
-        Assert.assertEquals(0, exception.raised);
         while (true)
         {
             int playing = libvlc.libvlc_media_list_player_is_playing(mediaListPlayer, exception);
             if (exception.raised == 1)
             {
                 throw new RuntimeException("Native exception thrown");
-            }            
-            if (playing == 0)
+            }
+            if (playing == 1)
             {
                 break;
             }
             Thread.sleep(150);
         }
+        libvlc.libvlc_media_list_player_pause(mediaListPlayer, exception);
+
         int state = libvlc.libvlc_media_list_player_get_state(mediaListPlayer, exception);
-        Assert.assertEquals("Expected state: " + LibVlcState.libvlc_Paused +".\n", LibVlcState.libvlc_Paused.ordinal(), state);
+        Assert.assertEquals(exception.message, 0, exception.raised);
+        Assert.assertEquals(
+            "Expected state: " + LibVlcState.libvlc_Paused + ".\n",
+            LibVlcState.libvlc_Paused.ordinal(),
+            state);
         libvlc.libvlc_media_list_player_stop(mediaListPlayer, exception);
+        libvlc.libvlc_media_list_release(mediaList);
+        libvlc.libvlc_media_list_player_release(mediaListPlayer);
     }
 
-    @Test
-    public void mediaListPlayerGetStateStopped()
-    {
-        libvlc_exception_t exception = new libvlc_exception_t();
-        LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
-        int state = libvlc.libvlc_media_list_player_get_state(mediaListPlayer, exception);
-        Assert.assertEquals(LibVlcState.libvlc_Stopped.ordinal(), state);
-    }
-    
     @Test
     public void mediaListPlayerSetMediaInstance()
     {
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor md = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        LibVlcMediaInstance mi = libvlc.libvlc_media_instance_new_from_media_descriptor(md, exception);
-        libvlc.libvlc_media_list_player_set_media_instance(mediaListPlayer, mi, exception);
+        LibVlcMediaDescriptor md = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        LibVlcMediaInstance mi = libvlc.libvlc_media_player_new_from_media(md, exception);
+        libvlc.libvlc_media_list_player_set_media_player(mediaListPlayer, mi, exception);
         Assert.assertEquals(0, exception.raised);
     }
-    
+
     @Test
     public void mediaListPlayerNextNoItems()
     {
@@ -242,24 +247,25 @@ public class MediaListPlayerTest
         libvlc.libvlc_media_list_player_next(mediaListPlayer, exception);
         Assert.assertEquals(1, exception.raised);
     }
-    
+
     /**
      * fails, see https://trac.videolan.org/vlc/ticket/1535
      */
-//    @Test
+    // @Test
     public void mediaListPlayerNext() throws Exception
     {
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         libvlc.libvlc_media_list_player_play_item_at_index(mediaListPlayer, 0, exception);
         Thread.sleep(150);
         libvlc.libvlc_media_list_player_next(mediaListPlayer, exception);
         Assert.assertEquals(0, exception.raised);
+        libvlc.libvlc_media_list_release(mediaList);
     }
 
     @Test
@@ -268,25 +274,22 @@ public class MediaListPlayerTest
         libvlc_exception_t exception = new libvlc_exception_t();
         LibVlcMediaListPlayer mediaListPlayer = libvlc.libvlc_media_list_player_new(libvlcInstance, exception);
         LibVlcMediaList mediaList = libvlc.libvlc_media_list_new(libvlcInstance, exception);
-        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_descriptor_new(libvlcInstance, mrl, exception);
-        libvlc.libvlc_media_list_add_media_descriptor(mediaList, mediaDescriptor, exception);
+        LibVlcMediaDescriptor mediaDescriptor = libvlc.libvlc_media_new(libvlcInstance, mrl, exception);
+        libvlc.libvlc_media_list_add_media(mediaList, mediaDescriptor, exception);
         libvlc.libvlc_media_list_player_set_media_list(mediaListPlayer, mediaList, exception);
         libvlc.libvlc_media_list_player_play_item(mediaListPlayer, mediaDescriptor, exception);
 
         while (true)
         {
-            int playing = libvlc.libvlc_media_list_player_is_playing(mediaListPlayer, exception);
+            int playing = libvlc.libvlc_media_list_player_get_state(mediaListPlayer, exception);
             Assert.assertEquals(0, exception.raised);
-            if (playing == 1)
+            if (playing == LibVlcState.libvlc_Playing.ordinal())
             {
                 break;
             }
             Thread.sleep(150);
         }
-        Assert.assertEquals("Expected state: " + LibVlcState.libvlc_Playing +".\n", LibVlcState.libvlc_Playing.ordinal(), libvlc.libvlc_media_list_player_get_state(
-            mediaListPlayer,
-            exception));
-        
+
         libvlc.libvlc_media_list_player_stop(mediaListPlayer, exception);
         while (true)
         {
@@ -298,11 +301,33 @@ public class MediaListPlayerTest
             }
             Thread.sleep(150);
         }
-        Assert.assertEquals(LibVlcState.libvlc_Stopped.ordinal(), libvlc.libvlc_media_list_player_get_state(
+        Assert.assertEquals(LibVlcState.libvlc_Ended.ordinal(), libvlc.libvlc_media_list_player_get_state(
             mediaListPlayer,
             exception));
+        libvlc.libvlc_media_list_release(mediaList);
     }
 
-
+    @Override
+    @After
+    public void tearDown()
+    {
+        if (current != null)
+        {
+            libvlc.libvlc_media_list_player_stop(current, exception);
+            while (libvlc.libvlc_media_list_player_get_state(current, exception) != LibVlcState.libvlc_Ended.ordinal())
+            {
+                try
+                {
+                    Thread.sleep(100);
+                }
+                catch (InterruptedException e)
+                {
+                    //
+                }
+            }
+        }
+        current = null;
+        super.tearDown();
+    }
 
 }