// Tests der Fensterlage (haupt/fensterlage.ts, 5.5.0): 80 % des // Arbeitsbereichs, mittig, Mindestmaß; gemerkte Lage nur, wenn sie noch auf // einem Bildschirm liegt; Lesen/Schreiben der Datei. import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, describe, expect, it } from 'vitest' import { anfangsLage, lageLesen, lageSchreiben, liegtSichtbar, startLage } from '../src/haupt/fensterlage' const ordner = mkdtempSync(join(tmpdir(), 'rippy-lage-')) afterAll(() => rmSync(ordner, { recursive: true, force: true })) describe('startLage', () => { it('Full HD ohne Taskleiste: 80 % und mittig', () => { expect(startLage({ x: 0, y: 0, width: 1920, height: 1040 })).toEqual({ x: 192, y: 104, width: 1536, height: 832, maximiert: false }) }) it('kleiner Bildschirm: Mindestmaß 1100 × 720, aber nie größer als der Bildschirm', () => { expect(startLage({ x: 0, y: 0, width: 1280, height: 720 })).toEqual({ x: 90, y: 0, width: 1100, height: 720, maximiert: false }) expect(startLage({ x: 0, y: 0, width: 1024, height: 600 })).toEqual({ x: 0, y: 0, width: 1024, height: 600, maximiert: false }) }) it('Zweitmonitor rechts: der Versatz des Arbeitsbereichs zählt mit', () => { const l = startLage({ x: 1920, y: 0, width: 2560, height: 1400 }) expect(l.x).toBe(1920 + 256) expect(l.width).toBe(2048) }) }) describe('liegtSichtbar / anfangsLage', () => { const bildschirme = [ { x: 0, y: 0, width: 1920, height: 1080 }, { x: 1920, y: 0, width: 2560, height: 1440 }, ] it('auf einem Bildschirm: ja; im Nirgendwo eines abgestöpselten Monitors: nein', () => { expect(liegtSichtbar({ x: 100, y: 100, width: 1200, height: 800, maximiert: false }, bildschirme)).toBe(true) expect(liegtSichtbar({ x: 2500, y: 200, width: 1200, height: 800, maximiert: false }, bildschirme)).toBe(true) expect(liegtSichtbar({ x: -3000, y: 200, width: 1200, height: 800, maximiert: false }, bildschirme)).toBe(false) expect(liegtSichtbar({ x: 100, y: 100, width: 300, height: 200, maximiert: false }, bildschirme)).toBe(false) }) it('anfangsLage: gemerkt, wenn sichtbar — sonst Start', () => { const arbeit = { x: 0, y: 0, width: 1920, height: 1040 } const gemerkt = { x: 2000, y: 50, width: 1400, height: 900, maximiert: true } expect(anfangsLage(gemerkt, arbeit, bildschirme)).toBe(gemerkt) expect(anfangsLage({ ...gemerkt, x: 9000 }, arbeit, bildschirme)).toEqual(startLage(arbeit)) expect(anfangsLage(null, arbeit, bildschirme)).toEqual(startLage(arbeit)) }) }) describe('lageLesen / lageSchreiben', () => { it('Runde durch die Datei', () => { const pfad = join(ordner, 'fenster-lage.json') lageSchreiben(pfad, { x: 10, y: 20, width: 1300, height: 850, maximiert: true }) expect(lageLesen(pfad)).toEqual({ x: 10, y: 20, width: 1300, height: 850, maximiert: true }) }) it('fehlende oder kaputte Datei heißt Startlage (null)', () => { expect(lageLesen(join(ordner, 'gibt-es-nicht.json'))).toBeNull() const kaputt = join(ordner, 'kaputt.json') writeFileSync(kaputt, '{"x": "zehn"}') expect(lageLesen(kaputt)).toBeNull() writeFileSync(kaputt, 'kein json') expect(lageLesen(kaputt)).toBeNull() }) })