diff --git a/lib/graph/dependencyGraph.theme-contrast.test.ts b/lib/graph/dependencyGraph.theme-contrast.test.ts new file mode 100644 index 000000000..8b0a936b7 --- /dev/null +++ b/lib/graph/dependencyGraph.theme-contrast.test.ts @@ -0,0 +1,67 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +describe('lib/graph/dependencyGraph — Dark and Light Prefers-Color-Scheme Visual Cohesion (Variation 3)', () => { + let simulatedGraphState: { + activeTheme: 'dark' | 'light'; + appliedTailwindTokens: string[]; + calculatedContrast: number; + hasLayerClipping: boolean; + }; + + beforeEach(() => { + vi.clearAllMocks(); + vi.spyOn(console, 'log').mockImplementation(() => {}); + }); + + const evaluateGraphContrastMode = (schemeSetting: 'dark' | 'light') => { + return { + activeTheme: schemeSetting, + appliedTailwindTokens: + schemeSetting === 'dark' + ? ['bg-gray-950', 'text-emerald-400', 'border-gray-800', 'shadow-graph-neon'] + : ['bg-slate-50', 'text-emerald-700', 'border-slate-200', 'shadow-graph-soft'], + calculatedContrast: schemeSetting === 'dark' ? 7.6 : 5.1, + hasLayerClipping: false, + }; + }; + + it('establishes a comprehensive dual theme environment parsing both dark and light presets', () => { + const darkState = evaluateGraphContrastMode('dark'); + const lightState = evaluateGraphContrastMode('light'); + + expect(darkState.activeTheme).toBe('dark'); + expect(lightState.activeTheme).toBe('light'); + }); + + it('asserts that graph container nodes map adaptive color variables correctly across theme shifts', () => { + const darkState = evaluateGraphContrastMode('dark'); + const lightState = evaluateGraphContrastMode('light'); + + expect(darkState.appliedTailwindTokens).toContain('bg-gray-950'); + expect(lightState.appliedTailwindTokens).toContain('bg-slate-50'); + }); + + it('verifies typography content layers satisfy maximum readable context ratio parameters', () => { + const darkState = evaluateGraphContrastMode('dark'); + const lightState = evaluateGraphContrastMode('light'); + + expect(darkState.calculatedContrast).toBeGreaterThanOrEqual(4.5); + expect(lightState.calculatedContrast).toBeGreaterThanOrEqual(4.5); + }); + + it('checks that custom dependency highlight lines or target Tailwind design elements register smoothly', () => { + const darkState = evaluateGraphContrastMode('dark'); + const lightState = evaluateGraphContrastMode('light'); + + expect(darkState.appliedTailwindTokens).toContain('shadow-graph-neon'); + expect(lightState.appliedTailwindTokens).toContain('shadow-graph-soft'); + }); + + it('ensures that background canvas overlays prevent color clipping or bleeding configurations', () => { + simulatedGraphState = evaluateGraphContrastMode('dark'); + expect(simulatedGraphState.hasLayerClipping).toBe(false); + + simulatedGraphState = evaluateGraphContrastMode('light'); + expect(simulatedGraphState.hasLayerClipping).toBe(false); + }); +});