forked from phenom/healer-man
Release Healer Man 0.1.45
This commit is contained in:
1 parent
756ee4f64a
commit
f82daf1c13
242 files changed
+1440
-101
No files matched your search
@@ -117,32 +117,58 @@ describe("combat audio output policy", () => {
|
||||
expect(AudioContextConstructor).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("stays silent without an original sound, even with combat audio enabled", () => {
|
||||
combatMedia.ready = true;
|
||||
const AudioContextConstructor = vi.fn();
|
||||
vi.stubGlobal("window", { AudioContext: AudioContextConstructor });
|
||||
configureCombatAudio(DEFAULT_COMBAT_PRESENTATION_SETTINGS, 0.6);
|
||||
|
||||
playCombatAudio(fixtureEvent);
|
||||
|
||||
expect(AudioContextConstructor).not.toHaveBeenCalled();
|
||||
expect(combatMedia.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it.each(["original", "missing-file", "bad-audio"])("uses original audio or silence for %s", async (scenario) => {
|
||||
vi.resetModules();
|
||||
const audio = await import("./combatAudio");
|
||||
const source = { connect: vi.fn(), disconnect: vi.fn(), start: vi.fn(), stop: vi.fn(), buffer: null, onended: null };
|
||||
it("plays a generated spatial cue when an original sound is unavailable", () => {
|
||||
const oscillator = {
|
||||
connect: vi.fn(), disconnect: vi.fn(), start: vi.fn(), stop: vi.fn(),
|
||||
frequency: { setValueAtTime: vi.fn() }, type: "sine", onended: null,
|
||||
};
|
||||
const audioContext = {
|
||||
currentTime: 0,
|
||||
state: "running",
|
||||
destination: {},
|
||||
createGain: () => ({
|
||||
connect: vi.fn(), disconnect: vi.fn(), gain: { setTargetAtTime: vi.fn(), value: 1 },
|
||||
connect: vi.fn(), disconnect: vi.fn(),
|
||||
gain: {
|
||||
setTargetAtTime: vi.fn(), setValueAtTime: vi.fn(),
|
||||
exponentialRampToValueAtTime: vi.fn(), value: 1,
|
||||
},
|
||||
}),
|
||||
createStereoPanner: () => ({ connect: vi.fn(), disconnect: vi.fn() }),
|
||||
createOscillator: vi.fn(() => oscillator),
|
||||
resume: vi.fn(async () => undefined),
|
||||
};
|
||||
vi.stubGlobal("window", { AudioContext: function () { return audioContext; } });
|
||||
configureCombatAudio(DEFAULT_COMBAT_PRESENTATION_SETTINGS, 0.6);
|
||||
|
||||
playCombatAudio(fixtureEvent);
|
||||
|
||||
expect(audioContext.createOscillator).toHaveBeenCalledTimes(1);
|
||||
expect(oscillator.start).toHaveBeenCalledTimes(1);
|
||||
expect(oscillator.stop).toHaveBeenCalledTimes(1);
|
||||
expect(combatMedia.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it.each(["original", "missing-file", "bad-audio"])("uses original audio or a generated fallback for %s", async (scenario) => {
|
||||
vi.resetModules();
|
||||
const audio = await import("./combatAudio");
|
||||
const source = { connect: vi.fn(), disconnect: vi.fn(), start: vi.fn(), stop: vi.fn(), buffer: null, onended: null };
|
||||
const oscillator = {
|
||||
connect: vi.fn(), disconnect: vi.fn(), start: vi.fn(), stop: vi.fn(),
|
||||
frequency: { setValueAtTime: vi.fn() }, type: "sine", onended: null,
|
||||
};
|
||||
const audioContext = {
|
||||
currentTime: 0,
|
||||
state: "running",
|
||||
destination: {},
|
||||
createGain: () => ({
|
||||
connect: vi.fn(), disconnect: vi.fn(), gain: {
|
||||
setTargetAtTime: vi.fn(), setValueAtTime: vi.fn(),
|
||||
exponentialRampToValueAtTime: vi.fn(), value: 1,
|
||||
},
|
||||
}),
|
||||
createStereoPanner: () => ({ connect: vi.fn(), disconnect: vi.fn() }),
|
||||
createBufferSource: vi.fn(() => source),
|
||||
createOscillator: vi.fn(),
|
||||
createOscillator: vi.fn(() => oscillator),
|
||||
decodeAudioData: vi.fn(async () => {
|
||||
if (scenario === "bad-audio") throw new Error("Invalid audio");
|
||||
return { duration: 1 };
|
||||
@@ -165,7 +191,8 @@ describe("combat audio output policy", () => {
|
||||
expect(combatMedia.fetch).toHaveBeenCalledWith("/assets/game/combat-effects/audio/flash-heal.wav");
|
||||
expect(source.start).toHaveBeenCalledTimes(scenario === "original" ? 1 : 0);
|
||||
expect(audioContext.createBufferSource).toHaveBeenCalledTimes(scenario === "original" ? 1 : 0);
|
||||
expect(audioContext.createOscillator).not.toHaveBeenCalled();
|
||||
expect(audioContext.createOscillator).toHaveBeenCalledTimes(scenario === "original" ? 0 : 1);
|
||||
expect(oscillator.start).toHaveBeenCalledTimes(scenario === "original" ? 0 : 1);
|
||||
audio.resetCombatAudio();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user