# obj_sum ----------------------------------------------------------------

test_that("forwards to vec_ptype_abbr() for S4", {
  x <- methods::setClass("A")
  expect_equal(obj_sum(x), vec_ptype_abbr(x))
})

test_that("forwards to vec_ptype_abbr() for S3", {
  x <- structure(list(), class = c("a", "b", "c"))
  expect_equal(obj_sum(x), vec_ptype_abbr(x))
})

test_that("NULL handled specially", {
  expect_equal(obj_sum(NULL), "NULL")
})

test_that("data frames and common data vectors have size summary", {
  local_override_size_sum()

  expect_obj_sum_is_ptype <- function(x) {
    obj_sum <- obj_sum(x)
    attr(obj_sum, "short") <- NULL

    ptype <- vec_ptype_abbr(x, suffix_shape = FALSE)

    expect_equal(obj_sum, !!paste_with_space_if_needed(ptype, size_sum(x)))
  }

  expect_obj_sum_is_ptype(mtcars)
  expect_obj_sum_is_ptype(factor(1:3))
  expect_obj_sum_is_ptype(ordered(1:3))
  expect_obj_sum_is_ptype(Sys.Date() + 1:3)
  expect_obj_sum_is_ptype(Sys.time() + 1:3)
  expect_obj_sum_is_ptype(Sys.time() - Sys.time() + 1:3)
  expect_obj_sum_is_ptype(as.POSIXlt(Sys.time() + 1:3))
  expect_obj_sum_is_ptype(list(1, 2:3))
  expect_obj_sum_is_ptype(matrix(1:10, ncol = 2))
  expect_obj_sum_is_ptype(Titanic)
  expect_obj_sum_is_ptype(as_override_size_sum(1:3))
})

test_that("object summary has short version", {
  local_override_size_sum()

  expect_obj_sum_short_is_ptype <- function(x, suffix = "") {
    obj_sum <- attr(obj_sum(x), "short")

    ptype <- vec_ptype_abbr(x, suffix_shape = FALSE)

    expect_equal(obj_sum, !!paste0(ptype, suffix))
  }

  expect_obj_sum_short_is_ptype(mtcars)
  expect_obj_sum_short_is_ptype(factor(1:3))
  expect_obj_sum_short_is_ptype(ordered(1:3))
  expect_obj_sum_short_is_ptype(Sys.Date() + 1:3)
  expect_obj_sum_short_is_ptype(Sys.time() + 1:3)
  expect_obj_sum_short_is_ptype(Sys.time() - Sys.time() + 1:3)
  expect_obj_sum_short_is_ptype(as.POSIXlt(Sys.time() + 1:3))
  expect_obj_sum_short_is_ptype(list(1, 2:3))
  expect_obj_sum_short_is_ptype(matrix(1:10, ncol = 2), paste0("[", symbol$ellipsis, "]"))
  expect_obj_sum_short_is_ptype(Titanic, paste0("[", symbol$ellipsis, "]"))
  expect_obj_sum_short_is_ptype(as_override_size_sum(1:3))
})


# type_sum ----------------------------------------------------------------

test_that("less common objects get abbreviations", {
  expect_equal(type_sum(environment()), "env")
  expect_equal(type_sum(environment), "fn")
  expect_equal(type_sum(list), "fn")
  expect_equal(type_sum(quote(foo)), "sym")
  expect_equal(type_sum(expr()), "missing")
})
