import { beforeEach, expect, test } from 'vitest' import '../../demo/examples/attribute-lifecycle/index.js' beforeEach(() => { document.body.innerHTML = '' }) test('the declared default is used when no attribute is authored', () => { document.body.innerHTML = '' const el = document.querySelector('attr-demo') expect(el.querySelector('.value').textContent).toBe('"default-label"') expect(el.querySelector('.type').textContent).toBe('string') }) test('empty string stays an empty string (not coerced to boolean)', () => { document.body.innerHTML = '' const el = document.querySelector('attr-demo') el.querySelector('.set-empty').click() expect(el.getAttribute('label')).toBe('') expect(el.querySelector('.value').textContent).toBe('""') expect(el.querySelector('.type').textContent).toBe('string') }) test('removeAttribute resets the prop to the declared default', () => { document.body.innerHTML = '' const el = document.querySelector('attr-demo') el.querySelector('.set-value').click() expect(el.querySelector('.value').textContent).toBe('"hello"') el.querySelector('.remove').click() expect(el.querySelector('.value').textContent).toBe('"default-label"') }) test('an attribute authored in markup wins over the default', () => { document.body.innerHTML = '' const el = document.querySelector('attr-demo') expect(el.querySelector('.value').textContent).toBe('"from markup"') })