117 lines
4.9 KiB
Gleam
117 lines
4.9 KiB
Gleam
import gleam/dict
|
|
import gleam/io
|
|
import gleam/string
|
|
import gleeunit
|
|
import gleeunit/should
|
|
|
|
import musicplayer/ui/layout.{Percent, RenderContext, Section, Style}
|
|
import musicplayer/ui/plot
|
|
|
|
pub fn main() -> Nil {
|
|
gleeunit.main()
|
|
}
|
|
|
|
pub fn percent_layout_test() {
|
|
let views = [
|
|
[
|
|
#(
|
|
Section("Row1"),
|
|
layout.Row(
|
|
content: "row 1",
|
|
style: Style(dimensions: Percent(width: 100, height: 50)),
|
|
children: [
|
|
Section("A"),
|
|
Section("B"),
|
|
],
|
|
),
|
|
),
|
|
#(
|
|
Section("A"),
|
|
layout.Cell(
|
|
content: "cell 1",
|
|
style: Style(dimensions: Percent(width: 50, height: 100)),
|
|
),
|
|
),
|
|
#(
|
|
Section("B"),
|
|
layout.Cell(
|
|
content: "cell 2",
|
|
style: Style(dimensions: Percent(width: 50, height: 100)),
|
|
),
|
|
),
|
|
#(
|
|
Section("Row2"),
|
|
layout.Row(
|
|
content: "row 1",
|
|
style: Style(dimensions: Percent(width: 100, height: 50)),
|
|
children: [],
|
|
),
|
|
),
|
|
],
|
|
]
|
|
|
|
let columns = 80
|
|
let rows = 20
|
|
let layout = layout.new(columns, rows, views)
|
|
|
|
let expected =
|
|
"
|
|
┌──────────────────────────────────────────────────────────────────────────────┐
|
|
│row 1────────────────────────────────────────────────────────────────────────┐│
|
|
││cell 1───────────────────────────────┐cell 2───────────────────────────────┐││
|
|
│││ ││ │││
|
|
│││ ││ │││
|
|
│││ ││ │││
|
|
│││ ││ │││
|
|
│││ ││ │││
|
|
││└────────────────────────────────────┘└────────────────────────────────────┘││
|
|
│└────────────────────────────────────────────────────────────────────────────┘│
|
|
│row 1────────────────────────────────────────────────────────────────────────┐│
|
|
││ ││
|
|
││ ││
|
|
││ ││
|
|
││ ││
|
|
││ ││
|
|
││ ││
|
|
││ ││
|
|
│└────────────────────────────────────────────────────────────────────────────┘│
|
|
└──────────────────────────────────────────────────────────────────────────────┘
|
|
"
|
|
|> string.replace(each: "\n", with: "\r\n")
|
|
|> string.trim
|
|
|
|
let context =
|
|
RenderContext(
|
|
parent_width: layout.columns,
|
|
parent_height: layout.rows,
|
|
parent_top_left_x: 1,
|
|
parent_top_left_y: 1,
|
|
position_index: 0,
|
|
)
|
|
|
|
let assert Ok(view) = dict.get(layout.views, layout.current_view)
|
|
|
|
let flushed =
|
|
layout.render_loop(
|
|
view,
|
|
context,
|
|
Section(string.append("view_", string.inspect(layout.current_view))),
|
|
dict.new(),
|
|
)
|
|
|> plot.flush_buffer(layout.columns, layout.rows)
|
|
|
|
case flushed == expected {
|
|
True -> Nil
|
|
False -> {
|
|
io.println("Test failed")
|
|
io.println("Expected:")
|
|
io.println(string.trim(expected))
|
|
|
|
io.println("Got:")
|
|
io.println(flushed)
|
|
|
|
should.equal(flushed, expected)
|
|
}
|
|
}
|
|
}
|