|
1 | 1 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
2 | 2 | // @ts-nocheck
|
3 |
| -import { FOR_TEMPLATE_FLAG } from '../../../models/generics'; |
| 3 | +import { COMPONENT_FLAG, FOR_TEMPLATE_FLAG } from '../../../models/generics'; |
4 | 4 | import compute from '../../utils/computeExpression';
|
5 | 5 | import { forDirective } from '../for';
|
6 | 6 |
|
@@ -130,4 +130,118 @@ describe('.forDirective', () => {
|
130 | 130 | });
|
131 | 131 | expect(el.innerHTML).toEqual('<li></li><li></li><li></li>');
|
132 | 132 | });
|
| 133 | + |
| 134 | + it('should use default AST if available', () => { |
| 135 | + const el = document.createElement('p'); |
| 136 | + const expression = `_ in foo`; |
| 137 | + const state = { foo: ['bar', 'bar', 'bar'] }; |
| 138 | + const data = { |
| 139 | + value: expression, |
| 140 | + compute: compute(expression, el), |
| 141 | + deps: ['foo'], |
| 142 | + }; |
| 143 | + |
| 144 | + el[FOR_TEMPLATE_FLAG] = '<li></li>'; |
| 145 | + el[FOR_STATE_FLAG] = ['bar', 'bar', 'bar']; |
| 146 | + el[COMPONENT_FLAG] = []; |
| 147 | + |
| 148 | + el.innerHTML = '<li></li><li></li><li></li><li></li>'; |
| 149 | + forDirective({ |
| 150 | + el, |
| 151 | + name: 'l-for', |
| 152 | + data, |
| 153 | + state, |
| 154 | + node: { el, directives: { for: data } }, |
| 155 | + }); |
| 156 | + expect(el.innerHTML).toEqual('<li></li><li></li><li></li>'); |
| 157 | + }); |
| 158 | + |
| 159 | + it('should handle user provided array if available', () => { |
| 160 | + const el = document.createElement('p'); |
| 161 | + const expression = `_ in ['bar', 'bar', 'bar']`; |
| 162 | + const state = {}; |
| 163 | + const data = { |
| 164 | + value: expression, |
| 165 | + compute: compute(expression, el), |
| 166 | + deps: [], |
| 167 | + }; |
| 168 | + |
| 169 | + el[FOR_TEMPLATE_FLAG] = '<li></li>'; |
| 170 | + el[FOR_STATE_FLAG] = ['bar', 'bar', 'bar']; |
| 171 | + el[COMPONENT_FLAG] = []; |
| 172 | + |
| 173 | + el.innerHTML = '<li></li><li></li><li></li><li></li>'; |
| 174 | + forDirective({ |
| 175 | + el, |
| 176 | + name: 'l-for', |
| 177 | + data, |
| 178 | + state, |
| 179 | + node: { el, directives: { for: data } }, |
| 180 | + }); |
| 181 | + expect(el.innerHTML).toEqual('<li></li><li></li><li></li>'); |
| 182 | + }); |
| 183 | + |
| 184 | + it('should rerender if arrayDiff is not 0', () => { |
| 185 | + const el = document.createElement('p'); |
| 186 | + const expression = `_ in foo`; |
| 187 | + const state = { foo: ['bar', 'bar', 'bar'] }; |
| 188 | + const data = { |
| 189 | + value: expression, |
| 190 | + compute: compute(expression, el), |
| 191 | + deps: ['foo'], |
| 192 | + }; |
| 193 | + |
| 194 | + el[FOR_TEMPLATE_FLAG] = '<li></li>'; |
| 195 | + el[FOR_STATE_FLAG] = ['bar', 'bar', 'bar']; |
| 196 | + el[COMPONENT_FLAG] = []; |
| 197 | + |
| 198 | + el.innerHTML = '<li></li><li></li><li></li><li></li>'; |
| 199 | + forDirective({ |
| 200 | + el, |
| 201 | + name: 'l-for', |
| 202 | + data, |
| 203 | + state, |
| 204 | + node: { el, directives: { for: data } }, |
| 205 | + }); |
| 206 | + forDirective({ |
| 207 | + el, |
| 208 | + name: 'l-for', |
| 209 | + data, |
| 210 | + state, |
| 211 | + node: { el, directives: { for: data } }, |
| 212 | + }); |
| 213 | + expect(el.innerHTML).toEqual('<li></li><li></li><li></li>'); |
| 214 | + }); |
| 215 | + |
| 216 | + it('should clear innerHTML if currArray is 0', () => { |
| 217 | + const el = document.createElement('p'); |
| 218 | + const expression = `_ in foo`; |
| 219 | + const state = { foo: [] }; |
| 220 | + const data = { |
| 221 | + value: expression, |
| 222 | + compute: compute(expression, el), |
| 223 | + deps: ['foo'], |
| 224 | + }; |
| 225 | + |
| 226 | + el[FOR_TEMPLATE_FLAG] = '<li></li>'; |
| 227 | + el[FOR_STATE_FLAG] = []; |
| 228 | + el[COMPONENT_FLAG] = []; |
| 229 | + |
| 230 | + el.innerHTML = '<li></li>'; |
| 231 | + forDirective({ |
| 232 | + el, |
| 233 | + name: 'l-for', |
| 234 | + data, |
| 235 | + state, |
| 236 | + node: { el, directives: { for: data } }, |
| 237 | + }); |
| 238 | + forDirective({ |
| 239 | + el, |
| 240 | + name: 'l-for', |
| 241 | + data, |
| 242 | + state, |
| 243 | + node: { el, directives: { for: data } }, |
| 244 | + }); |
| 245 | + expect(el.innerHTML).toEqual(''); |
| 246 | + }); |
133 | 247 | });
|
0 commit comments