library(testit) opts_knit$set(out.format = 'markdown') assert('parse_block() parses the language engine from ```{lang}', { (parse_block(NULL, '', 'r, foo, a=1,')$params %==% alist(label = 'foo', a = 1)) (parse_block(NULL, '', 'Rcpp, foo, a=1,')$params %==% alist(label = 'foo', a = 1, engine = 'Rcpp')) }) res = split_file( c('abc', '```{r foo}', '1+1', '```{r bar}', '2+2', '```', 'def'), patterns = all_patterns$md ) assert('split_file() treats ``` as part of code chunk instead of beginning of text chunk', { # the foo chunk does not have a closing mark (c(knit_code$get('foo')) %==% '1+1') # use c() to drop attributes (c(knit_code$get('bar')) %==% '2+2') # before knitr v1.6, the text chunk was c('', 'def') (res[[4]][['input']] %==% 'def') }) opts_knit$restore() knit_code$restore(); knit_concord$restore() res = parse_inline(c('aaa \\Sexpr{x}', 'bbb \\Sexpr{NA} and \\Sexpr{1+2}', 'another expression \\Sexpr{rnorm(10)}'), all_patterns$rnw) assert('parse_inline() parses inline text', { (res$code %==% c('x', 'NA', '1+2', 'rnorm(10)')) (nchar(res$input) %==% 81L) # empty inline code is not recognized (parse_inline('\\Sexpr{}', all_patterns$rnw)$code %==% character(0)) # can use > in HTML inline code (parse_inline('', all_patterns$html)$code %==% ' "" ') }) res = parse_inline('inline expressions `r pi+1`, +r cos(0)+ in AsciiDoc', all_patterns$asciidoc) assert('both `r expression` and +r expression+ work for AsciiDoc', { (res$code %==% c('pi+1', 'cos(0)')) }) knit_code$restore() read_chunk(lines = c('1+1')) assert('read_chunk() does not discard code without chunk headers', { (knit_code$get() %==% list('unnamed-chunk-1' = '1+1')) }) knit_code$restore() read_chunk(lines = c('# ---- foo ----', '1+1')) assert('read_chunk() can identify chunk labels', { (knit_code$get() %==% list(foo = '1+1')) }) knit_code$restore() # chunk references with <<>> -------------------------------------------------- knit_code$restore(list( a = '1+1', b = '2-2', c = c('if (T)', ' <>'), d = c('function() {', ' <>', '}') )) pc = function(x) parse_chunk(x, all_patterns$rnw$ref.chunk) assert('parse_chunk() preserves indentation', { (pc(c('3*3', '<>', ' <>', 'if (T)', ' <>')) %==% c("3*3", "1+1", " 2-2", "if (T)", " 1+1" )) (pc('<>') %==% c('function() {', ' if (T)', ' 1+1', '}')) }) knit_code$restore() # duplication of labels knit_code$restore(list(a = '1+1')) assert('duplicated labels are not allowed by default', { (!has_error(parse_block(NULL, '', 'label = "a"'))) (has_error(parse_block('2+2', '', 'label = "a"'))) (has_error(parse_block(NULL, '','label = "a", code = "2+2"'))) (has_error(parse_block(NULL, '','label = "a", file = "dummy.R"'))) }) op = options(knitr.duplicate.label = 'allow') assert('duplicated labels are allowed after setting an option', { (!has_error(parse_block('2+2', '', 'label = "a"'))) (!has_error(parse_block(NULL, '','label = "a", code = "2+2"'))) (!has_error(parse_block(NULL, '','label = "a", file = "dummy.R"'))) }) options(op) knit_code$restore()