test_that("JSON is standalone", { ## baseenv() makes sure that the remotes package env is not used env <- new.env(parent = baseenv()) env$json <- json stenv <- env$json$.internal objs <- ls(stenv, all.names = TRUE) funs <- Filter(function(x) is.function(stenv[[x]]), objs) funobjs <- mget(funs, stenv) expect_message( mapply(codetools::checkUsage, funobjs, funs, MoreArgs = list(report = message)), NA) }) test_that("JSON parser scalars", { expect_equal(json$parse('"foobar"'), "foobar" ) expect_equal(json$parse('""'), "") expect_equal(json$parse("42"), 42) expect_equal(json$parse("-42"), -42) expect_equal(json$parse("42.42"), 42.42) expect_equal(json$parse("1e2"), 1e2) expect_equal(json$parse("-0.1e-2"), -0.1e-2) expect_equal(json$parse('null'), NULL) expect_equal(json$parse('true'), TRUE) expect_equal(json$parse('false'), FALSE) }) test_that("JSON parser arrays", { cases <- list( list("[1,2,3]", list(1,2,3)), list("[1]", list(1)), list("[]", list()), list('["foo"]', list("foo")), list('["foo", 1, "bar", true]', list("foo", 1, "bar", TRUE)) ) for (c in cases) { r <- json$parse(c[[1]]) expect_equal(r, c[[2]], info = c[[1]]) } }) test_that("JSON parser nested arrays", { cases <- list( list('[1,2, ["foo", "bar"], 3]', list(1,2, list("foo","bar"), 3)), list('[ [ [ 1 ] ] ]', list(list(list(1)))), list('[ [ [ ] ] ]', list(list(list()))) ) for (c in cases) { r <- json$parse(c[[1]]) expect_equal(r, c[[2]], info = c[[1]]) } }) test_that("JSON parser, real examples", { inp <- ' { "sha": "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", "commit": { "author": { "name": "Hadley Wickham", "email": "h.wickham@gmail.com", "date": "2015-03-30T13:55:18Z" }, "committer": { "name": "Hadley Wickham", "email": "h.wickham@gmail.com", "date": "2015-03-30T13:55:18Z" }, "message": "Merge pull request #22 from paulstaab/HEAD\\n\\nImprove error message for assertions of length 0", "tree": { "sha": "f2e840b7a134fbc118597842992aa50048e0fa04", "url": "https://api.github.com/repos/hadley/assertthat/git/trees/f2e840b7a134fbc118597842992aa50048e0fa04" }, "url": "https://api.github.com/repos/hadley/assertthat/git/commits/e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", "comment_count": 0 } }' exp <- list( sha = "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", commit = list( author = list( name = "Hadley Wickham", email = "h.wickham@gmail.com", date = "2015-03-30T13:55:18Z"), committer = list( name = "Hadley Wickham", email = "h.wickham@gmail.com", date = "2015-03-30T13:55:18Z"), message = "Merge pull request #22 from paulstaab/HEAD\\n\\nImprove error message for assertions of length 0", tree = list( sha = "f2e840b7a134fbc118597842992aa50048e0fa04", url = "https://api.github.com/repos/hadley/assertthat/git/trees/f2e840b7a134fbc118597842992aa50048e0fa04" ), url = "https://api.github.com/repos/hadley/assertthat/git/commits/e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", comment_count = 0 ) ) expect_equal(json$parse(inp), exp) }) test_that("JSON parser, errors", { expect_error( json$parse("[1,2,3,"), "EXPECTED value GOT EOF" ) expect_error( json$parse('{ 123: "foo" }'), "EXPECTED string GOT 123" ) expect_error( json$parse('{ "foo" "foobar" }'), 'EXPECTED : GOT "foobar"' ) expect_error( json$parse('{ "foo": "foobar" "foo2": "foobar2" }'), 'EXPECTED , or } GOT "foo2"' ) expect_error( json$parse('[1,2,3 4]'), 'EXPECTED , GOT 4' ) }) test_that("get_json_sha", { inp <- ' { "sha": "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", "author": { "name": "Hadley Wickham", "email": "h.wickham@gmail.com", "date": "2015-03-30T13:55:18Z" }, }' expect_identical( get_json_sha(inp), "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b") inp2 <- ' { "sha": "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", "author": { "name": "Hadley Wickham", "email": "h.wickham@gmail.com", "date": "2015-03-30T13:55:18Z" }, }' expect_identical( get_json_sha(inp2), "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b") inp3 <- ' { "nosha": "e183ccdc515bbb8e7f32d8d16586aed9eea6de0b", "author": { "name": "Hadley Wickham", "email": "h.wickham@gmail.com", "date": "2015-03-30T13:55:18Z" }, }' expect_identical( get_json_sha(inp3), NA_character_) })