check:poster-section covers card-action, with poisons for an ignored attribute and an event that cannot leave the shadow root
This commit is contained in:
parent
18d1d389be
commit
ea8a74b350
1 changed files with 11 additions and 0 deletions
|
|
@ -76,11 +76,20 @@ async function arms({ types, country, element, sectionSrc, viewSrc, cs }) {
|
|||
if ('showHeader' in d0) fails.push('D: no show-header still sets showHeader')
|
||||
if (element.posterSectionConfig(fake({ 'show-header': 'false' })).showHeader !== false) fails.push('D: show-header="false" does not hide the head')
|
||||
if ('showHeader' in element.posterSectionConfig(fake({ 'show-header': '' }))) fails.push('D: show-header="" hides the head')
|
||||
// card-action: absent or an unknown value = no key ("Show on map"); "dashboard" = cardAction 'dashboard'.
|
||||
if ('cardAction' in d0) fails.push('D: no card-action still sets cardAction')
|
||||
if (element.posterSectionConfig(fake({ 'card-action': 'dashboard' })).cardAction !== 'dashboard') fails.push('D: card-action="dashboard" is not kept')
|
||||
if ('cardAction' in element.posterSectionConfig(fake({ 'card-action': 'map' }))) fails.push('D: an unknown card-action is kept')
|
||||
// F: the view passes show-header to the wall, and a headless section can neither collapse nor start shut.
|
||||
const view = String(viewSrc || '').replace(/<!--[\s\S]*?-->/g, '').replace(/\/\/[^\n]*/g, '')
|
||||
if (!/:section-heads="showHeader"/.test(view)) fails.push('F: PosterSectionView does not pass showHeader to the wall (section-heads)')
|
||||
if (!/const collapsible\s*=\s*computed\([^\n]*showHeader/.test(view)) fails.push('F: a headless section can still collapse')
|
||||
if (!/const startCollapsed\s*=\s*computed\([^\n]*showHeader/.test(view)) fails.push('F: a headless section can still start shut')
|
||||
// F: card-action reaches the wall's headerAction seam, and the click leaves the element as a bubbling, composed,
|
||||
// cancelable dxm-poster-dashboard (the host's PosterSlot listens on an ancestor, outside the shadow root).
|
||||
if (!/:header-action="headerAction"/.test(view) || !/@header-action="onHeaderAction"/.test(view)) fails.push('F: card-action does not reach the wall (header-action)')
|
||||
if (!/DASHBOARD_EVENT\s*=\s*'dxm-poster-dashboard'/.test(view)) fails.push('F: the dashboard event is not named dxm-poster-dashboard')
|
||||
if (!/new CustomEvent\(DASHBOARD_EVENT,\s*\{\s*bubbles:\s*true,\s*composed:\s*true,\s*cancelable:\s*true/.test(view)) fails.push('F: dxm-poster-dashboard is not bubbling + composed + cancelable')
|
||||
// E
|
||||
const tpl = (sectionSrc.match(/<template>([\s\S]*)<\/template>\s*$/) || ['', ''])[1].replace(/<!--[\s\S]*?-->/g, '')
|
||||
const injected = new Set(((sectionSrc.match(/const \{([\s\S]*?)\} = inject\(POSTER_WALL_CTX\)/) || ['', ''])[1]).split(/[\s,]+/).filter(Boolean))
|
||||
|
|
@ -115,6 +124,8 @@ try {
|
|||
['a section that uses a name it does not inject', { ...real, sectionSrc: sectionSrc.replace('</template>', '{{ notProvided }}</template>') }, /^E:/],
|
||||
['an element config that drops show-header', { ...real, element: { posterSectionConfig: (el) => { const c = element.posterSectionConfig(el); delete c.showHeader; return c } } }, /^D: show-header="false"/],
|
||||
['a view that does not pass show-header to the wall', { ...real, viewSrc: viewSrc.replace(':section-heads="showHeader"', '') }, /^F:/],
|
||||
['an element config that ignores card-action', { ...real, element: { posterSectionConfig: (el) => { const c = element.posterSectionConfig(el); delete c.cardAction; return c } } }, /^D: card-action="dashboard"/],
|
||||
['a dashboard event that cannot leave the shadow root', { ...real, viewSrc: viewSrc.replace('composed: true, cancelable', 'composed: false, cancelable') }, /^F: dxm-poster-dashboard is not/],
|
||||
['a headless section that can still start shut', { ...real, viewSrc: viewSrc.replace(/(const startCollapsed = computed\(\(\) => cfg\.value\.collapsed === true)[^\n]*/, '$1)') }, /^F: a headless section can still start shut/],
|
||||
]
|
||||
for (const [name, inp, rx] of poisons) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue