diff options
| author | Lena <lena@omega> | 2026-08-01 00:00:00 +0000 |
|---|---|---|
| committer | Lena <lena@omega> | 2026-08-01 00:00:00 +0000 |
| commit | 852a8a00273c9128efeed0217a8e5d3fcd8bf780 (patch) | |
| tree | c72f959731fa3c7c809cf1a0222363b6c9c9b03b /app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java | |
| parent | f379b93d52bf0dbd3816ec3f64d165314771d2a6 (diff) | |
| download | scrcpy-android-852a8a00273c9128efeed0217a8e5d3fcd8bf780.tar.gz | |
app: harden mirroring lifecycle and state
Diffstat (limited to 'app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java')
| -rw-r--r-- | app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java b/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java new file mode 100644 index 0000000..00b19a5 --- /dev/null +++ b/app/src/test/java/invalid/lena/scrcpy/VideoQueueTest.java @@ -0,0 +1,53 @@ +package invalid.lena.scrcpy; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class VideoQueueTest { + + private static VideoQueue.Frame frame(int id, boolean config, boolean keyframe) { + return new VideoQueue.Frame(new byte[]{(byte) id}, id, config, keyframe); + } + + @Test + public void rejectsDeltaUntilKeyframe() { + VideoQueue queue = new VideoQueue(4, 4); + assertFalse(queue.offer(frame(1, false, false))); + assertTrue(queue.offer(frame(2, false, true))); + assertTrue(queue.offer(frame(3, false, false))); + } + + @Test + public void overflowKeepsQueuedDecoderGeneration() { + VideoQueue queue = new VideoQueue(3, 3); + VideoQueue.Frame keyframe = frame(1, false, true); + VideoQueue.Frame delta = frame(2, false, false); + assertTrue(queue.offer(keyframe)); + assertTrue(queue.offer(delta)); + assertTrue(queue.offer(frame(3, false, false))); + assertFalse(queue.offer(frame(4, false, false))); + assertTrue(queue.needsKeyframe()); + assertFalse(queue.offer(frame(5, false, false))); + assertSame(keyframe, queue.poll()); + assertSame(delta, queue.poll()); + } + + @Test + public void newKeyframeReplacesOldMediaButKeepsConfig() { + VideoQueue queue = new VideoQueue(4, 4); + VideoQueue.Frame config = frame(1, true, false); + VideoQueue.Frame nextKeyframe = frame(4, false, true); + assertTrue(queue.offer(config)); + assertTrue(queue.offer(frame(2, false, true))); + assertTrue(queue.offer(frame(3, false, false))); + + assertTrue(queue.offer(nextKeyframe)); + + assertSame(config, queue.poll()); + assertSame(nextKeyframe, queue.poll()); + assertTrue(queue.isEmpty()); + } +} |