79 lines
3.1 KiB
TypeScript
79 lines
3.1 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
deriveStartMinimizedFromArgs,
|
|
parseExecPathFromDesktopFile,
|
|
shouldReapplyAppImage,
|
|
} from './autoLaunch';
|
|
|
|
describe('deriveStartMinimizedFromArgs', () => {
|
|
it('returns true when --hidden is present', () => {
|
|
expect(deriveStartMinimizedFromArgs(['--hidden'])).toBe(true);
|
|
expect(deriveStartMinimizedFromArgs(['--foo', '--hidden', '--bar'])).toBe(true);
|
|
});
|
|
it('returns false when --hidden is absent', () => {
|
|
expect(deriveStartMinimizedFromArgs([])).toBe(false);
|
|
expect(deriveStartMinimizedFromArgs(['--other'])).toBe(false);
|
|
});
|
|
it('handles undefined safely', () => {
|
|
expect(deriveStartMinimizedFromArgs(undefined)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('parseExecPathFromDesktopFile', () => {
|
|
it('extracts an unquoted path', () => {
|
|
const content = [
|
|
'[Desktop Entry]',
|
|
'Type=Application',
|
|
'Name=Backspace',
|
|
'Exec=/opt/Backspace/backspace --hidden',
|
|
'X-GNOME-Autostart-enabled=true',
|
|
].join('\n');
|
|
expect(parseExecPathFromDesktopFile(content)).toBe('/opt/Backspace/backspace');
|
|
});
|
|
|
|
it('extracts a double-quoted path (handles spaces in path)', () => {
|
|
const content = 'Exec="/home/user/Apps/Backspace 1.0.AppImage" --hidden\n';
|
|
expect(parseExecPathFromDesktopFile(content)).toBe('/home/user/Apps/Backspace 1.0.AppImage');
|
|
});
|
|
|
|
it('returns null when no Exec= line is present', () => {
|
|
expect(parseExecPathFromDesktopFile('[Desktop Entry]\nName=X\n')).toBeNull();
|
|
});
|
|
|
|
it('ignores commented Exec lines', () => {
|
|
expect(parseExecPathFromDesktopFile('#Exec=/wrong\nExec=/right\n')).toBe('/right');
|
|
});
|
|
|
|
it('returns null on empty input', () => {
|
|
expect(parseExecPathFromDesktopFile('')).toBeNull();
|
|
});
|
|
|
|
it('returns null on an empty quoted Exec= path', () => {
|
|
expect(parseExecPathFromDesktopFile('Exec=""\n')).toBeNull();
|
|
});
|
|
|
|
it('handles CRLF line endings', () => {
|
|
const content = '[Desktop Entry]\r\nExec=/opt/Backspace/backspace --hidden\r\n';
|
|
expect(parseExecPathFromDesktopFile(content)).toBe('/opt/Backspace/backspace');
|
|
});
|
|
});
|
|
|
|
describe('shouldReapplyAppImage', () => {
|
|
it('returns true when AppImage path differs from recorded path', () => {
|
|
expect(shouldReapplyAppImage('/home/u/Backspace-2.0.AppImage', '/home/u/Backspace-1.0.AppImage')).toBe(true);
|
|
});
|
|
it('returns false when paths match', () => {
|
|
expect(shouldReapplyAppImage('/home/u/Backspace-2.0.AppImage', '/home/u/Backspace-2.0.AppImage')).toBe(false);
|
|
});
|
|
it('returns false when no recorded path exists — treat missing autostart entry as user-disabled', () => {
|
|
// A missing .desktop file is a user signal (they disabled via their DE's startup manager
|
|
// or removed it manually), not a stale-path-needs-refresh signal. The OS-authoritative
|
|
// architecture must treat this as "OS state changed, do not override".
|
|
expect(shouldReapplyAppImage('/home/u/Backspace.AppImage', null)).toBe(false);
|
|
});
|
|
it('returns false when there is no current AppImage env (not in AppImage runtime)', () => {
|
|
expect(shouldReapplyAppImage(null, '/anything')).toBe(false);
|
|
expect(shouldReapplyAppImage(null, null)).toBe(false);
|
|
});
|
|
});
|