context("onDone")

describe("onDone", {
  it ("stops the shiny gadget and returns a htmlwidget", {
    with_mock(
      `shiny::stopApp` = function(x) {
        print("Stop gadget")
        x
      },
      {
        inputs <- initInputEnv(list(x1 = mwText("value1"), x2 = mwSelect(1:3)))
        expr <- expression(combineWidgets(paste(x1, x2)))
        controller <- MWController(expr, inputs)$init()

        expect_output(res <- onDone(controller), "Stop gadget")
        expect_is(res, "htmlwidget")
        expect_equal(length(res$widgets), 1)
        expect_equal(res$widgets[[1]], "value1 1")
      }
    )
  })

  it ("returns a combined widget if comparison", {
    suppressWarnings({with_mock(
      `shiny::stopApp` = function(x) {
        print("Stop gadget")
        x
      },
      {
        compare <- list(x2 = list(1, 2, 3))
        inputs <- initInputEnv(list(x1 = mwText("value1"), x2 = mwSelect(1:3)),
                             compare = compare, ncharts = 3)
        expr <- expression(paste(x1, x2))
        controller <- MWController(expr, inputs)$init()
        expect_output(res <- onDone(controller), "Stop gadget")
        expect_is(res, "combineWidgets")
        expect_equal(length(res$widgets), 3)
        for (i in 1:3) {
          expect_equal(res$widgets[[i]]$widgets[[1]], paste("value1", compare$x2[[i]]))
        }
      }
    )})
  })

})
