11import { SingleTask } from './SingleTask.js'
22import { render } from '../../testing/ui.js'
3+ import { TokenizedString } from '../../../../public/node/output.js'
34import React from 'react'
45import { describe , expect , test } from 'vitest'
56
67describe ( 'SingleTask' , ( ) => {
78 test ( 'unmounts when promise resolves successfully' , async ( ) => {
89 // Given
9- const title = 'Uploading files'
10+ const title = new TokenizedString ( 'Uploading files' )
1011 let resolvePromise : ( value : string ) => void
1112 const task = ( ) =>
1213 new Promise < string > ( ( resolve ) => {
@@ -31,7 +32,7 @@ describe('SingleTask', () => {
3132
3233 test ( 'unmounts when promise rejects' , async ( ) => {
3334 // Given
34- const title = 'Failed task'
35+ const title = new TokenizedString ( 'Failed task' )
3536 let rejectPromise : ( error : Error ) => void
3637 const task = ( ) =>
3738 new Promise < string > ( ( resolve , reject ) => {
@@ -53,7 +54,7 @@ describe('SingleTask', () => {
5354
5455 test ( 'handles promise that resolves immediately' , async ( ) => {
5556 // Given
56- const title = 'Instant task'
57+ const title = new TokenizedString ( 'Instant task' )
5758 const task = ( ) => Promise . resolve ( 'immediate success' )
5859
5960 // When
@@ -66,7 +67,7 @@ describe('SingleTask', () => {
6667
6768 test ( 'handles promise that rejects immediately' , async ( ) => {
6869 // Given
69- const title = 'Instant failure'
70+ const title = new TokenizedString ( 'Instant failure' )
7071 const task = ( ) => Promise . reject ( new Error ( 'Immediate error' ) )
7172
7273 // When
@@ -81,7 +82,11 @@ describe('SingleTask', () => {
8182 let stringResult : string | undefined
8283 const stringTask = ( ) => Promise . resolve ( 'task completed' )
8384 const stringRender = render (
84- < SingleTask title = "String task" task = { stringTask } onComplete = { ( result ) => ( stringResult = result ) } /> ,
85+ < SingleTask
86+ title = { new TokenizedString ( 'String task' ) }
87+ task = { stringTask }
88+ onComplete = { ( result ) => ( stringResult = result ) }
89+ /> ,
8590 )
8691 await stringRender . waitUntilExit ( )
8792 expect ( stringRender . lastFrame ( ) ) . toBeDefined ( )
@@ -91,7 +96,11 @@ describe('SingleTask', () => {
9196 let objectResult : { id : number ; name : string } | undefined
9297 const objectTask = ( ) => Promise . resolve ( { id : 1 , name : 'test' } )
9398 const objectRender = render (
94- < SingleTask title = "Object task" task = { objectTask } onComplete = { ( result ) => ( objectResult = result ) } /> ,
99+ < SingleTask
100+ title = { new TokenizedString ( 'Object task' ) }
101+ task = { objectTask }
102+ onComplete = { ( result ) => ( objectResult = result ) }
103+ /> ,
95104 )
96105 await objectRender . waitUntilExit ( )
97106 expect ( objectRender . lastFrame ( ) ) . toBeDefined ( )
@@ -100,7 +109,11 @@ describe('SingleTask', () => {
100109 let numberResult : number | undefined
101110 const numberTask = ( ) => Promise . resolve ( 42 )
102111 const numberRender = render (
103- < SingleTask title = "Number task" task = { numberTask } onComplete = { ( result ) => ( numberResult = result ) } /> ,
112+ < SingleTask
113+ title = { new TokenizedString ( 'Number task' ) }
114+ task = { numberTask }
115+ onComplete = { ( result ) => ( numberResult = result ) }
116+ /> ,
104117 )
105118 await numberRender . waitUntilExit ( )
106119 expect ( numberRender . lastFrame ( ) ) . toBeDefined ( )
@@ -110,7 +123,11 @@ describe('SingleTask', () => {
110123 let booleanResult : boolean | undefined
111124 const booleanTask = ( ) => Promise . resolve ( true )
112125 const booleanRender = render (
113- < SingleTask title = "Boolean task" task = { booleanTask } onComplete = { ( result ) => ( booleanResult = result ) } /> ,
126+ < SingleTask
127+ title = { new TokenizedString ( 'Boolean task' ) }
128+ task = { booleanTask }
129+ onComplete = { ( result ) => ( booleanResult = result ) }
130+ /> ,
114131 )
115132 await booleanRender . waitUntilExit ( )
116133 expect ( booleanRender . lastFrame ( ) ) . toBeDefined ( )
@@ -119,7 +136,7 @@ describe('SingleTask', () => {
119136
120137 test ( 'handles promise with delayed resolution' , async ( ) => {
121138 // Given
122- const title = 'Delayed task'
139+ const title = new TokenizedString ( 'Delayed task' )
123140 const task = ( ) =>
124141 new Promise < string > ( ( resolve ) => {
125142 setTimeout ( ( ) => resolve ( 'completed' ) , 100 )
@@ -137,7 +154,7 @@ describe('SingleTask', () => {
137154
138155 test ( 'handles promise with delayed rejection' , async ( ) => {
139156 // Given
140- const title = 'Delayed failure'
157+ const title = new TokenizedString ( 'Delayed failure' )
141158 const task = ( ) =>
142159 new Promise < string > ( ( resolve , reject ) => {
143160 setTimeout ( ( ) => reject ( new Error ( 'delayed error' ) ) , 100 )
@@ -163,7 +180,7 @@ describe('SingleTask', () => {
163180 const task = ( ) => Promise . reject ( customError )
164181
165182 // When
166- const renderInstance = render ( < SingleTask title = " Custom error task" task = { task } /> )
183+ const renderInstance = render ( < SingleTask title = { new TokenizedString ( ' Custom error task' ) } task = { task } /> )
167184
168185 // Then - should preserve the exact error
169186 await expect ( renderInstance . waitUntilExit ( ) ) . rejects . toThrow ( 'Custom error message' )
@@ -175,8 +192,8 @@ describe('SingleTask', () => {
175192 const slowPromise = ( ) => new Promise ( ( resolve ) => setTimeout ( ( ) => resolve ( 'slow' ) , 150 ) )
176193
177194 // When
178- const fastRender = render ( < SingleTask title = " Fast task" task = { fastPromise } /> )
179- const slowRender = render ( < SingleTask title = " Slow task" task = { slowPromise } /> )
195+ const fastRender = render ( < SingleTask title = { new TokenizedString ( ' Fast task' ) } task = { fastPromise } /> )
196+ const slowRender = render ( < SingleTask title = { new TokenizedString ( ' Slow task' ) } task = { slowPromise } /> )
180197
181198 // Then - Both should complete successfully
182199 await fastRender . waitUntilExit ( )
@@ -188,7 +205,7 @@ describe('SingleTask', () => {
188205
189206 test ( 'passes noColor prop to LoadingBar component' , async ( ) => {
190207 // Given
191- const title = 'No color task'
208+ const title = new TokenizedString ( 'No color task' )
192209 const task = ( ) => Promise . resolve ( )
193210
194211 // When - Test that noColor prop doesn't break the component
@@ -201,7 +218,7 @@ describe('SingleTask', () => {
201218
202219 test ( 'updates status message during task execution' , async ( ) => {
203220 // Given
204- const initialTitle = 'Starting task'
221+ const initialTitle = new TokenizedString ( 'Starting task' )
205222 let step1Resolve : ( ) => void
206223 let step2Resolve : ( ) => void
207224 let step3Resolve : ( ) => void
@@ -216,14 +233,14 @@ describe('SingleTask', () => {
216233 step3Resolve = resolve
217234 } )
218235
219- const task = async ( updateStatus : ( status : string ) => void ) => {
220- updateStatus ( 'Running (1 complete)...' )
236+ const task = async ( updateStatus : ( status : TokenizedString ) => void ) => {
237+ updateStatus ( new TokenizedString ( 'Running (1 complete)...' ) )
221238 await step1Promise
222239
223- updateStatus ( 'Running (2 complete)...' )
240+ updateStatus ( new TokenizedString ( 'Running (2 complete)...' ) )
224241 await step2Promise
225242
226- updateStatus ( 'Running (3 complete)...' )
243+ updateStatus ( new TokenizedString ( 'Running (3 complete)...' ) )
227244 await step3Promise
228245
229246 return 'completed'
0 commit comments