@@ -9,40 +9,62 @@ import { debounce } from 'reactiveweb/debounce';
99module ( 'Utils | debounce | js' , function ( hooks ) {
1010 setupTest ( hooks ) ;
1111
12- let someTime = ( ms = 25 ) => new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
12+ const timeout = ( ms : number ) => new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
1313
1414 module ( 'debounce' , function ( ) {
15- test ( 'works with @use ' , async function ( assert ) {
15+ test ( 'value is returned after x ms ' , async function ( assert ) {
1616 class Test {
17- @tracked data = '' ;
17+ @tracked value = 'initial ' ;
1818
19- @use text = debounce ( 100 , ( ) => this . data ) ;
19+ @use debouncedValue = debounce ( 100 , ( ) => this . value ) ;
2020 }
2121
2222 let test = new Test ( ) ;
2323
2424 setOwner ( test , this . owner ) ;
2525
26- assert . strictEqual ( test . text , undefined ) ;
26+ assert . strictEqual ( test . debouncedValue , undefined , 'Value is undefined at first' ) ;
2727
28- test . data = 'b' ;
29- await someTime ( ) ;
30- assert . strictEqual ( test . text , undefined ) ;
31- test . data = 'bo' ;
32- await someTime ( ) ;
33- assert . strictEqual ( test . text , undefined ) ;
34- test . data = 'boo' ;
35- await someTime ( ) ;
36- assert . strictEqual ( test . text , undefined ) ;
28+ await timeout ( 50 ) ;
3729
38- await someTime ( 110 ) ;
39- assert . strictEqual ( test . text , 'boo' ) ;
30+ assert . strictEqual ( test . debouncedValue , undefined , 'Value is still undefined after ~50ms' ) ;
4031
41- test . data = 'boop' ;
42- assert . strictEqual ( test . text , 'boo' ) ;
32+ await timeout ( 50 ) ;
4333
44- await someTime ( 110 ) ;
45- assert . strictEqual ( test . text , 'boop' ) ;
34+ assert . strictEqual ( test . debouncedValue , test . value , `Value is "${ test . debouncedValue } " after ~100ms` ) ;
35+ } ) ;
36+
37+ test ( 'value is returned x ms after latest change' , async function ( assert ) {
38+ class Test {
39+ @tracked value = 'initial' ;
40+
41+ @use debouncedValue = debounce ( 100 , ( ) => this . value ) ;
42+ }
43+
44+ let test = new Test ( ) ;
45+
46+ setOwner ( test , this . owner ) ;
47+
48+ assert . strictEqual ( test . debouncedValue , undefined , 'Value is undefined at first' ) ;
49+
50+ await timeout ( 50 ) ;
51+
52+ assert . strictEqual ( test . debouncedValue , undefined , 'Value is still undefined after ~50ms' ) ;
53+
54+ // Changing the value resets the debounce timer
55+ test . value = 'new' ;
56+
57+ await timeout ( 50 ) ;
58+
59+ assert . strictEqual ( test . debouncedValue , undefined , `Value is still undefined after ~100ms (because we changed something at ~50ms)` ) ;
60+
61+ await timeout ( 50 ) ;
62+
63+ assert . strictEqual ( test . debouncedValue , test . value , `Value is "${ test . value } " after ~150ms` ) ;
64+
65+ await timeout ( 50 ) ;
66+
67+ assert . strictEqual ( test . debouncedValue , test . value , `Value is "${ test . value } " after ~200ms` ) ;
4668 } ) ;
4769 } ) ;
4870} ) ;
0 commit comments