@@ -193,4 +193,204 @@ describe('Spinner', () => {
193193 } )
194194 } )
195195 } )
196+
197+ describe ( 'core methods' , ( ) => {
198+ it ( 'should support start() method' , ( ) => {
199+ expect ( ( ) => spinner . start ( ) ) . not . toThrow ( )
200+ expect ( ( ) => spinner . start ( 'Loading...' ) ) . not . toThrow ( )
201+ } )
202+
203+ it ( 'should support stop() method' , ( ) => {
204+ expect ( ( ) => spinner . stop ( ) ) . not . toThrow ( )
205+ expect ( ( ) => spinner . stop ( 'Done' ) ) . not . toThrow ( )
206+ } )
207+
208+ it ( 'should support clear() method' , ( ) => {
209+ expect ( ( ) => spinner . clear ( ) ) . not . toThrow ( )
210+ const result = spinner . clear ( )
211+ expect ( result ) . toBe ( spinner )
212+ } )
213+
214+ it ( 'should support text() getter' , ( ) => {
215+ spinner = Spinner ( { text : 'Test text' } )
216+ const text = spinner . text ( )
217+ expect ( typeof text ) . toBe ( 'string' )
218+ } )
219+
220+ it ( 'should support text() setter' , ( ) => {
221+ expect ( ( ) => spinner . text ( 'New text' ) ) . not . toThrow ( )
222+ const result = spinner . text ( 'Updated' )
223+ expect ( result ) . toBe ( spinner )
224+ } )
225+ } )
226+
227+ describe ( 'status methods' , ( ) => {
228+ it ( 'should support success() method' , ( ) => {
229+ expect ( ( ) => spinner . success ( ) ) . not . toThrow ( )
230+ expect ( ( ) => spinner . success ( 'Success!' ) ) . not . toThrow ( )
231+ expect ( ( ) => spinner . success ( 'Done' , { data : 123 } ) ) . not . toThrow ( )
232+ } )
233+
234+ it ( 'should support successAndStop() method' , ( ) => {
235+ expect ( ( ) => spinner . successAndStop ( ) ) . not . toThrow ( )
236+ expect ( ( ) => spinner . successAndStop ( 'Success!' ) ) . not . toThrow ( )
237+ } )
238+
239+ it ( 'should support fail() method' , ( ) => {
240+ expect ( ( ) => spinner . fail ( ) ) . not . toThrow ( )
241+ expect ( ( ) => spinner . fail ( 'Failed!' ) ) . not . toThrow ( )
242+ expect ( ( ) => spinner . fail ( 'Error' , { code : 500 } ) ) . not . toThrow ( )
243+ } )
244+
245+ it ( 'should support failAndStop() method' , ( ) => {
246+ expect ( ( ) => spinner . failAndStop ( ) ) . not . toThrow ( )
247+ expect ( ( ) => spinner . failAndStop ( 'Failed!' ) ) . not . toThrow ( )
248+ } )
249+
250+ it ( 'should support info() method' , ( ) => {
251+ expect ( ( ) => spinner . info ( ) ) . not . toThrow ( )
252+ expect ( ( ) => spinner . info ( 'Info message' ) ) . not . toThrow ( )
253+ expect ( ( ) => spinner . info ( 'Note:' , 'details' ) ) . not . toThrow ( )
254+ } )
255+
256+ it ( 'should support infoAndStop() method' , ( ) => {
257+ expect ( ( ) => spinner . infoAndStop ( ) ) . not . toThrow ( )
258+ expect ( ( ) => spinner . infoAndStop ( 'Info' ) ) . not . toThrow ( )
259+ } )
260+
261+ it ( 'should support error() method' , ( ) => {
262+ expect ( ( ) => spinner . error ( ) ) . not . toThrow ( )
263+ expect ( ( ) => spinner . error ( 'Error message' ) ) . not . toThrow ( )
264+ } )
265+
266+ it ( 'should support errorAndStop() method' , ( ) => {
267+ expect ( ( ) => spinner . errorAndStop ( ) ) . not . toThrow ( )
268+ expect ( ( ) => spinner . errorAndStop ( 'Error' ) ) . not . toThrow ( )
269+ } )
270+
271+ it ( 'should support done() method' , ( ) => {
272+ expect ( ( ) => spinner . done ( ) ) . not . toThrow ( )
273+ expect ( ( ) => spinner . done ( 'Complete' ) ) . not . toThrow ( )
274+ } )
275+
276+ it ( 'should support doneAndStop() method' , ( ) => {
277+ expect ( ( ) => spinner . doneAndStop ( ) ) . not . toThrow ( )
278+ expect ( ( ) => spinner . doneAndStop ( 'Done' ) ) . not . toThrow ( )
279+ } )
280+
281+ it ( 'should support step() method' , ( ) => {
282+ expect ( ( ) => spinner . step ( 'Step 1' ) ) . not . toThrow ( )
283+ expect ( ( ) => spinner . step ( 'Step' , 'details' ) ) . not . toThrow ( )
284+ } )
285+
286+ it ( 'should support substep() method' , ( ) => {
287+ expect ( ( ) => spinner . substep ( 'Substep' ) ) . not . toThrow ( )
288+ expect ( ( ) => spinner . substep ( 'Sub' , 'data' ) ) . not . toThrow ( )
289+ } )
290+
291+ it ( 'should support debug() method' , ( ) => {
292+ expect ( ( ) => spinner . debug ( ) ) . not . toThrow ( )
293+ expect ( ( ) => spinner . debug ( 'Debug info' ) ) . not . toThrow ( )
294+ } )
295+
296+ it ( 'should support debugAndStop() method' , ( ) => {
297+ expect ( ( ) => spinner . debugAndStop ( ) ) . not . toThrow ( )
298+ expect ( ( ) => spinner . debugAndStop ( 'Debug' ) ) . not . toThrow ( )
299+ } )
300+
301+ it ( 'should support log() method' , ( ) => {
302+ expect ( ( ) => spinner . log ( ) ) . not . toThrow ( )
303+ expect ( ( ) => spinner . log ( 'Log message' ) ) . not . toThrow ( )
304+ } )
305+
306+ it ( 'should support logAndStop() method' , ( ) => {
307+ expect ( ( ) => spinner . logAndStop ( ) ) . not . toThrow ( )
308+ expect ( ( ) => spinner . logAndStop ( 'Log' ) ) . not . toThrow ( )
309+ } )
310+ } )
311+
312+ describe ( 'indentation' , ( ) => {
313+ it ( 'should support indent() method' , ( ) => {
314+ expect ( ( ) => spinner . indent ( ) ) . not . toThrow ( )
315+ expect ( ( ) => spinner . indent ( 4 ) ) . not . toThrow ( )
316+ const result = spinner . indent ( 2 )
317+ expect ( result ) . toBe ( spinner )
318+ } )
319+
320+ it ( 'should support dedent() method' , ( ) => {
321+ expect ( ( ) => spinner . dedent ( ) ) . not . toThrow ( )
322+ expect ( ( ) => spinner . dedent ( 4 ) ) . not . toThrow ( )
323+ const result = spinner . dedent ( 2 )
324+ expect ( result ) . toBe ( spinner )
325+ } )
326+
327+ it ( 'should support chaining indent and dedent' , ( ) => {
328+ expect ( ( ) => {
329+ spinner . indent ( 4 ) . text ( 'Indented' ) . dedent ( 2 ) . text ( 'Less indented' )
330+ } ) . not . toThrow ( )
331+ } )
332+ } )
333+
334+ describe ( 'progress tracking' , ( ) => {
335+ it ( 'should support progress() method' , ( ) => {
336+ expect ( ( ) => spinner . progress ( 5 , 10 ) ) . not . toThrow ( )
337+ expect ( ( ) => spinner . progress ( 50 , 100 , 'files' ) ) . not . toThrow ( )
338+ const result = spinner . progress ( 3 , 10 )
339+ expect ( result ) . toBe ( spinner )
340+ } )
341+
342+ it ( 'should support progressStep() method' , ( ) => {
343+ expect ( ( ) => spinner . progressStep ( ) ) . not . toThrow ( )
344+ expect ( ( ) => spinner . progressStep ( 1 ) ) . not . toThrow ( )
345+ expect ( ( ) => spinner . progressStep ( 5 ) ) . not . toThrow ( )
346+ const result = spinner . progressStep ( )
347+ expect ( result ) . toBe ( spinner )
348+ } )
349+
350+ it ( 'should handle progress with zero total' , ( ) => {
351+ expect ( ( ) => spinner . progress ( 0 , 0 ) ) . not . toThrow ( )
352+ } )
353+
354+ it ( 'should throw when progress exceeds total' , ( ) => {
355+ // Progress validation - current cannot exceed total
356+ expect ( ( ) => spinner . progress ( 15 , 10 ) ) . toThrow ( RangeError )
357+ } )
358+ } )
359+
360+ describe ( 'method chaining' , ( ) => {
361+ it ( 'should chain multiple status methods' , ( ) => {
362+ expect ( ( ) => {
363+ spinner
364+ . start ( 'Starting' )
365+ . info ( 'Processing' )
366+ . step ( 'Step 1' )
367+ . substep ( 'Details' )
368+ . success ( 'Done' )
369+ } ) . not . toThrow ( )
370+ } )
371+
372+ it ( 'should chain with progress updates' , ( ) => {
373+ expect ( ( ) => {
374+ spinner
375+ . start ( 'Working' )
376+ . progress ( 1 , 5 )
377+ . progressStep ( )
378+ . progressStep ( )
379+ . done ( 'Finished' )
380+ } ) . not . toThrow ( )
381+ } )
382+
383+ it ( 'should chain with indentation changes' , ( ) => {
384+ expect ( ( ) => {
385+ spinner
386+ . text ( 'Main' )
387+ . indent ( 2 )
388+ . text ( 'Indented' )
389+ . indent ( 2 )
390+ . text ( 'More indented' )
391+ . dedent ( 4 )
392+ . text ( 'Back to start' )
393+ } ) . not . toThrow ( )
394+ } )
395+ } )
196396} )
0 commit comments