test_that("Query string parsing", { expect_identical( parseQueryString("?foo=1&bar=b+a%20r&b+a%20z=baz&=nokey&novalue=&=&noequal&end=end"), list( foo = '1', bar = 'b a r', `b a z` = 'baz', 'nokey', novalue = '', '', noequal = '', end = 'end' ) ) # Should be the same with or without leading question mark expect_identical(parseQueryString("?foo=1&bar=b"), parseQueryString("foo=1&bar=b")) # Leading/trailing/consecutive ampersands are ignored expect_identical(parseQueryString("?&a=1&&b=2&"), parseQueryString("?a=1&b=2")) # Nested and non-nested query strings expect_identical( parseQueryString("a[i1][j1]=x&b[i1][j1]=y&b[i2][j1]=z"), list( "a[i1][j1]" = "x", "b[i1][j1]" = "y", "b[i2][j1]" = "z" ) ) expect_identical( parseQueryString("a[i1][j1]=x&b[i1][j1]=y&b[i2][j1]=z", nested = TRUE), list( a = list(i1 = list(j1 = "x")), b = list( i1 = list(j1 = "y"), i2 = list(j1 = "z") ) ) ) })