comic/odin/tests/ui_render_phase4.odin
2026-05-21 06:10:32 +02:00

46 lines
1.7 KiB
Odin

package tests
import "core:strings"
import "core:testing"
import "../src/core"
import "../src/shared"
import "../src/ui"
@test
ui_render_contains_header_and_status :: proc(t: ^testing.T) {
state := core.new_initial_state()
controller := ui.new_controller(state)
defer ui.dispose_controller(&controller)
out := ui.render_app_to_string(controller)
defer delete(out)
testing.expect(t, strings.contains(out, "[comic-odin]"), "render should contain app header")
testing.expect(t, strings.contains(out, "jobs=0"), "render should show job count")
testing.expect(t, strings.contains(out, "Story"), "default screen should be story")
}
@test
ui_runtime_apply_commands_flow :: proc(t: ^testing.T) {
state := core.new_initial_state()
pages_dyn: [dynamic]core.Page
append(&pages_dyn, core.Page{page_number = 1})
chars_dyn: [dynamic]core.Character
append(&chars_dyn, core.Character{name = "A"})
state.script = core.Comic_Script{title = "Script", pages = pages_dyn[:], characters = chars_dyn[:]}
state.characters = chars_dyn[:]
state.panel_images = make(map[string]core.Panel_Image)
state.panel_images["p1"] = core.Panel_Image{url = "u", width = 1, height = 1}
controller := ui.new_controller(state)
defer ui.dispose_controller(&controller)
cmds := [2]ui.UI_Command{
{kind = .Navigate, screen = .Layout},
{kind = .Start_Generate, job_type = .Generate_Panel, message = "panel"},
}
err := ui.apply_commands(&controller, cmds[:])
testing.expect(t, shared.is_ok(err), "command sequence should succeed")
testing.expect(t, controller.active_screen == .Layout, "expected layout screen")
testing.expect(t, controller.state.workflow.is_generating, "generation should be active")
}