test_that("Input check for arguments", {
  # check each arguments with different input type
  expect_error(rtf_subset(c("a", "b"), row = 1, col = 1))
  expect_error(rtf_subset(matrix(1:9, nrow = 3, ncol = 3), row = 1:2, col = c(1:2)))
  expect_error(rtf_subset(r2rtf_tbl1, row = "1", col = c(1:2)))
})


# an example of data frame with attributes
tbl <- r2rtf_tbl1 |>
  rtf_colheader(colheader = "Trt|N1|Mean1|N2|Mean2|N3|Mean3|CI", border_left = "") |>
  rtf_body(col_rel_width = c(1, 2, 3, 4, 2, 2, 2, 2))

# an example of subsetted data frame
tbl_sub <- tbl |> rtf_subset(row = 1:2, col = 2:4)

# create two expected matrices
blk <- matrix("", nrow = 2, ncol = 3)
sgl <- matrix("single", nrow = 2, ncol = 3)


test_that("Test whether border/text attributes were passed correctly", {
  expect_equal(attr(tbl_sub, "border_top"), blk)
  expect_equal(attr(tbl_sub, "border_left"), sgl)
  expect_equal(attr(tbl_sub, "border_right"), sgl)
  expect_equal(attr(tbl_sub, "border_bottom"), blk)
  expect_equal(attr(tbl_sub, "border_first"), sgl)
  expect_equal(attr(tbl_sub, "border_last"), sgl)
  expect_equal(attr(tbl_sub, "border_color_left"), NULL)
  expect_equal(attr(tbl_sub, "border_color_right"), NULL)
  expect_equal(attr(tbl_sub, "border_color_first"), NULL)
  expect_equal(attr(tbl_sub, "text_font"), matrix(1, nrow = 2, ncol = 3))
  expect_equal(attr(tbl_sub, "text_format"), NULL)
  expect_equal(attr(tbl_sub, "text_font_size"), matrix(9, nrow = 2, ncol = 3))
  expect_equal(attr(tbl_sub, "text_justification"), matrix("c", nrow = 2, ncol = 3))
  expect_equal(attr(tbl_sub, "text_convert"), matrix(TRUE, nrow = 2, ncol = 3))
  expect_equal(attr(tbl_sub, "cell_nrow"), NULL)
})


test_that("Test whether scale attributes were passed correctly", {
  expect_equal(attr(tbl_sub, "border_width"), 15)
  expect_equal(attr(tbl_sub, "cell_height"), .15)
  expect_equal(attr(tbl_sub, "text_space_before"), 15)
  expect_equal(attr(tbl_sub, "text_space_after"), 15)
  expect_equal(attr(tbl_sub, "cell_justification"), "c")
})


test_that("Test whether other attributes were passed correctly", {
  expect_equal(attr(tbl_sub, "rtf_pageby")["new_page"], list(new_page = FALSE))
  expect_true(is.null(attr(tbl_sub, "rtf_pageby$by_var")))
  expect_true(is.null(attr(tbl_sub, "rtf_pageby$id")))
  expect_true(attr(tbl_sub, "last_row"))
  expect_true(attr(tbl_sub, "text_hyphenation"))
  expect_false(attr(tbl_sub, "use_color"))
  expect_false(attr(tbl_sub, "text_new_page"))
  expect_equal(attr(tbl_sub, "col_rel_width"), c(2, 3, 4))
  expect_equal(attr(tbl_sub, "text_indent_first"), matrix(0, nrow = 2, ncol = 3))
  expect_equal(attr(tbl_sub, "page")["use_color"], list(use_color = FALSE))
  expect_equal(attr(tbl_sub, "page")["border_last"], list(border_last = "double"))
  expect_equal(attr(tbl_sub, "page")["col_width"], list(col_width = 6.25))
  expect_equal(attr(tbl_sub, "page")["nrow"], list(nrow = 40))
  expect_equal(attr(tbl_sub, "page")["margin"], list(margin = c(1.25, 1, 1.75, 1.25, 1.75, 1.00625)))
  expect_equal(attr(tbl_sub, "page")["orientation"], list(orientation = "portrait"))
  expect_equal(attr(tbl_sub, "page")["height"], list(height = 11))
  expect_equal(attr(tbl_sub, "names"), c("N1", "Mean1", "N2"))
  expect_equal(attr(tbl_sub, "class"), c("data.frame", "rtf_text", "rtf_border"))
  expect_equal(attr(tbl_sub, "row.names"), c(1, 2))
})
