@@ -267,6 +267,50 @@ describe("MDX Code Placeholder Loader", () => {
267267 expect ( pushed ) . toBe ( md ) ;
268268 } ) ;
269269
270+ it ( "round-trips an image block with surrounding blank lines unchanged" , async ( ) => {
271+ const md = dedent `
272+ Text above.
273+
274+ 
275+
276+ Text below.
277+ ` ;
278+
279+ const pulled = await loader . pull ( "en" , md ) ;
280+ const pushed = await loader . push ( "es" , pulled ) ;
281+ expect ( pushed ) . toBe ( md ) ;
282+ } ) ;
283+
284+ it ( "round-trips and adds blank lines around an image block when missing" , async ( ) => {
285+ const md = dedent `
286+ Text above.
287+ 
288+ Text below.
289+ ` ;
290+
291+ const expected = dedent `
292+ Text above.
293+
294+ 
295+
296+ Text below.
297+ ` ;
298+
299+ const pulled = await loader . pull ( "en" , md ) ;
300+ const pushed = await loader . push ( "es" , pulled ) ;
301+ expect ( pushed ) . toBe ( expected ) ;
302+ } ) ;
303+
304+ it ( "keeps image inside blockquote as-is" , async ( ) => {
305+ const md = dedent `
306+ > 
307+ ` ;
308+
309+ const pulled = await loader . pull ( "en" , md ) ;
310+ const pushed = await loader . push ( "es" , pulled ) ;
311+ expect ( pushed ) . toBe ( md ) ;
312+ } ) ;
313+
270314 it ( "leaves incomplete fences untouched" , async ( ) => {
271315 const md = "```js\nno close" ;
272316 const pulled = await loader . pull ( "en" , md ) ;
@@ -275,6 +319,87 @@ describe("MDX Code Placeholder Loader", () => {
275319 const pushed = await loader . push ( "es" , pulled ) ;
276320 expect ( pushed ) . toBe ( md ) ;
277321 } ) ;
322+
323+ // Edge cases for image spacing
324+
325+ it ( "adds blank line after image when only before exists" , async ( ) => {
326+ const md = dedent `
327+ Before.
328+
329+ 
330+ After.
331+ ` ;
332+
333+ const expected = dedent `
334+ Before.
335+
336+ 
337+
338+ After.
339+ ` ;
340+
341+ const pulled = await loader . pull ( "en" , md ) ;
342+ const pushed = await loader . push ( "es" , pulled ) ;
343+ expect ( pushed ) . toBe ( expected ) ;
344+ } ) ;
345+
346+ it ( "adds blank line before image when only after exists" , async ( ) => {
347+ const md = dedent `
348+ Before.
349+ 
350+
351+ After.
352+ ` ;
353+
354+ const expected = dedent `
355+ Before.
356+
357+ 
358+
359+ After.
360+ ` ;
361+
362+ const pulled = await loader . pull ( "en" , md ) ;
363+ const pushed = await loader . push ( "es" , pulled ) ;
364+ expect ( pushed ) . toBe ( expected ) ;
365+ } ) ;
366+
367+ it ( "inserts spacing between consecutive images" , async ( ) => {
368+ const md = dedent `
369+ 
370+ 
371+ ` ;
372+
373+ const expected = dedent `
374+ 
375+
376+ 
377+ ` ;
378+
379+ const pulled = await loader . pull ( "en" , md ) ;
380+ const pushed = await loader . push ( "es" , pulled ) ;
381+ expect ( pushed ) . toBe ( expected ) ;
382+ } ) ;
383+
384+ it ( "handles image inside JSX component - adds blank lines" , async ( ) => {
385+ const md = dedent `
386+ <Wrapper>
387+ 
388+ </Wrapper>
389+ ` ;
390+
391+ const expected = dedent `
392+ <Wrapper>
393+
394+ 
395+
396+ </Wrapper>
397+ ` ;
398+
399+ const pulled = await loader . pull ( "en" , md ) ;
400+ const pushed = await loader . push ( "es" , pulled ) ;
401+ expect ( pushed ) . toBe ( expected ) ;
402+ } ) ;
278403 } ) ;
279404
280405 describe ( "inline code placeholder" , ( ) => {
0 commit comments