@@ -25,94 +25,104 @@ describe('remote-input', function() {
25
25
document . body . innerHTML = ''
26
26
} )
27
27
28
- it ( 'loads content' , function ( done ) {
28
+ it ( 'loads content' , async function ( ) {
29
29
const remoteInput = document . querySelector ( 'remote-input' )
30
30
const input = document . querySelector ( 'input' )
31
31
const results = document . querySelector ( '#results' )
32
32
assert . equal ( results . innerHTML , '' )
33
- let successEvent = false
34
- remoteInput . addEventListener ( 'remote-input-success' , function ( ) {
35
- successEvent = true
36
- } )
37
- remoteInput . addEventListener ( 'loadend' , function ( ) {
38
- assert . ok ( successEvent , 'success event happened' )
39
- assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/results?q=test' )
40
- done ( )
41
- } )
33
+
34
+ const success = once ( remoteInput , 'remote-input-success' )
35
+ const loadend = once ( remoteInput , 'loadend' )
36
+
42
37
input . value = 'test'
43
38
input . focus ( )
39
+
40
+ await success
41
+ await loadend
42
+ assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/results?q=test' )
44
43
} )
45
44
46
- it ( 'handles not ok responses' , function ( done ) {
45
+ it ( 'handles not ok responses' , async function ( ) {
47
46
const remoteInput = document . querySelector ( 'remote-input' )
48
47
const input = document . querySelector ( 'input' )
49
48
const results = document . querySelector ( '#results' )
50
49
remoteInput . src = '/500'
51
50
assert . equal ( results . innerHTML , '' )
52
- let errorEvent = false
53
- remoteInput . addEventListener ( 'remote-input-error' , function ( ) {
54
- errorEvent = true
55
- } )
56
- remoteInput . addEventListener ( 'loadend' , function ( ) {
57
- assert . ok ( errorEvent , 'error event happened' )
58
- assert . equal ( results . innerHTML , '' , 'nothing was appended' )
59
- done ( )
60
- } )
51
+
52
+ const error = once ( remoteInput , 'remote-input-error' )
53
+ const loadend = once ( remoteInput , 'loadend' )
54
+
61
55
input . value = 'test'
62
56
input . focus ( )
57
+
58
+ await loadend
59
+ await error
60
+
61
+ assert . equal ( results . innerHTML , '' , 'nothing was appended' )
63
62
} )
64
63
65
- it ( 'handles network error' , function ( done ) {
64
+ it ( 'handles network error' , async function ( ) {
66
65
const remoteInput = document . querySelector ( 'remote-input' )
67
- const input = document . querySelector ( 'input' )
66
+ const input = remoteInput . querySelector ( 'input' )
68
67
const results = document . querySelector ( '#results' )
69
68
remoteInput . src = '/network-error'
70
69
assert . equal ( results . innerHTML , '' )
71
- remoteInput . addEventListener ( 'error' , async function ( ) {
72
- await Promise . resolve ( )
73
- assert . equal ( results . innerHTML , '' , 'nothing was appended' )
74
- assert . notOk ( remoteInput . hasAttribute ( 'loading' ) , 'loading attribute was removed' )
75
- done ( )
76
- } )
70
+
71
+ const result = once ( remoteInput , 'error' )
72
+
77
73
input . value = 'test'
78
74
input . focus ( )
79
- assert . ok ( remoteInput . hasAttribute ( 'loading' ) , 'loading attribute was added' )
75
+ assert . ok ( remoteInput . hasAttribute ( 'loading' ) , 'loading attribute should have been added' )
76
+
77
+ await result
78
+ await nextTick ( )
79
+ assert . equal ( results . innerHTML , '' , 'nothing was appended' )
80
+ assert . notOk ( remoteInput . hasAttribute ( 'loading' ) , 'loading attribute should have been removed' )
80
81
} )
81
82
82
- it ( 'repects param attribute' , function ( done ) {
83
+ it ( 'repects param attribute' , async function ( ) {
83
84
const remoteInput = document . querySelector ( 'remote-input' )
84
85
const input = document . querySelector ( 'input' )
85
86
const results = document . querySelector ( '#results' )
86
87
remoteInput . setAttribute ( 'param' , 'robot' )
87
88
assert . equal ( results . innerHTML , '' )
88
- remoteInput . addEventListener ( 'loadend' , function ( ) {
89
- assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/results?robot=test' )
90
- done ( )
91
- } )
89
+
90
+ const result = once ( remoteInput , 'remote-input-success' )
91
+
92
92
input . value = 'test'
93
93
input . focus ( )
94
+
95
+ await result
96
+ assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/results?robot=test' )
94
97
} )
95
98
96
- it ( 'loads content again after src is changed' , function ( done ) {
99
+ it ( 'loads content again after src is changed' , async function ( ) {
97
100
const remoteInput = document . querySelector ( 'remote-input' )
98
101
const input = document . querySelector ( 'input' )
99
102
const results = document . querySelector ( '#results' )
100
103
101
- function listenOnce ( cb ) {
102
- remoteInput . addEventListener ( 'loadend' , cb , { once : true } )
103
- }
104
- listenOnce ( function ( ) {
105
- assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/results?q=test' )
106
-
107
- listenOnce ( function ( ) {
108
- assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/srcChanged?q=test' )
109
- done ( )
110
- } )
111
-
112
- remoteInput . src = '/srcChanged'
113
- } )
104
+ const result1 = once ( remoteInput , 'remote-input-success' )
114
105
input . value = 'test'
115
106
input . focus ( )
107
+
108
+ await result1
109
+ assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/results?q=test' )
110
+
111
+ const result2 = once ( remoteInput , 'remote-input-success' )
112
+ remoteInput . src = '/srcChanged'
113
+
114
+ await result2
115
+ assert . equal ( results . querySelector ( 'ol' ) . getAttribute ( 'data-src' ) , '/srcChanged?q=test' )
116
116
} )
117
117
} )
118
118
} )
119
+
120
+ function nextTick ( ) {
121
+ return Promise . resolve ( )
122
+ }
123
+
124
+ function once ( element , eventName ) {
125
+ return new Promise ( resolve => {
126
+ element . addEventListener ( eventName , resolve , { once : true } )
127
+ } )
128
+ }
0 commit comments