Files
KVideo/tests/android-pip-utils.test.ts

77 lines
2.0 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
createAndroidPiPTransitionPlan,
shouldRestoreInlineAfterAndroidPiP,
shouldRollbackTemporaryWindowFullscreen,
} from '@/components/player/hooks/desktop/android-pip-utils';
test('inline playback enters temporary window fullscreen and restores inline after PiP closes', () => {
const plan = createAndroidPiPTransitionPlan('none');
assert.deepEqual(plan, {
enterTemporaryWindowFullscreen: true,
restoreInlineOnExit: true,
});
assert.equal(
shouldRestoreInlineAfterAndroidPiP({
enteredTemporaryWindowFullscreen: plan.enterTemporaryWindowFullscreen,
restoreInlineOnExit: plan.restoreInlineOnExit,
}, false),
true
);
});
test('existing page fullscreen stays in page fullscreen after PiP closes', () => {
const plan = createAndroidPiPTransitionPlan('window');
assert.deepEqual(plan, {
enterTemporaryWindowFullscreen: false,
restoreInlineOnExit: false,
});
assert.equal(
shouldRestoreInlineAfterAndroidPiP({
enteredTemporaryWindowFullscreen: plan.enterTemporaryWindowFullscreen,
restoreInlineOnExit: plan.restoreInlineOnExit,
}, false),
false
);
});
test('system fullscreen also restores inline after PiP closes', () => {
const plan = createAndroidPiPTransitionPlan('native');
assert.deepEqual(plan, {
enterTemporaryWindowFullscreen: true,
restoreInlineOnExit: true,
});
assert.equal(
shouldRestoreInlineAfterAndroidPiP({
enteredTemporaryWindowFullscreen: plan.enterTemporaryWindowFullscreen,
restoreInlineOnExit: plan.restoreInlineOnExit,
}, false),
true
);
});
test('temporary page fullscreen rolls back when Android PiP entry fails', () => {
assert.equal(
shouldRollbackTemporaryWindowFullscreen({
enteredTemporaryWindowFullscreen: true,
restoreInlineOnExit: true,
}),
true
);
assert.equal(
shouldRollbackTemporaryWindowFullscreen({
enteredTemporaryWindowFullscreen: false,
restoreInlineOnExit: false,
}),
false
);
});