expect(e.shadowRoot!.innerHTML).toBe(`false,boolean`)
})
+ test('support attachInternals method', () => {
+ const E = defineCustomElement({
+ formAssociated: true,
+ render() {
+ return h('div', 'hello')
+ },
+ })
+ customElements.define('my-el-attach-internals', E)
+ container.innerHTML = `<my-el-attach-internals></my-el-attach-internals>`
+ const e = container.childNodes[0] as VueElement
+ expect(e.shadowRoot!.innerHTML).toBe(`<div>hello</div>`)
+ expect(e._internals).toBeTruthy()
+ })
++
+ test('hyphenated attr removal', async () => {
+ const E = defineCustomElement({
+ props: {
+ fooBar: {
+ type: Boolean,
+ },
+ },
+ render() {
+ return this.fooBar
+ },
+ })
+ customElements.define('el-hyphenated-attr-removal', E)
+ const toggle = ref(true)
+ const Comp = {
+ render() {
+ return h('el-hyphenated-attr-removal', {
+ 'foo-bar': toggle.value ? '' : null,
+ })
+ },
+ }
+ render(h(Comp), container)
+ const el = container.children[0]
+ expect(el.hasAttribute('foo-bar')).toBe(true)
+ expect((el as any).outerHTML).toBe(
+ `<el-hyphenated-attr-removal foo-bar=""></el-hyphenated-attr-removal>`,
+ )
+
+ toggle.value = false
+ await nextTick()
+ expect(el.hasAttribute('foo-bar')).toBe(false)
+ expect((el as any).outerHTML).toBe(
+ `<el-hyphenated-attr-removal></el-hyphenated-attr-removal>`,
+ )
+ })
})