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)
  )
})
