59 lines
2.6 KiB
TypeScript
59 lines
2.6 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
HARDWARE_PREFERENCE,
|
|
retainsHardwarePreference,
|
|
} from "../native/sender/internal/app/ui/hardware-status.js";
|
|
|
|
const senderUI = readFileSync(
|
|
join(import.meta.dirname, "../native/sender/internal/app/ui/app.js"),
|
|
"utf8",
|
|
);
|
|
const senderHTML = readFileSync(
|
|
join(import.meta.dirname, "../native/sender/internal/app/ui/index.html"),
|
|
"utf8",
|
|
);
|
|
const senderServer = readFileSync(
|
|
join(import.meta.dirname, "../native/sender/internal/app/server.go"),
|
|
"utf8",
|
|
);
|
|
|
|
describe("native sender hardware preference contract", () => {
|
|
it("accepts only a retained prefer-hardware capability result", () => {
|
|
expect(retainsHardwarePreference({
|
|
supported: true,
|
|
config: { hardwareAcceleration: HARDWARE_PREFERENCE },
|
|
})).toBe(true);
|
|
expect(retainsHardwarePreference({ supported: true, config: {} })).toBe(false);
|
|
expect(retainsHardwarePreference({ supported: false, config: {
|
|
hardwareAcceleration: HARDWARE_PREFERENCE,
|
|
} })).toBe(false);
|
|
expect(retainsHardwarePreference(null)).toBe(false);
|
|
});
|
|
|
|
it("keeps VP8 default, maps browser/native H.264, and retains one encoder", () => {
|
|
expect(senderHTML).toContain('<option value="vp8">VP8 (default)</option>');
|
|
expect(senderHTML).toContain('<option value="h264">H.264 (hardware preference)</option>');
|
|
expect(senderHTML).toContain('<option value="native-h264">H.264 (native window hardware)</option>');
|
|
expect(senderUI).toContain('elements.codec?.value === "h264" || elements.codec?.value === "native-h264" ? "h264" : "vp8"');
|
|
expect(senderUI).toContain('elements.codec?.value === "native-h264" ? "native-window-h264" : "browser"');
|
|
expect(senderUI).toContain('codec: codec === "h264" ? "avc1.42c01f" : "vp8"');
|
|
expect(senderUI).toContain("metrics.codec = codec");
|
|
expect(senderUI).toContain("codecLabel(metrics.codec)");
|
|
expect(senderUI).toContain("codecLabel(codec)");
|
|
expect(senderUI).not.toContain("此设备不支持 VP8 720p30 编码");
|
|
expect(senderUI).not.toContain("`VP8 · 3 Mbps 上限");
|
|
expect(senderUI).toContain("encoderInstances: 1");
|
|
expect(senderUI).toContain("HARDWARE_STATUS.PREFERENCE_ACCEPTED");
|
|
expect(senderUI).toContain("HARDWARE_STATUS.FALLBACK");
|
|
expect(senderUI).toContain("HARDWARE_STATUS.UNVERIFIED");
|
|
expect(senderUI).toContain("delete fallback.hardwareAcceleration");
|
|
expect(senderUI).not.toContain('hardwareAcceleration: "prefer-software"');
|
|
expect(senderServer).toContain("ui/hardware-status.js");
|
|
expect(senderServer).toContain("/hardware-status.js");
|
|
});
|
|
});
|