Nothing
## This is the test suite from Ruby, ported over.
context("Ruby test suite")
## NOTE: No conversion in/out of a JSON string here, in contrast with
## the Ruby version. We'll do that explicitly somewhere else - for
## now the jqr function does the string -> string conversions only.
##
## Doing the conversions for things that return lists requires more
## care; we'll need to loop over the returned list.
jqr_conv <- function(json, program, ...) {
jsonlite::fromJSON(jqr(json, program, 0), ...)
}
test_that("int", {
expect_that(jqr('1', '.', 0), equals("1"))
expect_that(jqr_conv('1', '.'), equals(1L))
})
test_that("float", {
expect_that(jqr('1.2', '.', 0), equals("1.2"))
expect_that(jqr_conv('1.2', '.'), equals(1.2))
})
test_that("string", {
expect_that(jqr('"Zzz"', '.', 0), equals('"Zzz"'))
expect_that(jqr_conv('"Zzz"', '.'), equals("Zzz"))
})
test_that("array", {
expect_that(jqr('[1, "2", 3]', '.', 0), equals('[1,"2",3]'))
expect_that(jqr_conv('[1, "2", 3]', '.'), equals(c("1", "2", "3")))
## To get the same behaviour as Ruby:
expect_that(jqr_conv('[1, "2", 3]', '.', simplifyVector=FALSE),
equals(list(1L, "2", 3L)))
})
test_that("hash", {
str <- '{"foo":100, "bar":"zoo"}'
expect_that(jqr(str, '.', 0), equals('{"foo":100,"bar":"zoo"}'))
expect_that(jqr_conv(str, '.'), equals(list(foo=100L, bar="zoo")))
})
test_that("composition", {
src <- '{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
expect_that(jqr(src, ".", 0), equals(unclass(jsonlite::minify(src))))
expect_that(jqr_conv(src, "."),
equals(jsonlite::fromJSON(src)))
})
test_that("each value", {
src <- '{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
'
expect_that(jqr(src, '.menu.popup.menuitem[].value', 0),
equals(c('"New"', '"Open"', '"Close"')))
})
test_that("compile error", {
skip_on_os("solaris")
expect_error(jqr("{}", "...", 0))
})
test_that("runtime error", {
## Hmm - this is meant to crash on Ruby but does not here (and does
## not on the command line either).
skip_on_os("solaris")
expect_that(jqr('{}', '.', 0), equals("{}"))
## expect {
## jqr('{}', '.') do |value|
## raise 'runtime error'
## end
## }.to raise_error(RuntimeError)
})
test_that("query for hash", {
src <- list(FOO=100L, BAR=c(200L, 200L))
expect_that(jqr(jsonlite::toJSON(src), ".BAR[]", 0),
equals(c("200", "200")))
})
test_that("query for array", {
src <- list('FOO', 100L, 'BAR', c(200L, 200L))
expect_that(jqr(jsonlite::toJSON(src), ".[3][]", 0),
equals(c("200", "200")))
})
test_that("NA handling", {
expect_error(jq(NA), "jq method not implemented for logical")
expect_error(jq(NA_integer_), "jq method not implemented for integer")
expect_error(jq(NA_real_), "jq method not implemented for numeric")
expect_error(jq(NA_complex_), "jq method not implemented for complex")
#expect_error(jq(NA_character_), "!is.na\\(json\\) is not TRUE")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.