context("json_vec objects")
test_that("common subclass can be determined", {
expect_true(has_common_subclass(
list(structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class")))))
expect_true(has_common_subclass(
list(structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class")))))
expect_false(has_common_subclass(
list(structure("a", class = c("foo", "json_class")),
structure("b", class = c("foo", "json_class")))))
expect_false(has_common_subclass(
list(structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class")))))
expect_false(has_common_subclass(
list(structure(list("a"), class = c("foo")),
structure(list("b"), class = c("bar", "json_class")))))
expect_true(has_common_subclass(
list(structure(list("a"), class = c("foo", "json_class")))))
expect_false(has_common_subclass(
list(structure(list("a"), class = c("foo")))))
expect_false(has_common_subclass(
list(structure(list("a"), class = c("json_class", "foo")))))
expect_false(has_common_subclass(
list(structure(list("a"), class = c("json_class", "foo")),
structure(list("b"), class = c("foo", "json_class")))))
expect_false(has_common_subclass(NULL))
expect_false(has_common_subclass(NA))
expect_false(has_common_subclass("a"))
expect_error(has_common_subclass())
expect_equal(get_subclass(
list(structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class")))), "foo")
expect_equal(get_subclass(
list(structure(list("a"), class = c("foo", "json_class")))), "foo")
expect_error(get_subclass(
list(structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class")))))
expect_error(get_subclass(
list(structure(list("a"), class = "foo"),
structure(list("b"), class = "foo"))))
expect_equal(get_subclass(
list(structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class")))),
c("foo", "bar"))
expect_error(get_subclass(
list(structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("bar", "foo", "json_class")))))
})
test_that("json_vec objects can be created", {
a <- structure(list("a"), class = c("foo", "json_class"))
b <- structure(list("b"), class = c("foo", "json_class"))
expect_s3_class(json_vec(a, b), c("foo", "json_vec"))
expect_identical(json_vec(a, b), new_json_vec(list(a, b)))
expect_error(json_vec(structure(list("a"), class = c("foo")),
structure(list("b"), class = c("foo"))))
expect_error(json_vec(structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class"))))
expect_error(json_vec(structure(list("a"), class = c("json_class")),
structure(list("b"), class = c("json_class"))))
expect_identical(json_vec(a, b), as.json_vec(json_vec(a, b)))
expect_identical(json_vec(a), as.json_vec(a))
expect_identical(json_vec(a, b), as.json_vec(list(a, b)))
expect_error(as.json_vec(list("a", "b")))
expect_error(as.json_vec("a"))
expect_identical(as.list(json_vec(a, b)), list(a, b))
vec <- json_vec(a, b)
expect_s3_class(vec[1], "json_vec")
expect_s3_class(vec[[1]], "json_class")
vec[2] <- a
expect_identical(vec[[1]], vec[[2]])
vec[1:2] <- list(b, a)
expect_identical(vec[[1]], b)
expect_identical(vec[[2]], a)
expect_error(vec[[1]] <- "a")
expect_s3_class(c(json_vec(a, b), json_vec(b, a)), "json_vec")
expect_error(as_json_vec(as.list(letters[1:3])))
expect_identical(as_json_vec(as.list(letters[1:3]), force = TRUE),
as.list(letters[1:3]))
vec_cls <- as_json_vec(list(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo"),
json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo")))
expect_s3_class(vec_cls, "json_vec")
expect_s3_class(vec_cls, "foo")
expect_length(vec_cls, 4)
vec_vec <- as_json_vec(json_vec(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo"),
json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo")))
expect_identical(vec_cls, vec_vec)
vec_lec <- as_json_vec(list(json_vec(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo"),
json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo"))))
expect_identical(vec_cls, vec_lec)
vec_vcc <- as_json_vec(list(json_vec(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo")),
json_vec(json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo"))))
expect_identical(vec_cls, vec_vcc)
vec_vls <- as_json_vec(list(json_class(a = "b", class = "foo"),
json_vec(json_class(a = "c", class = "foo"),
json_class(a = "d", class = "foo")),
json_class(a = "e", class = "foo")))
expect_identical(vec_cls, vec_vls)
vec_nul <- as_json_vec(list(list(),
json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo"),
json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo")))
expect_identical(vec_cls, vec_nul)
vec_nul <- as_json_vec(list(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo"),
list(),
json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo")))
expect_identical(vec_cls, vec_nul)
vec_lnu <- as_json_vec(list(list(),
json_vec(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo"),
json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo"))))
expect_identical(vec_cls, vec_lnu)
vec_lnu <- as_json_vec(list(json_vec(json_class(a = "b", class = "foo"),
json_class(a = "c", class = "foo")),
list(),
json_vec(json_class(a = "d", class = "foo"),
json_class(a = "e", class = "foo"))))
expect_identical(vec_cls, vec_lnu)
})
test_that("list roundtrip for json_vec", {
cls1 <- json_class("a", "b", class = "foo")
cls2 <- json_class("c", "d", class = "foo")
vec <- json_vec(cls1, cls2)
expect_identical(as.list(vec), list(cls1, cls2))
expect_identical(
as_json_class(as.list(vec, recursive = TRUE)),
list(cls1, cls2)
)
expect_identical(
as_json_vec(as_json_class(as.list(vec, recursive = TRUE))),
vec
)
})
test_that("json_vec helpers work", {
expect_true(has_common_subclass(
structure(list("a"), class = c("foo", "json_class"))))
expect_true(has_common_subclass(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class")))))
expect_false(has_common_subclass(list(
structure(list("a"), class = c("foo")),
structure(list("b"), class = c("foo")))))
expect_false(has_common_subclass(
structure(list("a"), class = c("foo"))))
expect_false(has_common_subclass(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class")))))
expect_false(has_common_subclass(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class")))))
expect_equal(get_subclass(
structure(list("a"), class = c("foo", "json_class"))), "foo")
expect_equal(get_subclass(
structure(list("a"), class = c("foo", "bar", "json_class"))),
c("foo", "bar"))
expect_error(get_subclass("a"))
expect_error(get_subclass(structure(list("a"), class = c("foo"))))
expect_error(get_subclass(structure(list("a"),
class = c("foo", "bar"))))
expect_equal(get_subclass(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class")))), "foo")
expect_equal(get_subclass(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class")))),
c("foo", "bar"))
expect_error(get_subclass(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("bar", "foo", "json_class")))))
expect_error(get_subclass(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class")))))
expect_error(get_subclass(list(
structure(list("a"), class = c("json_class")),
structure(list("b"), class = c("json_class")))))
expect_error(get_subclass(list(
structure(list("a"), class = c("foo")),
structure(list("b"), class = c("foo")))))
expect_equal(get_subclass(json_vec(
structure(list("a"), class = c("foo", "json_class")))), c("foo"))
expect_equal(get_subclass(json_vec(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class")))), c("foo"))
expect_equal(get_subclass(json_vec(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class")))),
c("foo", "bar"))
expect_error(get_subclass(json_vec(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "json_class")))))
expect_error(get_subclass(json_vec(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("bar", "foo", "json_class")))))
expect_error(get_subclass(json_vec(
structure(list("a"), class = c("foo", "bar")),
structure(list("b"), class = c("foo", "bar", "json_class")))))
expect_error(get_subclass(json_vec(
structure(list("a"), class = c("foo")),
structure(list("b"), class = c("foo")))))
expect_error(get_subclass(json_vec(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class")))))
expect_error(get_subclass(c("a", "b")))
expect_true(is.json_vec(json_vec(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class")))))
expect_true(is.json_vec(json_vec(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class")))))
expect_true(is.json_vec(structure(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class"))),
class = c("foo", "bar", "json_vec"))))
expect_false(is.json_vec(structure(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class"))),
class = c("foo", "bar"))))
expect_false(is.json_vec(structure(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class"))),
class = c("bar", "foo", "json_vec"))))
expect_false(is.json_vec(structure(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class"))),
class = c("foo", "json_vec", "bar"))))
expect_false(is_json_vec(structure(list(
structure(list("a"), class = c("foo", "bar")),
structure(list("b"), class = c("foo", "bar", "json_class"))),
class = c("foo", "bar", "json_vec"))))
expect_false(is_json_vec(structure(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("foo", "bar", "json_class"))),
class = c("json_vec"))))
expect_false(is_json_vec(structure(list(
structure(list("a"), class = c("foo", "bar", "json_class")),
structure(list("b"), class = c("bar", "foo", "json_class"))),
class = c("foo", "bar", "json_vec"))))
expect_false(is_json_vec(structure(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("bar", "json_class"))),
class = c("foo", "json_vec"))))
expect_false(is_json_vec(structure(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class"))),
class = c("bar", "json_vec"))))
expect_false(is_json_vec(structure(list(
structure(list("a"), class = c("foo", "json_class")),
structure(list("b"), class = c("foo", "json_class"))),
class = c("json_vec"))))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.