Watch
2
0
Fork
You've already forked raylib-cs
0

feat: backporting existing raylib-cs examples and new official raylib examples to WASM, adopting raylib's original code style

This commit is contained in:
tiger tiger tiger 2026-07-17 08:22:54 +02:00
commit f804ab7773
234 changed files with 38997 additions and 10578 deletions

View file

@ -0,0 +1,92 @@
import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import {
CANVAS_WIDTH,
CANVAS_HEIGHT,
normalizeScaleMode,
computeDisplaySize
} from './scaleUtils.js';
describe('normalizeScaleMode', () => {
it('returns native for null, undefined, and empty string', () => {
assert.equal(normalizeScaleMode(null), 'native');
assert.equal(normalizeScaleMode(undefined), 'native');
assert.equal(normalizeScaleMode(''), 'native');
});
it('normalizes allowlisted values case-insensitively', () => {
assert.equal(normalizeScaleMode('INTEGER'), 'integer');
assert.equal(normalizeScaleMode('Fit'), 'fit');
assert.equal(normalizeScaleMode('native'), 'native');
});
it('returns native for unknown values', () => {
assert.equal(normalizeScaleMode('stretch'), 'native');
assert.equal(normalizeScaleMode('bogus'), 'native');
});
});
describe('computeDisplaySize', () => {
it('native mode uses 1:1 device pixels at scale 1', () => {
const result = computeDisplaySize('native', 1200, 800, 1);
assert.equal(result.scale, 1);
assert.equal(result.deviceWidth, CANVAS_WIDTH);
assert.equal(result.deviceHeight, CANVAS_HEIGHT);
assert.equal(result.cssWidth, CANVAS_WIDTH);
assert.equal(result.cssHeight, CANVAS_HEIGHT);
assert.equal(result.dpr, 1);
});
it('integer mode scales by floored ratio with minimum scale 1', () => {
const doubled = computeDisplaySize('integer', 1600, 900, 1);
assert.equal(doubled.scale, 2);
assert.equal(doubled.deviceWidth, CANVAS_WIDTH * 2);
assert.equal(doubled.deviceHeight, CANVAS_HEIGHT * 2);
const single = computeDisplaySize('integer', 900, 500, 1);
assert.equal(single.scale, 1);
assert.equal(single.deviceWidth, CANVAS_WIDTH);
assert.equal(single.deviceHeight, CANVAS_HEIGHT);
});
it('fit mode scales proportionally and keeps device dimensions at least 1', () => {
const result = computeDisplaySize('fit', 400, 225, 1);
assert.equal(result.scale, 0.5);
assert.equal(result.deviceWidth, 400);
assert.equal(result.deviceHeight, 225);
});
it('fit mode falls back to scale 1 for zero or negative viewport', () => {
const zero = computeDisplaySize('fit', 0, 0, 1);
assert.equal(zero.scale, 1);
assert.equal(zero.deviceWidth, CANVAS_WIDTH);
assert.equal(zero.deviceHeight, CANVAS_HEIGHT);
const negative = computeDisplaySize('fit', -100, -50, 1);
assert.equal(negative.scale, 1);
assert.equal(negative.deviceWidth, CANVAS_WIDTH);
assert.equal(negative.deviceHeight, CANVAS_HEIGHT);
});
it('applies dpr to viewport before scaling and converts css size back', () => {
const result = computeDisplaySize('native', 400, 225, 2);
assert.equal(result.dpr, 2);
assert.equal(result.deviceWidth, CANVAS_WIDTH);
assert.equal(result.deviceHeight, CANVAS_HEIGHT);
assert.equal(result.cssWidth, CANVAS_WIDTH / 2);
assert.equal(result.cssHeight, CANVAS_HEIGHT / 2);
});
it('treats invalid dpr as 1', () => {
assert.equal(computeDisplaySize('native', 800, 450, 0).dpr, 1);
assert.equal(computeDisplaySize('native', 800, 450, NaN).dpr, 1);
assert.equal(computeDisplaySize('native', 800, 450, Infinity).dpr, 1);
});
});