context("Shiny inputs")

# Slider
test_input(mwSlider(0, 10, 0), c(5, -20, 20), c(5, 0, 10))
# Slider with two values
test_input(
  mwSlider(0, 10, 0),
  list(c(5, 7), c(-20, 20), c(-20, 5), c(5, 20)),
  list(c(5, 7), c(0, 10), c(0, 5), c(5, 10))
)

# Text
test_input(mwText(), list("1", 1, NULL), list("1", "1", ""))

# Numeric
test_input(mwNumeric(0), list(5, -20, 20, NULL, "a"), list(5, -20, 20, NULL, NULL))
test_input(mwNumeric(0, min = 0, max = 10), c(5, -20, 20), c(5, 0, 10))

# Password
test_input(mwPassword(), list("1", 1, NULL), list("1", "1", ""))

# Select
test_input(mwSelect(1:4), list(1, 2, 5, NULL), list(1, 2, 1, 1))
test_input(
  mwSelect(1:4, multiple = TRUE),
  list(1, 5, 3:5),
  list(1, integer(0), 3:4)
)
# Select where choices have distinct label and values
test_input(
  mwSelect(list(a = 1, b = 2)),
  list(1, 2, 5, NULL),
  list(1, 2, 1, 1)
)
test_input(
  mwSelect(list(a = 1, b = 2), multiple = TRUE),
  list(1, 2, 5, 1:3),
  list(1, 2, integer(0), 1:2)
)

# Checkbox
test_input(
  mwCheckbox(),
  list(TRUE, FALSE, NULL, NA, "test"),
  list(TRUE, FALSE, FALSE, FALSE, FALSE)
)

# Radio buttons
test_input(mwRadio(1:4), list(1, 2, 5, NULL), list(1, 2, 1, 1))
test_input(
  mwRadio(list(a = 1, b = 2)),
  list(1, 2, 5, NULL),
  list(1, 2, 1, 1)
)

# Date picker
test_input(
  mwDate(),
  list(Sys.Date(), "2017-01-01", NULL),
  list(Sys.Date(), as.Date("2017-01-01"), Sys.Date())
)
# Date with min and max dates
test_input(
  mwDate(min = "2017-01-01", max = "2017-12-31"),
  list("2017-06-01", "2016-06-01", "2018-06-01"),
  list(as.Date("2017-06-01"), as.Date("2017-01-01"), as.Date("2017-12-31"))
)


# Date range
defaultRange <- c(Sys.Date(), Sys.Date())
test_input(
  mwDateRange(),
  list(defaultRange, as.character(defaultRange), NULL),
  list(defaultRange, defaultRange, defaultRange)
)
# Date range with min and max dates
test_input(
  mwDateRange(min = "2017-01-01", max = "2017-12-31"),
  list(c("2016-01-01", "2018-01-01")),
  list(as.Date(c("2017-01-01", "2017-12-31")))
)

# Checkbox group
test_input(
  mwCheckboxGroup(1:4),
  list(1, 5, 3:5),
  list(1, integer(0), 3:4)
)
test_input(
  mwCheckboxGroup(list(a = 1, b = 2)),
  list(1, 2, 5, 1:3),
  list(1, 2, integer(0), 1:2)
)

# Groups of input
test_input(mwGroup(a = mwText(), b = mwText()))
