f <- function(x) {
  a <- 1:10
  for (i in seq_along(a)) {
    print(i)
  }
}

test_that("extract_lang issues warning if nothing found", {

  expect_warning(extract_lang(body(f), comp_lang, quote(j)),
    "pkgload is incompatible")
})

test_that("extract_lang and comp_lang finds full statements", {

  expect_equal(extract_lang(body(f), comp_lang, quote(a <- 1:10)),
    quote(a <- 1:10))
})

test_that("extract_lang and comp_lang find child calls", {

  expect_equal(extract_lang(body(f), comp_lang, quote(seq_along(a))),
    quote(seq_along(a)))
})

test_that("extract_lang and comp_lang finds partial statements", {

  expect_equal(extract_lang(body(f), comp_lang, quote(a <- NULL), 1:2),
    quote(a <- 1:10))
})

test_that("extract_lang and comp_lang finds partial statements from for conditionals", {

  expect_equal(extract_lang(body(f), comp_lang, quote(for (i in seq_along(a)) NULL), 1:3),
    quote(for (i in seq_along(a)) { print(i) }))
})

test_that("modify_lang modifies properly", {
  expect_equal(modify_lang(quote(a <- 1:10), function(x) if (comp_lang(x, quote(a))) quote(b) else x),
      quote(b <- 1:10))
})
