import { nodeOps, svgNS } from '../src/nodeOps'
describe('runtime-dom: node-ops', () => {
- test('the _value property should be cloned', () => {
- const el = nodeOps.createElement('input') as HTMLDivElement & {
- _value: any
- }
- el._value = 1
- const cloned = nodeOps.cloneNode!(el) as HTMLDivElement & { _value: any }
- expect(cloned._value).toBe(1)
- })
-
test("the <select>'s multiple attr should be set in createElement", () => {
const el = nodeOps.createElement('select', false, undefined, {
multiple: ''
el.setAttribute(id, '')
},
- cloneNode(el) {
- const cloned = el.cloneNode(true)
- // #3072
- // - in `patchDOMProp`, we store the actual value in the `el._value` property.
- // - normally, elements using `:value` bindings will not be hoisted, but if
- // the bound value is a constant, e.g. `:value="true"` - they do get
- // hoisted.
- // - in production, hoisted nodes are cloned when subsequent inserts, but
- // cloneNode() does not copy the custom property we attached.
- // - This may need to account for other custom DOM properties we attach to
- // elements in addition to `_value` in the future.
- if (`_value` in el) {
- ;(cloned as any)._value = (el as any)._value
- }
- return cloned
- },
-
// __UNSAFE__
// Reason: innerHTML.
// Static content here can only come from compiled templates.