test_that("assign_labels, unnamed values", {
  x <- 1:3
  # labelling by providing required number of labels
  out <- assign_labels(
    x,
    variable = "My x",
    values = c("one", "two", "three")
  )
  expect_identical(attributes(out)$label, "My x")
  expect_identical(
    attributes(out)$labels,
    structure(1:3, names = c("one", "two", "three"))
  )
})

test_that("assign_labels, named values", {
  # labelling using named vectors
  x <- factor(letters[1:3])
  out <- assign_labels(
    x,
    variable = "Labelled factor",
    values = c(a = "low", b = "mid", c = "high")
  )
  expect_identical(attributes(out)$label, "Labelled factor")
  expect_identical(attributes(out)$labels, c(low = "a", mid = "b", high = "c"))
})

test_that("assign_labels, partially named values", {
  x <- 1:5
  out <- assign_labels(
    x,
    variable = "My x",
    values = c(`1` = "lowest", `5` = "highest"),
    verbose = FALSE
  )
  expect_identical(attributes(out)$label, "My x")
  expect_identical(attributes(out)$labels, c(lowest = 1, highest = 5))
})

test_that("assign_labels, errors", {
  x <- 1:5
  expect_error(assign_labels(x, values = c(`1` = "lowest", `6` = "highest")))
  expect_error(assign_labels(
    x,
    variable = 1,
    values = c(`1` = "lowest", `6` = "highest")
  ))
  expect_error(assign_labels(x, values = c("a", "b", "c")))
})

test_that("assign_labels, data frame", {
  data(iris)
  out <- assign_labels(iris, "Species", values = c("a", "b", "c"))
  expect_identical(
    attributes(out$Species)$labels,
    c(a = "setosa", b = "versicolor", c = "virginica")
  )

  data(mtcars)
  out <- assign_labels(
    mtcars,
    select = c("am", "vs"),
    values = c("low", "high")
  )
  expect_identical(attributes(out$am)$labels, c(low = 0, high = 1))
  expect_identical(attributes(out$vs)$labels, c(low = 0, high = 1))
  expect_null(attributes(out$gear)$labels)
  expect_null(attributes(out$cyl)$labels)
})
