11import { Writable } from 'node:stream' ;
2- import { afterEach , beforeEach , describe , expect , test , vi } from 'vitest' ;
2+ import { afterAll , afterEach , beforeAll , beforeEach , describe , expect , test , vi } from 'vitest' ;
33import * as prompts from './index.js' ;
44
55// TODO (43081j): move this into a util?
@@ -16,127 +16,140 @@ class MockWritable extends Writable {
1616 }
1717}
1818
19- describe ( 'spinner ', ( ) => {
20- let output : MockWritable ;
19+ describe . each ( [ 'true ', 'false' ] ) ( 'isCI = %s' , ( isCI ) => {
20+ let originalIsCI : string | undefined ;
2121
22- beforeEach ( ( ) => {
23- vi . useFakeTimers ( ) ;
24- output = new MockWritable ( ) ;
22+ beforeAll ( ( ) => {
23+ originalIsCI = process . env . isCI ;
24+ process . env . isCI = isCI ;
2525 } ) ;
2626
27- afterEach ( ( ) => {
28- vi . restoreAllMocks ( ) ;
29- vi . useRealTimers ( ) ;
27+ afterAll ( ( ) => {
28+ process . env . isCI = originalIsCI ;
3029 } ) ;
3130
32- test ( 'returns spinner API ', ( ) => {
33- const api = prompts . spinner ( { output } ) ;
31+ describe ( ' spinner', ( ) => {
32+ let output : MockWritable ;
3433
35- expect ( api . stop ) . toBeTypeOf ( 'function' ) ;
36- expect ( api . start ) . toBeTypeOf ( 'function' ) ;
37- expect ( api . message ) . toBeTypeOf ( 'function' ) ;
38- } ) ;
39-
40- describe ( 'start' , ( ) => {
41- test ( 'renders frames at interval' , ( ) => {
42- const result = prompts . spinner ( { output } ) ;
34+ beforeEach ( ( ) => {
35+ vi . useFakeTimers ( ) ;
36+ output = new MockWritable ( ) ;
37+ } ) ;
4338
44- result . start ( ) ;
39+ afterEach ( ( ) => {
40+ vi . restoreAllMocks ( ) ;
41+ vi . useRealTimers ( ) ;
42+ } ) ;
4543
46- // there are 4 frames
47- for ( let i = 0 ; i < 4 ; i ++ ) {
48- vi . advanceTimersByTime ( 80 ) ;
49- }
44+ test ( 'returns spinner API' , ( ) => {
45+ const api = prompts . spinner ( { output } ) ;
5046
51- expect ( output . buffer ) . toMatchSnapshot ( ) ;
47+ expect ( api . stop ) . toBeTypeOf ( 'function' ) ;
48+ expect ( api . start ) . toBeTypeOf ( 'function' ) ;
49+ expect ( api . message ) . toBeTypeOf ( 'function' ) ;
5250 } ) ;
5351
54- test ( 'renders message' , ( ) => {
55- const result = prompts . spinner ( { output } ) ;
52+ describe ( 'start' , ( ) => {
53+ test ( 'renders frames at interval' , ( ) => {
54+ const result = prompts . spinner ( { output } ) ;
5655
57- result . start ( 'foo' ) ;
56+ result . start ( ) ;
5857
59- vi . advanceTimersByTime ( 80 ) ;
58+ // there are 4 frames
59+ for ( let i = 0 ; i < 4 ; i ++ ) {
60+ vi . advanceTimersByTime ( 80 ) ;
61+ }
6062
61- expect ( output . buffer ) . toMatchSnapshot ( ) ;
62- } ) ;
63+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
64+ } ) ;
6365
64- test ( 'renders timer when indicator is "timer" ' , ( ) => {
65- const result = prompts . spinner ( { output, indicator : 'timer' } ) ;
66+ test ( 'renders message ' , ( ) => {
67+ const result = prompts . spinner ( { output } ) ;
6668
67- result . start ( ) ;
69+ result . start ( 'foo' ) ;
6870
69- vi . advanceTimersByTime ( 80 ) ;
71+ vi . advanceTimersByTime ( 80 ) ;
72+
73+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
74+ } ) ;
75+
76+ test ( 'renders timer when indicator is "timer"' , ( ) => {
77+ const result = prompts . spinner ( { output, indicator : 'timer' } ) ;
78+
79+ result . start ( ) ;
80+
81+ vi . advanceTimersByTime ( 80 ) ;
7082
71- expect ( output . buffer ) . toMatchSnapshot ( ) ;
83+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
84+ } ) ;
7285 } ) ;
73- } ) ;
7486
75- describe ( 'stop' , ( ) => {
76- test ( 'renders submit symbol and stops spinner' , ( ) => {
77- const result = prompts . spinner ( { output } ) ;
87+ describe ( 'stop' , ( ) => {
88+ test ( 'renders submit symbol and stops spinner' , ( ) => {
89+ const result = prompts . spinner ( { output } ) ;
7890
79- result . start ( ) ;
91+ result . start ( ) ;
8092
81- vi . advanceTimersByTime ( 80 ) ;
93+ vi . advanceTimersByTime ( 80 ) ;
8294
83- result . stop ( ) ;
95+ result . stop ( ) ;
8496
85- vi . advanceTimersByTime ( 80 ) ;
97+ vi . advanceTimersByTime ( 80 ) ;
8698
87- expect ( output . buffer ) . toMatchSnapshot ( ) ;
88- } ) ;
99+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
100+ } ) ;
89101
90- test ( 'renders cancel symbol if code = 1' , ( ) => {
91- const result = prompts . spinner ( { output } ) ;
102+ test ( 'renders cancel symbol if code = 1' , ( ) => {
103+ const result = prompts . spinner ( { output } ) ;
92104
93- result . start ( ) ;
105+ result . start ( ) ;
94106
95- vi . advanceTimersByTime ( 80 ) ;
107+ vi . advanceTimersByTime ( 80 ) ;
96108
97- result . stop ( '' , 1 ) ;
109+ result . stop ( '' , 1 ) ;
98110
99- expect ( output . buffer ) . toMatchSnapshot ( ) ;
100- } ) ;
111+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
112+ } ) ;
101113
102- test ( 'renders error symbol if code > 1' , ( ) => {
103- const result = prompts . spinner ( { output } ) ;
114+ test ( 'renders error symbol if code > 1' , ( ) => {
115+ const result = prompts . spinner ( { output } ) ;
104116
105- result . start ( ) ;
117+ result . start ( ) ;
106118
107- vi . advanceTimersByTime ( 80 ) ;
119+ vi . advanceTimersByTime ( 80 ) ;
108120
109- result . stop ( '' , 2 ) ;
121+ result . stop ( '' , 2 ) ;
110122
111- expect ( output . buffer ) . toMatchSnapshot ( ) ;
112- } ) ;
123+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
124+ } ) ;
113125
114- test ( 'renders message' , ( ) => {
115- const result = prompts . spinner ( { output } ) ;
126+ test ( 'renders message' , ( ) => {
127+ const result = prompts . spinner ( { output } ) ;
116128
117- result . start ( ) ;
129+ result . start ( ) ;
118130
119- vi . advanceTimersByTime ( 80 ) ;
131+ vi . advanceTimersByTime ( 80 ) ;
120132
121- result . stop ( 'foo' ) ;
133+ result . stop ( 'foo' ) ;
122134
123- expect ( output . buffer ) . toMatchSnapshot ( ) ;
135+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
136+ } ) ;
124137 } ) ;
125- } ) ;
126138
127- describe ( 'message' , ( ) => {
128- test ( 'sets message for next frame' , ( ) => {
129- const result = prompts . spinner ( { output } ) ;
139+ describe ( 'message' , ( ) => {
140+ test ( 'sets message for next frame' , ( ) => {
141+ const result = prompts . spinner ( { output } ) ;
130142
131- result . start ( ) ;
143+ result . start ( ) ;
132144
133- vi . advanceTimersByTime ( 80 ) ;
145+ vi . advanceTimersByTime ( 80 ) ;
134146
135- result . message ( 'foo' ) ;
147+ result . message ( 'foo' ) ;
136148
137- vi . advanceTimersByTime ( 80 ) ;
149+ vi . advanceTimersByTime ( 80 ) ;
138150
139- expect ( output . buffer ) . toMatchSnapshot ( ) ;
151+ expect ( output . buffer ) . toMatchSnapshot ( ) ;
152+ } ) ;
140153 } ) ;
141154 } ) ;
142155} ) ;
0 commit comments