context("at")

df1 <- data.frame(x = 1:2, y = 4:5, col = 'black', type = letters[1:2], stringsAsFactors = FALSE)
df2 <- data.frame(x = 11:12, y = 14:15, col = 'white', type = letters[1], stringsAsFactors = FALSE)

test_that("tween_at works", {
  tween <- tween_at(df1, df2, 0.5, 'linear')
  expect_equal(nrow(tween), 2)
  expect_named(tween, names(df1))
  expect_equal(tween$x, c(6, 7))
  expect_equal(tween$col[1], '#777777')
})

test_that("tween_at handles weird input", {
  tween <- tween_at(df1, df2[1,], 0.5, 'linear')
  expect_equal(nrow(tween), 2)
  tween <- tween_at(df1[1,], df2, 0.5, 'linear')
  expect_equal(nrow(tween), 2)
  tween <- tween_at(df1, df2[integer(),], 0.5, 'linear')
  expect_equal(nrow(tween), 0)
  tween <- tween_at(df1[integer(),], df2, 0.5, 'linear')
  expect_equal(nrow(tween), 0)
  expect_error(tween_at(df1[c(1,2,1), ], df2, 0.5, 'linear'))
  expect_error(tween_at(df1, df2, numeric(), 'linear'))
  expect_error(tween_at(df1, df2, 0.5, character()))
})

test_that('tween_at works with vectors', {
  tween <- tween_at(df1$x, df2$x, 0.5, 'linear')
  expect_is(tween, 'numeric')
  expect_equal(tween, c(6,7))
  expect_error(tween_at(df1$x, df2$col))
})
