1describe("with_connection", {
2  it("errors if connection is not named", {
3    expect_error({
4      with_connection(list(TRUE), TRUE)
5    }, "all(is.named(con)) is not TRUE", fixed = TRUE)
6  })
7
8  it("creates a single connection", {
9    tmp <- tempfile()
10    on.exit(unlink(tmp))
11    expect_false(exists("con"))
12    with_connection(list(con = file(tmp, "w")), {
13      writeLines(c("foo", "bar"), con)
14    })
15    expect_false(exists("con"))
16    expect_equal(readLines(tmp), c("foo", "bar"))
17  })
18
19  it("creates multiple connections", {
20    tmp <- tempfile()
21    tmp2 <- tempfile()
22    on.exit(unlink(c(tmp, tmp2)))
23    expect_false(exists("con"))
24    expect_false(exists("con2"))
25    with_connection(list(con = file(tmp, "w"), con2 = file(tmp2, "w")), {
26      writeLines(c("foo", "bar"), con)
27      writeLines(c("baz", "qux"), con2)
28    })
29    expect_false(exists("con"))
30    expect_false(exists("con2"))
31    expect_equal(readLines(tmp), c("foo", "bar"))
32    expect_equal(readLines(tmp2), c("baz", "qux"))
33  })
34
35  it("works if there is an existing object with the same name", {
36    tmp <- tempfile()
37
38    con <- "foo"
39    with_connection(list(con = file(tmp, "w")), {
40      writeLines("foo", con)
41    })
42    expect_true(exists("con"))
43    expect_equal(readLines(tmp), "foo")
44  })
45
46  it("works if there is an existing connection with the same name", {
47    tmp <- tempfile()
48    tmp2 <- tempfile()
49
50    con <- file(tmp, "w")
51    writeLines("foo", tmp)
52    with_connection(list(con = file(tmp2, "w")), {
53      writeLines("bar", con)
54    })
55    close(con)
56
57    expect_equal(readLines(tmp), "foo")
58    expect_equal(readLines(tmp2), "bar")
59  })
60})
61
62describe("local_connection", {
63  it("creates a single connection", {
64    tmp <- tempfile()
65    on.exit(unlink(tmp))
66    expect_false(exists("con"))
67
68    (function() {
69      con <- local_connection(file(tmp, "w"))
70      writeLines(c("foo", "bar"), con)
71    })()
72    expect_false(exists("con"))
73    expect_equal(readLines(tmp), c("foo", "bar"))
74  })
75})
76