@@ -2,6 +2,7 @@ const colors = require('chalk')
22const readline = require ( 'readline' )
33const ora = require ( 'ora-classic' )
44const debug = require ( 'debug' ) ( 'codeceptjs:pause' )
5+ const Fuse = require ( 'fuse.js' )
56
67const container = require ( './container' )
78const history = require ( './history' )
@@ -29,10 +30,20 @@ const pause = function (passedObject = {}) {
2930 // add listener to all next steps to provide next() functionality
3031 event . dispatcher . on ( event . step . after , ( ) => {
3132 recorder . add ( 'Start next pause session' , ( ) => {
33+ // test already finished, nothing to pause
34+ if ( ! store . currentTest ) return
3235 if ( ! next ) return
3336 return pauseSession ( )
3437 } )
3538 } )
39+
40+ event . dispatcher . on ( event . test . finished , ( ) => {
41+ finish ( )
42+ recorder . session . restore ( 'pause' )
43+ rl . close ( )
44+ history . save ( )
45+ } )
46+
3647 recorder . add ( 'Start new session' , ( ) => pauseSession ( passedObject ) )
3748}
3849
@@ -74,18 +85,20 @@ function pauseSession(passedObject = {}) {
7485 } )
7586 return new Promise ( resolve => {
7687 finish = resolve
88+ // eslint-disable-next-line
7789 return askForStep ( )
7890 } )
7991}
8092
93+ /* eslint-disable */
8194async function parseInput ( cmd ) {
8295 rl . pause ( )
8396 next = false
8497 recorder . session . start ( 'pause' )
8598 if ( cmd === '' ) next = true
8699 if ( ! cmd || cmd === 'resume' || cmd === 'exit' ) {
87100 finish ( )
88- recorder . session . restore ( )
101+ recorder . session . restore ( 'pause' )
89102 rl . close ( )
90103 history . save ( )
91104 return nextStep ( )
@@ -186,6 +199,7 @@ async function parseInput(cmd) {
186199 recorder . add ( 'ask for next step' , askForStep )
187200 nextStep ( )
188201}
202+ /* eslint-enable */
189203
190204function askForStep ( ) {
191205 return new Promise ( resolve => {
@@ -199,13 +213,23 @@ function askForStep() {
199213function completer ( line ) {
200214 const I = container . support ( 'I' )
201215 const completions = methodsOfObject ( I )
202- const hits = completions . filter ( c => {
203- if ( c . indexOf ( line ) === 0 ) {
204- return c
205- }
206- return null
216+ // If no input, return all completions
217+ if ( ! line ) {
218+ return [ completions , line ]
219+ }
220+
221+ // Initialize Fuse with completions
222+ const fuse = new Fuse ( completions , {
223+ threshold : 0.3 ,
224+ distance : 100 ,
225+ minMatchCharLength : 1 ,
207226 } )
208- return [ hits && hits . length ? hits : completions , line ]
227+
228+ // Search using Fuse.js
229+ const searchResults = fuse . search ( line )
230+ const hits = searchResults . map ( result => result . item )
231+
232+ return [ hits , line ]
209233}
210234
211235function registerVariable ( name , value ) {
0 commit comments