@@ -29,6 +29,9 @@ const sel = {
2929 selectionStart : '[data-testid="test-links-selection-start"]' ,
3030 selectionEnd : '[data-testid="test-links-selection-end"]' ,
3131 applySelection : '[data-testid="test-links-apply-selection-button"]' ,
32+ applySetLinkFromSelection :
33+ '[data-testid="test-links-apply-setlink-from-selection-button"]' ,
34+ selectionPayload : '[data-testid="test-links-selection-payload"]' ,
3235 onLinkDetectedPayload : '[data-testid="on-link-detected-payload"]' ,
3336 editorInner : '[data-testid="test-links-editor"] .eti-editor' ,
3437 editorScreenshot : '[data-testid="test-links-editor"]' ,
@@ -251,6 +254,61 @@ test.describe('test-links setLink table', () => {
251254 }
252255} ) ;
253256
257+ test . describe ( 'test-links setLink round-trips onChangeSelection text' , ( ) => {
258+ test ( 'linking a selection across a block boundary keeps both paragraphs' , async ( {
259+ page,
260+ } ) => {
261+ await gotoTestLinks ( page ) ;
262+ await setTestLinksEditorHtml ( page , '<html><p>hello</p><p>world</p></html>' ) ;
263+
264+ await page . fill ( sel . selectionStart , '3' ) ;
265+ await page . fill ( sel . selectionEnd , '8' ) ;
266+ await page . fill ( sel . setLinkUrl , 'https://swmansion.com' ) ;
267+ await page . click ( sel . applySelection ) ;
268+
269+ await expect
270+ . poll ( async ( ) => page . locator ( sel . selectionPayload ) . textContent ( ) )
271+ . toBe ( JSON . stringify ( { start : 3 , end : 8 , text : 'lo\nwo' } ) ) ;
272+
273+ await page . click ( sel . applySetLinkFromSelection ) ;
274+
275+ await expect
276+ . poll ( async ( ) => getTestLinksSerializedHtml ( page ) )
277+ . toContain (
278+ '<p>hel<a href="https://swmansion.com">lo</a></p>' +
279+ '<p><a href="https://swmansion.com">wo</a>rld</p>'
280+ ) ;
281+ } ) ;
282+
283+ test ( 'linking a selection across a block boundary preserves inline marks' , async ( {
284+ page,
285+ } ) => {
286+ await gotoTestLinks ( page ) ;
287+ await setTestLinksEditorHtml (
288+ page ,
289+ '<html><p>hel<b>lo</b></p><p>world</p></html>'
290+ ) ;
291+
292+ await page . fill ( sel . selectionStart , '3' ) ;
293+ await page . fill ( sel . selectionEnd , '8' ) ;
294+ await page . fill ( sel . setLinkUrl , 'https://swmansion.com' ) ;
295+ await page . click ( sel . applySelection ) ;
296+
297+ await expect
298+ . poll ( async ( ) => page . locator ( sel . selectionPayload ) . textContent ( ) )
299+ . toBe ( JSON . stringify ( { start : 3 , end : 8 , text : 'lo\nwo' } ) ) ;
300+
301+ await page . click ( sel . applySetLinkFromSelection ) ;
302+
303+ await expect
304+ . poll ( async ( ) => getTestLinksSerializedHtml ( page ) )
305+ . toContain (
306+ '<p>hel<a href="https://swmansion.com"><b>lo</b></a></p>' +
307+ '<p><a href="https://swmansion.com">wo</a>rld</p>'
308+ ) ;
309+ } ) ;
310+ } ) ;
311+
254312test . describe ( 'test-links removeLink table' , ( ) => {
255313 const cases : {
256314 name : string ;
0 commit comments