options(stringsAsFactors=FALSE); test_that("recover nested data frames", { x1 <- x2 <- x3 <- x4 <- x5 <- x6 <- data.frame(foo=c(1:2)); x2$bar <- c("jeroen", "eli"); x3$bar <- x4$bar <- x5$bar <- x6$bar <- data.frame(name=c("jeroen", "eli")) x4$bar$age <- x5$bar$age <- c(28, 24); x6$bar$age <- c(28, NA); x5$bar$food <- data.frame(yum=c("Rice", "Pasta")); x6$bar$food <- data.frame(yum=c(NA, "Pasta")); #add to list objects <- list(x1, x2, x3, x4, x5, x6) #test all but list lapply(objects, function(object){ expect_equal(fromJSON(toJSON(object)), object); expect_equal(fromJSON(toJSON(object, na="null")), object); expect_equal(names(fromJSON(toJSON(object), flatten = TRUE)), names(unlist(object[1,,drop=FALSE]))); }); #test all in list expect_equal(fromJSON(toJSON(objects)), objects); }); test_that("recover lists in data frames", { x <- data.frame(author = c("Homer", "Virgil", "Jeroen")); x$poems = list(c("Iliad", "Odyssey"), c("Eclogues", "Georgics", "Aeneid"), character()); y <- data.frame(author = c("Homer", "Virgil", "Jeroen")); y$poems = list( data.frame(title=c("Iliad", "Odyssey"), year=c(-1194, -800)), data.frame(title=c("Eclogues", "Georgics", "Aeneid"), year=c(-44, -29, -19)), data.frame() ); z <- list(x=x, y=y); zz <- list(x,y); expect_equal(fromJSON(toJSON(x)), x); expect_equal(fromJSON(toJSON(y)), y); expect_equal(fromJSON(toJSON(z)), z); expect_equal(fromJSON(toJSON(zz)), zz); }); #note: nested matrix does not perfectly restore test_that("nested matrix in data frame", { x <- data.frame(foo=1:2) x$bar <- matrix(c(1:5, NA), 2) expect_true(validate(toJSON(x))) y <- fromJSON(toJSON(x)) expect_s3_class(y, "data.frame"); expect_equal(names(x), names(y)); expect_equal(length(y[[1,"bar"]]), 3); });