package tests import "core:testing" import "../src/core" @test seed_is_deterministic :: proc(t: ^testing.T) { a := core.generate_panel_seed("proj_a", 1, 2, "panel_001") b := core.generate_panel_seed("proj_a", 1, 2, "panel_001") c := core.generate_panel_seed("proj_a", 1, 3, "panel_001") testing.expect(t, a == b, "seed should be stable for same input") testing.expect(t, a != c, "seed should change for different panel number") } @test layout_packs_panels_into_pages :: proc(t: ^testing.T) { panels_arr := [5]core.Panel{ {panel_id = "p1", panel_number = 1}, {panel_id = "p2", panel_number = 2}, {panel_id = "p3", panel_number = 3}, {panel_id = "p4", panel_number = 4}, {panel_id = "p5", panel_number = 5}, } layouts := core.auto_layout_pages(panels_arr[:], .A4, "action", "grid-2x2") defer { for l in layouts { delete(l.panels) } delete(layouts) } testing.expect(t, len(layouts) == 1, "5 panels should fit action-dynamic in a single page") testing.expect(t, layouts[0].pattern_id == "action-dynamic", "expected smallest suitable action pattern") testing.expect(t, len(layouts[0].panels) == 5, "single page should contain all panels") } @test bubble_autoplacement_creates_entries :: proc(t: ^testing.T) { dialogue_arr := [1]core.Dialogue{ {speaker_id = "char_1", text = "Hello there", bubble_type = .Normal, emotion = "neutral"}, } chars_arr := [1]string{"char_1"} panel := core.Panel{ panel_id = "panel_1", dialogue = dialogue_arr[:], characters_present = chars_arr[:], caption = "Narration line", } bubbles := core.auto_place_panel_bubbles(panel, 800, 600) defer { for b in bubbles { delete(b.id) } delete(bubbles) } testing.expect(t, len(bubbles) == 2, "dialogue + caption should produce 2 bubbles") } @test script_normalization_fills_ids :: proc(t: ^testing.T) { panels_arr := [1]core.Panel{{description = "A scene"}} pages_arr := [1]core.Page{{panels = panels_arr[:]}} chars_arr := [1]core.Character{{name = "Hero"}} raw := core.Comic_Script{ title = "", synopsis = "", characters = chars_arr[:], pages = pages_arr[:], } norm := core.normalize_script(raw) defer { delete(norm.title) delete(norm.synopsis) delete(norm.characters[0].id) delete(norm.pages[0].panels[0].panel_id) } testing.expect(t, len(norm.title) > 0, "title should be filled") testing.expect(t, len(norm.characters[0].id) > 0, "character id should be filled") testing.expect(t, len(norm.pages[0].panels[0].panel_id) > 0, "panel id should be filled") }