query_string.spec.ts (7727B)
1 export const description = ` 2 Unit tests for TestQuery strings. 3 `; 4 5 import { makeTestGroup } from '../common/framework/test_group.js'; 6 import { compareQueries, Ordering } from '../common/internal/query/compare.js'; 7 import { 8 TestQuery, 9 TestQuerySingleCase, 10 TestQueryMultiCase, 11 TestQueryMultiTest, 12 TestQueryMultiFile, 13 relativeQueryString, 14 } from '../common/internal/query/query.js'; 15 16 import { UnitTest } from './unit_test.js'; 17 18 class T extends UnitTest { 19 expectQueryString(q: TestQuery, exp: string): void { 20 const s = q.toString(); 21 this.expect(s === exp, `got ${s} expected ${exp}`); 22 } 23 24 expectRelativeQueryString(parent: TestQuery, child: TestQuery, exp: string): void { 25 const s = relativeQueryString(parent, child); 26 this.expect(s === exp, `got ${s} expected ${exp}`); 27 28 if (compareQueries(parent, child) !== Ordering.Equal) { 29 // Test in reverse 30 this.shouldThrow('Error', () => { 31 relativeQueryString(child, parent); 32 }); 33 } 34 } 35 } 36 37 export const g = makeTestGroup(T); 38 39 g.test('stringifyQuery,single_case').fn(t => { 40 t.expectQueryString( 41 new TestQuerySingleCase('a', ['b_1', '2_c'], ['d_3', '4_e'], { 42 f: 'g', 43 _pri1: 0, 44 x: 3, 45 _pri2: 1, 46 }), 47 'a:b_1,2_c:d_3,4_e:f="g";x=3' 48 ); 49 }); 50 51 g.test('stringifyQuery,single_case,json').fn(t => { 52 t.expectQueryString( 53 new TestQuerySingleCase('a', ['b_1', '2_c'], ['d_3', '4_e'], { 54 f: 'g', 55 x: { p: 2, q: 'Q' }, 56 }), 57 'a:b_1,2_c:d_3,4_e:f="g";x={"p":2,"q":"Q"}' 58 ); 59 }); 60 61 g.test('stringifyQuery,multi_case').fn(t => { 62 t.expectQueryString( 63 new TestQueryMultiCase('a', ['b_1', '2_c'], ['d_3', '4_e'], { 64 f: 'g', 65 _pri1: 0, 66 a: 3, 67 _pri2: 1, 68 }), 69 'a:b_1,2_c:d_3,4_e:f="g";a=3;*' 70 ); 71 72 t.expectQueryString( 73 new TestQueryMultiCase('a', ['b_1', '2_c'], ['d_3', '4_e'], {}), 74 'a:b_1,2_c:d_3,4_e:*' 75 ); 76 }); 77 78 g.test('stringifyQuery,multi_test').fn(t => { 79 t.expectQueryString( 80 new TestQueryMultiTest('a', ['b_1', '2_c'], ['d_3', '4_e']), 81 'a:b_1,2_c:d_3,4_e,*' 82 ); 83 84 t.expectQueryString( 85 new TestQueryMultiTest('a', ['b_1', '2_c'], []), // 86 'a:b_1,2_c:*' 87 ); 88 }); 89 90 g.test('stringifyQuery,multi_file').fn(t => { 91 t.expectQueryString( 92 new TestQueryMultiFile('a', ['b_1', '2_c']), // 93 'a:b_1,2_c,*' 94 ); 95 96 t.expectQueryString( 97 new TestQueryMultiFile('a', []), // 98 'a:*' 99 ); 100 }); 101 102 g.test('relativeQueryString,equal_or_child').fn(t => { 103 // Depth difference = 0 104 t.expectRelativeQueryString( 105 new TestQueryMultiFile('a', []), // 106 new TestQueryMultiFile('a', []), // 107 '' 108 ); 109 t.expectRelativeQueryString( 110 new TestQueryMultiFile('a', ['b', 'c']), // 111 new TestQueryMultiFile('a', ['b', 'c']), // 112 '' 113 ); 114 t.expectRelativeQueryString( 115 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 116 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 117 '' 118 ); 119 t.expectRelativeQueryString( 120 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 121 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 122 '' 123 ); 124 t.expectRelativeQueryString( 125 new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 126 new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 127 '' 128 ); 129 130 // Depth difference = 1 131 t.expectRelativeQueryString( 132 new TestQueryMultiFile('a', []), // 133 new TestQueryMultiFile('a', ['b']), // 134 ':b,*' 135 ); 136 t.expectRelativeQueryString( 137 new TestQueryMultiFile('a', ['b']), // 138 new TestQueryMultiFile('a', ['b', 'c']), // 139 ',c,*' 140 ); 141 t.expectRelativeQueryString( 142 new TestQueryMultiFile('a', ['b', 'c']), // 143 new TestQueryMultiTest('a', ['b', 'c'], []), // 144 ':*' 145 ); 146 t.expectRelativeQueryString( 147 new TestQueryMultiTest('a', ['b', 'c'], []), // 148 new TestQueryMultiTest('a', ['b', 'c'], ['d']), // 149 ':d,*' 150 ); 151 t.expectRelativeQueryString( 152 new TestQueryMultiTest('a', ['b', 'c'], ['d']), // 153 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 154 ',e,*' 155 ); 156 t.expectRelativeQueryString( 157 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 158 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // 159 ':*' 160 ); 161 t.expectRelativeQueryString( 162 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // 163 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 164 ':f=0;*' 165 ); 166 t.expectRelativeQueryString( 167 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 168 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 169 ';g=1;*' 170 ); 171 t.expectRelativeQueryString( 172 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 173 new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 174 '' 175 ); 176 177 // Depth difference = 2 178 t.expectRelativeQueryString( 179 new TestQueryMultiFile('a', []), // 180 new TestQueryMultiFile('a', ['b', 'c']), // 181 ':b,c,*' 182 ); 183 t.expectRelativeQueryString( 184 new TestQueryMultiFile('a', ['b', 'c']), // 185 new TestQueryMultiTest('a', ['b', 'c'], ['d']), // 186 ':d,*' 187 ); 188 t.expectRelativeQueryString( 189 new TestQueryMultiTest('a', ['b', 'c'], ['d']), // 190 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // 191 ',e:*' 192 ); 193 t.expectRelativeQueryString( 194 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], {}), // 195 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 196 ':f=0;g=1;*' 197 ); 198 t.expectRelativeQueryString( 199 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 200 new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1, h: 2 }), // 201 ';h=2' 202 ); 203 // Depth difference = 2 204 t.expectRelativeQueryString( 205 new TestQueryMultiFile('a', ['b']), // 206 new TestQueryMultiTest('a', ['b', 'c'], []), // 207 ',c:*' 208 ); 209 t.expectRelativeQueryString( 210 new TestQueryMultiTest('a', ['b', 'c'], []), // 211 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 212 ':d,e,*' 213 ); 214 t.expectRelativeQueryString( 215 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 216 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 217 ':f=0;*' 218 ); 219 t.expectRelativeQueryString( 220 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 221 new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 222 ';g=1' 223 ); 224 225 // Depth difference = 4 226 t.expectRelativeQueryString( 227 new TestQueryMultiFile('a', []), // 228 new TestQueryMultiTest('a', ['b', 'c'], ['d']), // 229 ':b,c:d,*' 230 ); 231 t.expectRelativeQueryString( 232 new TestQueryMultiTest('a', ['b', 'c'], ['d']), // 233 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 234 ',e:f=0;g=1;*' 235 ); 236 // Depth difference = 4 237 t.expectRelativeQueryString( 238 new TestQueryMultiFile('a', ['b']), // 239 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 240 ',c:d,e,*' 241 ); 242 t.expectRelativeQueryString( 243 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']), // 244 new TestQuerySingleCase('a', ['b', 'c'], ['d', 'e'], { f: 0, g: 1 }), // 245 ':f=0;g=1' 246 ); 247 }); 248 249 g.test('relativeQueryString,unrelated').fn(t => { 250 t.shouldThrow('Error', () => { 251 relativeQueryString( 252 new TestQueryMultiFile('a', ['b', 'x']), // 253 new TestQueryMultiFile('a', ['b', 'c']) // 254 ); 255 }); 256 t.shouldThrow('Error', () => { 257 relativeQueryString( 258 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'x']), // 259 new TestQueryMultiTest('a', ['b', 'c'], ['d', 'e']) // 260 ); 261 }); 262 t.shouldThrow('Error', () => { 263 relativeQueryString( 264 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 0 }), // 265 new TestQueryMultiCase('a', ['b', 'c'], ['d', 'e'], { f: 1 }) // 266 ); 267 }); 268 });