@@ -82,6 +82,16 @@ def "classify-block-action returns print-as-it-is for no-run" [] {
8282 assert equal (classify-block-action " ```nushell no-run" ) " print-as-it-is"
8383}
8484
85+ @test
86+ def "classify-block-action returns execute for run-once" [] {
87+ assert equal (classify-block-action " ```nushell run-once" ) " execute"
88+ }
89+
90+ @test
91+ def "classify-block-action returns execute for run-once combined with try" [] {
92+ assert equal (classify-block-action " ```nushell run-once, try" ) " execute"
93+ }
94+
8595@test
8696def "classify-block-action returns delete for output-numd" [] {
8797 assert equal (classify-block-action " ```output-numd" ) " delete"
@@ -126,6 +136,22 @@ def "extract-fence-options expands short options" [] {
126136 assert (" no-output" in $result )
127137}
128138
139+ @test
140+ def "extract-fence-options parses run-once" [] {
141+ let result = " ```nu run-once" | extract-fence-options
142+
143+ assert equal $result [" run-once" ]
144+ }
145+
146+ @test
147+ def "extract-fence-options parses run-once combined with try" [] {
148+ let result = " ```nu run-once, try" | extract-fence-options
149+
150+ assert equal ($result | length ) 2
151+ assert (" run-once" in $result )
152+ assert (" try" in $result )
153+ }
154+
129155@test
130156def "extract-fence-options handles empty options" [] {
131157 let result = " ```nushell" | extract-fence-options
@@ -375,6 +401,37 @@ def "generate-timestamp returns correct format" [] {
375401 assert ($result =~ ' ^\d{8}_\d{6}$' )
376402}
377403
404+ # =============================================================================
405+ # Tests for decorate-original-code-blocks (run-once rewriting)
406+ # =============================================================================
407+
408+ @test
409+ def "decorate-original-code-blocks rewrites run-once to no-run" [] {
410+ let blocks = " ```nu run-once\n echo hello\n ```" | parse-markdown-to-blocks
411+ let result = decorate-original-code-blocks $blocks
412+
413+ assert ($result.0.code =~ ' ```nu no-run' )
414+ assert ($result.0.code !~ ' run-once' )
415+ }
416+
417+ @test
418+ def "decorate-original-code-blocks rewrites run-once preserving other options" [] {
419+ let blocks = " ```nu run-once, try\n echo hello\n ```" | parse-markdown-to-blocks
420+ let result = decorate-original-code-blocks $blocks
421+
422+ assert ($result.0.code =~ ' ```nu no-run, try' )
423+ assert ($result.0.code !~ ' run-once' )
424+ }
425+
426+ @test
427+ def "decorate-original-code-blocks leaves plain blocks unchanged" [] {
428+ let blocks = " ```nu\n echo hello\n ```" | parse-markdown-to-blocks
429+ let result = decorate-original-code-blocks $blocks
430+
431+ assert ($result.0.code =~ ' ```nu' )
432+ assert ($result.0.code !~ ' no-run' )
433+ }
434+
378435# =============================================================================
379436# Tests for strip-outputs
380437# =============================================================================
0 commit comments