@@ -166,6 +166,132 @@ describe('ssr: v-model', () => {
166
166
_push(\`</optgroup></select></div>\`)
167
167
}"
168
168
` )
169
+
170
+ expect (
171
+ compileWithWrapper ( `
172
+ <select multiple v-model="model">
173
+ <optgroup>
174
+ <option v-for="item in items" :value="item">{{item}}</option>
175
+ </optgroup>
176
+ </select>` ) . code ,
177
+ ) . toMatchInlineSnapshot ( `
178
+ "const { ssrRenderAttr: _ssrRenderAttr, ssrIncludeBooleanAttr: _ssrIncludeBooleanAttr, ssrLooseContain: _ssrLooseContain, ssrLooseEqual: _ssrLooseEqual, ssrRenderAttrs: _ssrRenderAttrs, ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
179
+
180
+ return function ssrRender(_ctx, _push, _parent, _attrs) {
181
+ _push(\`<div\${_ssrRenderAttrs(_attrs)}><select multiple><optgroup><!--[-->\`)
182
+ _ssrRenderList(_ctx.items, (item) => {
183
+ _push(\`<option\${
184
+ _ssrRenderAttr("value", item)
185
+ }\${
186
+ (_ssrIncludeBooleanAttr((Array.isArray(_ctx.model))
187
+ ? _ssrLooseContain(_ctx.model, item)
188
+ : _ssrLooseEqual(_ctx.model, item))) ? " selected" : ""
189
+ }>\${
190
+ _ssrInterpolate(item)
191
+ }</option>\`)
192
+ })
193
+ _push(\`<!--]--></optgroup></select></div>\`)
194
+ }"
195
+ ` )
196
+
197
+ expect (
198
+ compileWithWrapper ( `
199
+ <select multiple v-model="model">
200
+ <optgroup>
201
+ <option v-if="true" :value="item">{{item}}</option>
202
+ </optgroup>
203
+ </select>` ) . code ,
204
+ ) . toMatchInlineSnapshot ( `
205
+ "const { ssrRenderAttr: _ssrRenderAttr, ssrIncludeBooleanAttr: _ssrIncludeBooleanAttr, ssrLooseContain: _ssrLooseContain, ssrLooseEqual: _ssrLooseEqual, ssrRenderAttrs: _ssrRenderAttrs, ssrInterpolate: _ssrInterpolate } = require("vue/server-renderer")
206
+
207
+ return function ssrRender(_ctx, _push, _parent, _attrs) {
208
+ _push(\`<div\${_ssrRenderAttrs(_attrs)}><select multiple><optgroup>\`)
209
+ if (true) {
210
+ _push(\`<option\${
211
+ _ssrRenderAttr("value", _ctx.item)
212
+ }\${
213
+ (_ssrIncludeBooleanAttr((Array.isArray(_ctx.model))
214
+ ? _ssrLooseContain(_ctx.model, _ctx.item)
215
+ : _ssrLooseEqual(_ctx.model, _ctx.item))) ? " selected" : ""
216
+ }>\${
217
+ _ssrInterpolate(_ctx.item)
218
+ }</option>\`)
219
+ } else {
220
+ _push(\`<!---->\`)
221
+ }
222
+ _push(\`</optgroup></select></div>\`)
223
+ }"
224
+ ` )
225
+
226
+ expect (
227
+ compileWithWrapper ( `
228
+ <select multiple v-model="model">
229
+ <optgroup>
230
+ <template v-if="ok">
231
+ <option v-for="item in items" :value="item">{{item}}</option>
232
+ </template>
233
+ </optgroup>
234
+ </select>` ) . code ,
235
+ ) . toMatchInlineSnapshot ( `
236
+ "const { ssrRenderAttr: _ssrRenderAttr, ssrIncludeBooleanAttr: _ssrIncludeBooleanAttr, ssrLooseContain: _ssrLooseContain, ssrLooseEqual: _ssrLooseEqual, ssrRenderAttrs: _ssrRenderAttrs, ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
237
+
238
+ return function ssrRender(_ctx, _push, _parent, _attrs) {
239
+ _push(\`<div\${_ssrRenderAttrs(_attrs)}><select multiple><optgroup>\`)
240
+ if (_ctx.ok) {
241
+ _push(\`<!--[-->\`)
242
+ _ssrRenderList(_ctx.items, (item) => {
243
+ _push(\`<option\${
244
+ _ssrRenderAttr("value", item)
245
+ }\${
246
+ (_ssrIncludeBooleanAttr((Array.isArray(_ctx.model))
247
+ ? _ssrLooseContain(_ctx.model, item)
248
+ : _ssrLooseEqual(_ctx.model, item))) ? " selected" : ""
249
+ }>\${
250
+ _ssrInterpolate(item)
251
+ }</option>\`)
252
+ })
253
+ _push(\`<!--]-->\`)
254
+ } else {
255
+ _push(\`<!---->\`)
256
+ }
257
+ _push(\`</optgroup></select></div>\`)
258
+ }"
259
+ ` )
260
+
261
+ expect (
262
+ compileWithWrapper ( `
263
+ <select multiple v-model="model">
264
+ <optgroup>
265
+ <template v-for="item in items" :value="item">
266
+ <option v-if="item===1" :value="item">{{item}}</option>
267
+ </template>
268
+ </optgroup>
269
+ </select>` ) . code ,
270
+ ) . toMatchInlineSnapshot ( `
271
+ "const { ssrRenderAttr: _ssrRenderAttr, ssrIncludeBooleanAttr: _ssrIncludeBooleanAttr, ssrLooseContain: _ssrLooseContain, ssrLooseEqual: _ssrLooseEqual, ssrRenderAttrs: _ssrRenderAttrs, ssrInterpolate: _ssrInterpolate, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
272
+
273
+ return function ssrRender(_ctx, _push, _parent, _attrs) {
274
+ _push(\`<div\${_ssrRenderAttrs(_attrs)}><select multiple><optgroup><!--[-->\`)
275
+ _ssrRenderList(_ctx.items, (item) => {
276
+ _push(\`<!--[-->\`)
277
+ if (item===1) {
278
+ _push(\`<option\${
279
+ _ssrRenderAttr("value", item)
280
+ }\${
281
+ (_ssrIncludeBooleanAttr((Array.isArray(_ctx.model))
282
+ ? _ssrLooseContain(_ctx.model, item)
283
+ : _ssrLooseEqual(_ctx.model, item))) ? " selected" : ""
284
+ }>\${
285
+ _ssrInterpolate(item)
286
+ }</option>\`)
287
+ } else {
288
+ _push(\`<!---->\`)
289
+ }
290
+ _push(\`<!--]-->\`)
291
+ })
292
+ _push(\`<!--]--></optgroup></select></div>\`)
293
+ }"
294
+ ` )
169
295
} )
170
296
171
297
test ( '<input type="radio">' , ( ) => {
0 commit comments