From 21560a497470f0c769931c17fa9803c6cddf6f1c Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Sat, 20 Jan 2024 23:23:01 +0100 Subject: [PATCH] Fix "Get Text" to retrieve the correct value for ShadowRoot using slot. (#13218) Co-authored-by: Diego Molina --- javascript/atoms/dom.js | 4 ++- javascript/atoms/test/text_shadow_test.html | 31 +++++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/javascript/atoms/dom.js b/javascript/atoms/dom.js index ecc6ac4b85144..30aa362dbe813 100644 --- a/javascript/atoms/dom.js +++ b/javascript/atoms/dom.js @@ -1325,7 +1325,9 @@ bot.dom.appendVisibleTextLinesFromNodeInComposedDom_ = function( } else { shadowChildren = contentElem.assignedNodes(); } - goog.array.forEach(shadowChildren, function(node) { + const childrenToTraverse = + shadowChildren.length > 0 ? shadowChildren : contentElem.childNodes; + goog.array.forEach(childrenToTraverse, function (node) { bot.dom.appendVisibleTextLinesFromNodeInComposedDom_( node, lines, shown, whitespace, textTransform); }); diff --git a/javascript/atoms/test/text_shadow_test.html b/javascript/atoms/test/text_shadow_test.html index fbb292bc6e19a..388ba9306a037 100644 --- a/javascript/atoms/test/text_shadow_test.html +++ b/javascript/atoms/test/text_shadow_test.html @@ -71,7 +71,31 @@ let customEl = findElement({ tagName: 'open-shadow-element' }); let text = getText(customEl); - assertEquals(text, 'full link text'); + assertEquals('full link text', text); + } + + function testTextForSlotValueInShadowDOM() { + setCustomElement('full'); + + let customEl = findElement({ id: 'custom-text' }); + let text = getText(customEl); + assertEquals('custom', text); + } + + function testTextForSlotAndExtraValueInShadowDOM() { + setCustomElement('full text'); + + let customEl = findElement({ id: 'custom-text' }); + let text = getText(customEl); + assertEquals('custom text', text); + } + + function testTextForDefaultSlotValueInShadowDOM() { + setCustomElement('full text'); + + let customEl = findElement({ tagName: 'open-shadow-element' }); + let text = getText(customEl); + assertEquals('full text', text); } function testHiddenTextInShadowDOM() { @@ -81,7 +105,7 @@ let customEl = findElement({ tagName: 'open-shadow-element' }); let text = getText(customEl); - assertEquals(text, 'full text'); + assertEquals('full text', text); } function testTextForElementWithinClosedShadowDOM() { @@ -89,13 +113,14 @@ let customEl = findElement({ tagName: 'closed-shadow-element' }); let innerEl = findElement({ css: 'a' }, customEl._shadowRoot); let text = getText(innerEl); - assertEquals(text, 'full link text'); + assertEquals('full link text', text); } + custom