mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-28 06:22:45 -08:00
refactor: extract mpv render metrics runtime apply helper
This commit is contained in:
37
src/core/services/mpv-render-metrics-service.test.ts
Normal file
37
src/core/services/mpv-render-metrics-service.test.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { MpvSubtitleRenderMetrics } from "../../types";
|
||||
import { applyMpvSubtitleRenderMetricsPatchService } from "./mpv-render-metrics-service";
|
||||
|
||||
const BASE: MpvSubtitleRenderMetrics = {
|
||||
subPos: 100,
|
||||
subFontSize: 38,
|
||||
subScale: 1,
|
||||
subMarginY: 34,
|
||||
subMarginX: 19,
|
||||
subFont: "sans-serif",
|
||||
subSpacing: 0,
|
||||
subBold: false,
|
||||
subItalic: false,
|
||||
subBorderSize: 2.5,
|
||||
subShadowOffset: 0,
|
||||
subAssOverride: "yes",
|
||||
subScaleByWindow: true,
|
||||
subUseMargins: true,
|
||||
osdHeight: 720,
|
||||
osdDimensions: null,
|
||||
};
|
||||
|
||||
test("applyMpvSubtitleRenderMetricsPatchService returns unchanged on empty patch", () => {
|
||||
const { next, changed } = applyMpvSubtitleRenderMetricsPatchService(BASE, {});
|
||||
assert.equal(changed, false);
|
||||
assert.deepEqual(next, BASE);
|
||||
});
|
||||
|
||||
test("applyMpvSubtitleRenderMetricsPatchService reports changed when patch modifies value", () => {
|
||||
const { next, changed } = applyMpvSubtitleRenderMetricsPatchService(BASE, {
|
||||
subPos: 95,
|
||||
});
|
||||
assert.equal(changed, true);
|
||||
assert.equal(next.subPos, 95);
|
||||
});
|
||||
@@ -55,3 +55,28 @@ export function updateMpvSubtitleRenderMetricsService(
|
||||
osdDimensions: nextOsdDimensions,
|
||||
};
|
||||
}
|
||||
|
||||
export function applyMpvSubtitleRenderMetricsPatchService(
|
||||
current: MpvSubtitleRenderMetrics,
|
||||
patch: Partial<MpvSubtitleRenderMetrics>,
|
||||
): { next: MpvSubtitleRenderMetrics; changed: boolean } {
|
||||
const next = updateMpvSubtitleRenderMetricsService(current, patch);
|
||||
const changed =
|
||||
next.subPos !== current.subPos ||
|
||||
next.subFontSize !== current.subFontSize ||
|
||||
next.subScale !== current.subScale ||
|
||||
next.subMarginY !== current.subMarginY ||
|
||||
next.subMarginX !== current.subMarginX ||
|
||||
next.subFont !== current.subFont ||
|
||||
next.subSpacing !== current.subSpacing ||
|
||||
next.subBold !== current.subBold ||
|
||||
next.subItalic !== current.subItalic ||
|
||||
next.subBorderSize !== current.subBorderSize ||
|
||||
next.subShadowOffset !== current.subShadowOffset ||
|
||||
next.subAssOverride !== current.subAssOverride ||
|
||||
next.subScaleByWindow !== current.subScaleByWindow ||
|
||||
next.subUseMargins !== current.subUseMargins ||
|
||||
next.osdHeight !== current.osdHeight ||
|
||||
JSON.stringify(next.osdDimensions) !== JSON.stringify(current.osdDimensions);
|
||||
return { next, changed };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user