library(testthat)

test_that("Check that multi-line is higher than single line box", {
  b1 <- boxPropGrob(
    label = "Label",
    label_left = "Left",
    label_right = "Right",
    prop = 0.5
  )
  b2 <- boxPropGrob(
    label = "Label",
    label_left = "Left1\nLeft2",
    label_right = "Right",
    prop = 0.5
  )

  expect_gt(
    grobHeight(b2) |> prConvertHeightToMm(),
    grobHeight(b1) |> prConvertHeightToMm()
  )

  b3 <- boxPropGrob(
    label = "Label1\nlabel2",
    label_left = "Left",
    label_right = "Right",
    prop = 0.5
  )
  expect_gt(
    grobHeight(b3) |> prConvertHeightToMm(),
    grobHeight(b1) |> prConvertHeightToMm()
  )

  b4 <- boxPropGrob(
    label = "Label",
    label_left = "Left",
    label_right = "Right1\nRight2",
    prop = 0.5
  )
  expect_gt(
    grobHeight(b4) |> prConvertHeightToMm(),
    grobHeight(b1) |> prConvertHeightToMm()
  )
})

test_that("Check that not providing label reduces the height of the box", {
  b1 <- boxPropGrob(
    label = "Label",
    label_left = "Left", "Right",
    prop = 0.5
  )
  b2 <- boxPropGrob(
    label_left = "Left",
    label_right = "Right",
    prop = 0.5
  )

  expect_lt(
    grobHeight(b2) |> prConvertHeightToMm(),
    grobHeight(b1) |> prConvertHeightToMm()
  )

  b3 <- boxPropGrob(label = "Label", prop = 0.5)
  expect_lt(
    grobHeight(b3) |> prConvertHeightToMm(),
    grobHeight(b1) |> prConvertHeightToMm()
  )
})

test_that("Label with two lines increases the height", {
  b1 <- boxPropGrob(
    label = "A",
    label_left = "A",
    label_right = "A", prop = .5
  ) |>
    grobHeight() |>
    convertY(unitTo = "mm", valueOnly = TRUE)
  b2 <- boxPropGrob(
    label = "A\nA",
    label_left = "AA",
    label_right = "AA", prop = .5
  ) |>
    grobHeight() |>
    convertY(unitTo = "mm", valueOnly = TRUE)
  expect_gt(b2, b1, label = "Prop box height should be defined from the width of the text")
})
