@@ -63,6 +63,87 @@ suite('Rmd Params Test Suite', () => {
6363 assert . strictEqual ( cmd , 'params <- list(a = 1+1)' ) ;
6464 } ) ;
6565
66+ test ( 'getRmdParamsCommand preserves merged parameter defaults and nested !r values' , ( ) => {
67+ const mockDoc = {
68+ languageId : 'rmd' ,
69+ getText : ( ) => `---
70+ defaults: &defaults
71+ count: 2
72+ label: default
73+ params:
74+ <<: *defaults
75+ label: overridden
76+ expression:
77+ value: !r |
78+ sum(c(1, 2))
79+ values: [true, null, !r 1+1]
80+ ---` ,
81+ uri : vscode . Uri . file ( '/test_merged_params.Rmd' ) ,
82+ version : 1 ,
83+ } as vscode . TextDocument ;
84+
85+ assert . strictEqual (
86+ rTerminal . getRmdParamsCommand ( mockDoc ) ,
87+ 'params <- list(count = 2, label = "overridden", expression = sum(c(1, 2))\n, values = c(TRUE, NULL, 1+1))' ,
88+ ) ;
89+ } ) ;
90+
91+ test ( 'getRmdParamsCommand keeps YAML 1.2 scalars with legacy metadata tags' , ( ) => {
92+ const mockDoc = {
93+ languageId : 'rmd' ,
94+ getText : ( ) => `---
95+ date: !!timestamp 2026-11-07
96+ params:
97+ enabled: true
98+ label: yes
99+ mode: on
100+ count: 012
101+ binary: 0b101
102+ hex: -0xF
103+ nothing: null
104+ ---` ,
105+ uri : vscode . Uri . file ( '/test_scalar_params.Rmd' ) ,
106+ version : 1 ,
107+ } as vscode . TextDocument ;
108+
109+ assert . strictEqual (
110+ rTerminal . getRmdParamsCommand ( mockDoc ) ,
111+ 'params <- list(enabled = TRUE, label = "yes", mode = "on", count = 12, binary = 5, hex = -15, nothing = NULL)' ,
112+ ) ;
113+ } ) ;
114+
115+ test ( 'getRmdParamsCommand preserves set parameters as named null values' , ( ) => {
116+ const mockDoc = {
117+ languageId : 'rmd' ,
118+ getText : ( ) => '---\nparams:\n choices: !!set {one: null, two: null}\n---' ,
119+ uri : vscode . Uri . file ( '/test_set_params.Rmd' ) ,
120+ version : 1 ,
121+ } as vscode . TextDocument ;
122+
123+ assert . strictEqual (
124+ rTerminal . getRmdParamsCommand ( mockDoc ) ,
125+ 'params <- list(choices = list(one = NULL, two = NULL))' ,
126+ ) ;
127+ } ) ;
128+
129+ test ( 'getRmdParamsCommand rejects malformed YAML and non-scalar !r tags' , ( ) => {
130+ for ( const [ index , value ] of [
131+ '[1,' ,
132+ '!unknown value' ,
133+ '!r [1, 2]' ,
134+ '!r {a: 1}' ,
135+ ] . entries ( ) ) {
136+ const mockDoc = {
137+ languageId : 'rmd' ,
138+ getText : ( ) => `---\nparams:\n a: ${ value } \n---` ,
139+ uri : vscode . Uri . file ( `/test_invalid_params_${ index } .Rmd` ) ,
140+ version : 1 ,
141+ } as vscode . TextDocument ;
142+
143+ assert . strictEqual ( rTerminal . getRmdParamsCommand ( mockDoc ) , undefined ) ;
144+ }
145+ } ) ;
146+
66147 test ( 'getRmdParamsCommand respects cache invalidation by version' , ( ) => {
67148 const mockDoc = {
68149 languageId : 'rmd' ,
0 commit comments