mirror of
https://github.com/jarrodwatts/claude-hud.git
synced 2026-04-16 06:32:39 +00:00
90 lines
3.0 KiB
JavaScript
90 lines
3.0 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { _setMemoryReaderForTests, formatBytes, getMemoryUsage, parseVmStat } from '../dist/memory.js';
|
|
|
|
test('getMemoryUsage returns coarse system RAM usage with clamped values', async () => {
|
|
_setMemoryReaderForTests(() => ({
|
|
totalBytes: 16 * 1024 ** 3,
|
|
freeBytes: 20 * 1024 ** 3,
|
|
}));
|
|
|
|
const memoryUsage = await getMemoryUsage();
|
|
|
|
assert.deepEqual(memoryUsage, {
|
|
totalBytes: 16 * 1024 ** 3,
|
|
usedBytes: 0,
|
|
freeBytes: 16 * 1024 ** 3,
|
|
usedPercent: 0,
|
|
});
|
|
});
|
|
|
|
test('getMemoryUsage returns null when memory lookup fails', async () => {
|
|
_setMemoryReaderForTests(() => {
|
|
throw new Error('boom');
|
|
});
|
|
|
|
const memoryUsage = await getMemoryUsage();
|
|
|
|
assert.equal(memoryUsage, null);
|
|
});
|
|
|
|
test('parseVmStat parses vm_stat output correctly', () => {
|
|
const output = `Mach Virtual Memory Statistics: (page size of 16384 bytes)
|
|
Pages free: 2588951.
|
|
Pages active: 253775.
|
|
Pages inactive: 246498.
|
|
Pages speculative: 35498.
|
|
Pages throttled: 0.
|
|
Pages wired down: 195488.
|
|
Pages purgeable: 14994.
|
|
"Translation faults": 894498389.
|
|
Pages copy-on-write: 26696671.
|
|
Pages zero filled: 416498538.
|
|
Pages reactivated: 13299498.
|
|
Pages purged: 5765498.
|
|
File-backed pages: 156498.
|
|
Anonymous pages: 343775.
|
|
Pages stored in compressor: 498775.
|
|
Pages occupied by compressor: 115488.
|
|
Decompressions: 42498775.
|
|
Compressions: 58498775.
|
|
Pageins: 84498775.
|
|
Pageouts: 1498775.
|
|
Swapins: 0.
|
|
Swapouts: 0.`;
|
|
const result = parseVmStat(output);
|
|
assert.deepEqual(result, { pageSize: 16384, active: 253775, wired: 195488 });
|
|
});
|
|
|
|
test('parseVmStat returns null for empty string', () => {
|
|
assert.equal(parseVmStat(''), null);
|
|
});
|
|
|
|
test('parseVmStat returns null for malformed output', () => {
|
|
assert.equal(parseVmStat('not valid vm_stat output'), null);
|
|
});
|
|
|
|
test('macOS memory calculation: 16GB total, active+wired via vm_stat → 43%', async () => {
|
|
const totalBytes = 16 * 1024 ** 3;
|
|
const usedBytes = (253775 + 195488) * 16384;
|
|
_setMemoryReaderForTests(() => ({
|
|
totalBytes,
|
|
freeBytes: totalBytes - usedBytes,
|
|
}));
|
|
|
|
const memoryUsage = await getMemoryUsage();
|
|
assert.equal(memoryUsage.usedPercent, 43);
|
|
assert.equal(memoryUsage.usedBytes, usedBytes);
|
|
});
|
|
|
|
test('formatBytes formats human-readable units for memory line display', () => {
|
|
assert.equal(formatBytes(0), '0 B');
|
|
assert.equal(formatBytes(512), '512 B');
|
|
assert.equal(formatBytes(1536), '1.5 KB');
|
|
assert.equal(formatBytes(10 * 1024 ** 3), '10 GB');
|
|
});
|
|
|
|
test.after(() => {
|
|
_setMemoryReaderForTests(null);
|
|
});
|