feat: integrate authored nightdrive soundtrack
This commit is contained in:
@@ -7,11 +7,18 @@ import {
|
||||
evaluateRuntimeTraceBudgetEvidence,
|
||||
validateRuntimeBudgetTraceReport,
|
||||
calculatePeakRequestConcurrency,
|
||||
normalizeDetectedMediaType,
|
||||
PERFORMANCE_BUDGETS,
|
||||
resolveBudgetGateMode,
|
||||
} from '../../scripts/lib/bundle-budgets.mjs';
|
||||
|
||||
describe('release budgets', () => {
|
||||
it('normalizes codec-qualified Opus detection to its manifest container type', () => {
|
||||
expect(normalizeDetectedMediaType('audio/ogg; codecs=opus')).toBe('audio/ogg');
|
||||
expect(normalizeDetectedMediaType('audio/mpeg')).toBe('audio/mpeg');
|
||||
expect(normalizeDetectedMediaType(null)).toBeNull();
|
||||
});
|
||||
|
||||
it('fails closed unless the caller explicitly selects a runtime trace or transfer-only mode', () => {
|
||||
expect(() => resolveBudgetGateMode({ transferOnly: false, runtimeTracePath: null }))
|
||||
.toThrow(/runtime trace is required/u);
|
||||
@@ -39,6 +46,7 @@ describe('release budgets', () => {
|
||||
deferredProjectVisuals: 2.5 * 1024 * 1024,
|
||||
highTierExtras: 750 * 1024,
|
||||
deferredNonVideo: 3.5 * 1024 * 1024,
|
||||
deferredAudio: 13 * 1024 * 1024,
|
||||
imageSceneConcurrency: 2,
|
||||
videoConcurrency: 1,
|
||||
mobileTextureDimension: 2048,
|
||||
@@ -53,6 +61,8 @@ describe('release budgets', () => {
|
||||
expect(classifyArtifact('assets/index-a.js', 'import("./environment-b.js")')).toBe('initial-application-js');
|
||||
expect(classifyArtifact('assets/environment-b.js', 'three scene')).toBe('first-live-scene');
|
||||
expect(classifyArtifact('assets/nightdrive-grand-tourer-a.glb', '')).toBe('first-live-scene');
|
||||
expect(classifyArtifact('assets/nightdrive-main.opus', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/nightdrive-intro.mp3', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/high-tier-b.js', 'optional bloom')).toBe('high-tier-extras');
|
||||
expect(() => classifyArtifact('assets/mystery.bin', '')).toThrow(/unclassified/u);
|
||||
});
|
||||
@@ -108,6 +118,24 @@ describe('release budgets', () => {
|
||||
]));
|
||||
});
|
||||
|
||||
it('validates soundtrack duration without visual dimensions and budgets aggregate transfer', () => {
|
||||
const asset = {
|
||||
id: 'soundtrack-main-opus',
|
||||
mediaType: 'audio/ogg',
|
||||
width: null,
|
||||
height: null,
|
||||
durationMs: 178_605,
|
||||
};
|
||||
|
||||
expect(evaluateMediaAssetBudget(asset, { ...asset }, 4 * 1024 * 1024, 'soundtrack-audio').violations).toEqual([]);
|
||||
expect(() => evaluateMediaAssetBudget({ ...asset, width: 1 }, { ...asset, width: 1 }, 1_024, 'soundtrack-audio'))
|
||||
.toThrow(/audio dimensions/i);
|
||||
expect(() => evaluateMediaAssetBudget({ ...asset, durationMs: null }, { ...asset, durationMs: null }, 1_024, 'soundtrack-audio'))
|
||||
.toThrow(/verified duration/i);
|
||||
expect(evaluateBudgetTotals({ deferredAudio: PERFORMANCE_BUDGETS.deferredAudio! + 1 }).violations)
|
||||
.toContainEqual(expect.objectContaining({ budget: 'deferredAudio' }));
|
||||
});
|
||||
|
||||
it('derives decoded texture and GPU bytes from allocation formulas', () => {
|
||||
const result = evaluateRuntimeBudgetEvidence({
|
||||
schema: 'portfolio-runtime-budget-evidence/v1',
|
||||
|
||||
Reference in New Issue
Block a user