tests/testthat/test-plotting.R

test_that("createTurtles works", {
  withr::local_package("quickPlot")
  w1 <- createWorld(minPxcor = 0, maxPxcor = 4, minPycor = 0, maxPycor = 4, data = sample(1:25))
  w2 <- createWorld(minPxcor = 0, maxPxcor = 4, minPycor = 0, maxPycor = 4, data = 1:25)
  a1 <- stackWorlds(w1, w2)
  t1 <- createTurtles(n = 10, coords = randomXYcor(w1, n = 10))
  t1_0 <- createTurtles(n = 10, coords = cbind(rep(0, 10), rep(0, 10)))


  if (requireNamespace("sp", quietly = TRUE)) {
    sp1 <- turtles2spdf(t1)
  }
  if (requireNamespace("sf", quietly = TRUE)) {
    sp2 <- turtles2sf(t1)
  }

  if (requireNamespace("raster", quietly = TRUE)) {
    r1 <- world2raster(w1)
    s1 <- world2raster(a1)
  }

  clearPlot()

  # TODO Error in .local(x, ...) : matrix should not have more than 2 columns
  #   extent is not being found correctly
  plotNum <- 1
  Plot(t1)
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)

  if (requireNamespace("sp", quietly = TRUE)) {
    plotNum <- plotNum + 1
    mess <- capture_messages(Plot(sp1)) # "setting graphics device" message occurs the first time
    expect_silent(Plot(sp1))
    a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
    expect_true(length(a$isBaseLayer) == plotNum)
    expect_true(length(a$curr@quickPlotGrobList) == plotNum)
  }

  plotNum <- plotNum + 1
  expect_silent(Plot(w1, axes = TRUE, new = TRUE))
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList$w1) == 1)

  expect_silent(Plot(t1, addTo = "w1"))
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList$w1) == 2)

  plotNum <- plotNum + 1
  expect_silent(Plot(w2))
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList$w2) == 1)

  plotNum <- plotNum + 2 # an 2x array
  expect_silent(Plot(a1))
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList$`a1$w1`) == 1)

  # TODO -- these points are not correctly aligned on raster
  expect_silent(Plot(t1, addTo = "a1$w1"))
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList$`a1$w1`) == 2)

  if (requireNamespace("raster", quietly = TRUE)) {
    plotNum <- plotNum + 2 # an 2x array
    expect_silent(Plot(s1))
    a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
    expect_true(length(a$isBaseLayer) == plotNum)
    expect_true(length(a$curr@quickPlotGrobList) == plotNum)
    expect_true(length(a$curr@quickPlotGrobList$`a1$w1`) == 2)

    plotNum <- plotNum + 1
    expect_silent(Plot(r1))
    a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
    expect_true(length(a$isBaseLayer) == plotNum)
    expect_true(length(a$curr@quickPlotGrobList) == plotNum)
    expect_true(length(a$curr@quickPlotGrobList$`a1$w1`) == 2)

    s1$layer.1[3] <- 15
    s1$layer.2[3] <- 25

    expect_silent(Plot(s1$layer.1)) # doesn't change s1$layer.2
    expect_silent(Plot(s1$layer.2)) # doesn't change s1$layer.1
    expect_silent(Plot(a1$w1))
  }

  expect_silent(rePlot())
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == plotNum)
  expect_true(length(a$curr@quickPlotGrobList) == plotNum)

  # Test singularity of agents in agentMatrix
  clearPlot()
  expect_silent(Plot(t1_0, axes = TRUE, new = TRUE)) # agentMatrix
  a <- getFromNamespace(".getQuickPlot", ns = "quickPlot")(paste0("quickPlot", dev.cur()))
  expect_true(length(a$isBaseLayer) == 1)
  expect_true(length(a$curr@quickPlotGrobList) == 1)
})
PredictiveEcology/NetLogoR documentation built on Jan. 31, 2024, 9:31 p.m.