mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-06 21:46:40 +02:00
a727d4ec18
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { describe, test, expect } from 'bun:test';
|
|
import { TEMP_DIR, isPathWithin, IS_WINDOWS } from '../src/platform';
|
|
|
|
describe('platform constants', () => {
|
|
test('TEMP_DIR is /tmp on non-Windows', () => {
|
|
if (!IS_WINDOWS) {
|
|
expect(TEMP_DIR).toBe('/tmp');
|
|
}
|
|
});
|
|
|
|
test('IS_WINDOWS reflects process.platform', () => {
|
|
expect(IS_WINDOWS).toBe(process.platform === 'win32');
|
|
});
|
|
});
|
|
|
|
describe('isPathWithin', () => {
|
|
test('path inside directory returns true', () => {
|
|
expect(isPathWithin('/tmp/foo', '/tmp')).toBe(true);
|
|
});
|
|
|
|
test('path outside directory returns false', () => {
|
|
expect(isPathWithin('/etc/foo', '/tmp')).toBe(false);
|
|
});
|
|
|
|
test('exact match returns true', () => {
|
|
expect(isPathWithin('/tmp', '/tmp')).toBe(true);
|
|
});
|
|
|
|
test('partial prefix does not match (path traversal)', () => {
|
|
// /tmp-evil should NOT match /tmp
|
|
expect(isPathWithin('/tmp-evil/foo', '/tmp')).toBe(false);
|
|
});
|
|
|
|
test('nested path returns true', () => {
|
|
expect(isPathWithin('/tmp/a/b/c', '/tmp')).toBe(true);
|
|
});
|
|
});
|