1
2
3
4
5
6
7 package bidirule
8
9 import (
10 "golang.org/x/text/transform"
11 "golang.org/x/text/unicode/bidi"
12 )
13
14 var testCases = [][]ruleTest{
15
16
17 0: []ruleTest{{
18 in: "",
19 dir: bidi.LeftToRight,
20 }, {
21 in: "\x80",
22 dir: bidi.LeftToRight,
23 err: ErrInvalid,
24 n: 0,
25 }, {
26 in: "\xcc",
27 dir: bidi.LeftToRight,
28 err: ErrInvalid,
29 n: 0,
30 }, {
31 in: "abc\x80",
32 dir: bidi.LeftToRight,
33 err: ErrInvalid,
34 n: 3,
35 }, {
36 in: "abc\xcc",
37 dir: bidi.LeftToRight,
38 err: ErrInvalid,
39 n: 3,
40 }, {
41 in: "abc\xccdef",
42 dir: bidi.LeftToRight,
43 err: ErrInvalid,
44 n: 3,
45 }, {
46 in: "\xccdef",
47 dir: bidi.LeftToRight,
48 err: ErrInvalid,
49 n: 0,
50 }, {
51 in: strR + "\x80",
52 dir: bidi.RightToLeft,
53 err: ErrInvalid,
54 n: len(strR),
55 }, {
56 in: strR + "\xcc",
57 dir: bidi.RightToLeft,
58 err: ErrInvalid,
59 n: len(strR),
60 }, {
61 in: strAL + "\xcc" + strR,
62 dir: bidi.RightToLeft,
63 err: ErrInvalid,
64 n: len(strAL),
65 }, {
66 in: "\xcc" + strR,
67 dir: bidi.RightToLeft,
68 err: ErrInvalid,
69 n: 0,
70 }},
71
72
73
74
75 1: []ruleTest{{
76 in: strL,
77 dir: bidi.LeftToRight,
78 }, {
79 in: strR,
80 dir: bidi.RightToLeft,
81 }, {
82 in: strAL,
83 dir: bidi.RightToLeft,
84 }, {
85 in: strAN,
86 dir: bidi.RightToLeft,
87 err: ErrInvalid,
88 }, {
89 in: strEN,
90 dir: bidi.LeftToRight,
91 err: nil,
92 }, {
93 in: strES,
94 dir: bidi.LeftToRight,
95 err: nil,
96 }, {
97 in: strET,
98 dir: bidi.LeftToRight,
99 err: nil,
100 }, {
101 in: strCS,
102 dir: bidi.LeftToRight,
103 err: nil,
104 }, {
105 in: strNSM,
106 dir: bidi.LeftToRight,
107 err: nil,
108 }, {
109 in: strBN,
110 dir: bidi.LeftToRight,
111 err: nil,
112 }, {
113 in: strB,
114 dir: bidi.LeftToRight,
115 err: nil,
116 }, {
117 in: strS,
118 dir: bidi.LeftToRight,
119 err: nil,
120 }, {
121 in: strWS,
122 dir: bidi.LeftToRight,
123 err: nil,
124 }, {
125 in: strON,
126 dir: bidi.LeftToRight,
127 err: nil,
128 }, {
129 in: strEN + strR,
130 dir: bidi.RightToLeft,
131 err: ErrInvalid,
132 n: 3,
133 }, {
134 in: strES + strR,
135 dir: bidi.RightToLeft,
136 err: ErrInvalid,
137 n: 2,
138 }, {
139 in: strET + strR,
140 dir: bidi.RightToLeft,
141 err: ErrInvalid,
142 n: 1,
143 }, {
144 in: strCS + strR,
145 dir: bidi.RightToLeft,
146 err: ErrInvalid,
147 n: 1,
148 }, {
149 in: strNSM + strR,
150 dir: bidi.RightToLeft,
151 err: ErrInvalid,
152 n: 2,
153 }, {
154 in: strBN + strR,
155 dir: bidi.RightToLeft,
156 err: ErrInvalid,
157 n: 3,
158 }, {
159 in: strB + strR,
160 dir: bidi.RightToLeft,
161 err: ErrInvalid,
162 n: 3,
163 }, {
164 in: strS + strR,
165 dir: bidi.RightToLeft,
166 err: ErrInvalid,
167 n: 1,
168 }, {
169 in: strWS + strR,
170 dir: bidi.RightToLeft,
171 err: ErrInvalid,
172 n: 1,
173 }, {
174 in: strON + strR,
175 dir: bidi.RightToLeft,
176 err: ErrInvalid,
177 n: 1,
178 }},
179
180
181
182 2: []ruleTest{{
183 in: strR + strR + strAL,
184 dir: bidi.RightToLeft,
185 }, {
186 in: strR + strAL + strR,
187 dir: bidi.RightToLeft,
188 }, {
189 in: strR + strAN + strAL,
190 dir: bidi.RightToLeft,
191 }, {
192 in: strR + strEN + strR,
193 dir: bidi.RightToLeft,
194 }, {
195 in: strR + strES + strR,
196 dir: bidi.RightToLeft,
197 }, {
198 in: strR + strCS + strR,
199 dir: bidi.RightToLeft,
200 }, {
201 in: strR + strET + strAL,
202 dir: bidi.RightToLeft,
203 }, {
204 in: strR + strON + strR,
205 dir: bidi.RightToLeft,
206 }, {
207 in: strR + strBN + strR,
208 dir: bidi.RightToLeft,
209 }, {
210 in: strR + strNSM + strAL,
211 dir: bidi.RightToLeft,
212 }, {
213 in: strR + strL + strR,
214 dir: bidi.RightToLeft,
215 n: len(strR),
216 err: ErrInvalid,
217 }, {
218 in: strR + strB + strR,
219 dir: bidi.RightToLeft,
220 n: len(strR),
221 err: ErrInvalid,
222 }, {
223 in: strR + strS + strAL,
224 dir: bidi.RightToLeft,
225 n: len(strR),
226 err: ErrInvalid,
227 }, {
228 in: strR + strWS + strAL,
229 dir: bidi.RightToLeft,
230 n: len(strR),
231 err: ErrInvalid,
232 }, {
233 in: strAL + strR + strAL,
234 dir: bidi.RightToLeft,
235 }, {
236 in: strAL + strAL + strR,
237 dir: bidi.RightToLeft,
238 }, {
239 in: strAL + strAN + strAL,
240 dir: bidi.RightToLeft,
241 }, {
242 in: strAL + strEN + strR,
243 dir: bidi.RightToLeft,
244 }, {
245 in: strAL + strES + strR,
246 dir: bidi.RightToLeft,
247 }, {
248 in: strAL + strCS + strR,
249 dir: bidi.RightToLeft,
250 }, {
251 in: strAL + strET + strAL,
252 dir: bidi.RightToLeft,
253 }, {
254 in: strAL + strON + strR,
255 dir: bidi.RightToLeft,
256 }, {
257 in: strAL + strBN + strR,
258 dir: bidi.RightToLeft,
259 }, {
260 in: strAL + strNSM + strAL,
261 dir: bidi.RightToLeft,
262 }, {
263 in: strAL + strL + strR,
264 dir: bidi.RightToLeft,
265 n: len(strAL),
266 err: ErrInvalid,
267 }, {
268 in: strAL + strB + strR,
269 dir: bidi.RightToLeft,
270 n: len(strAL),
271 err: ErrInvalid,
272 }, {
273 in: strAL + strS + strAL,
274 dir: bidi.RightToLeft,
275 n: len(strAL),
276 err: ErrInvalid,
277 }, {
278 in: strAL + strWS + strAL,
279 dir: bidi.RightToLeft,
280 n: len(strAL),
281 err: ErrInvalid,
282 }},
283
284
285
286
287 3: []ruleTest{{
288 in: strR + strNSM,
289 dir: bidi.RightToLeft,
290 }, {
291 in: strR + strR,
292 dir: bidi.RightToLeft,
293 }, {
294 in: strR + strAL + strNSM,
295 dir: bidi.RightToLeft,
296 }, {
297 in: strR + strEN + strNSM + strNSM,
298 dir: bidi.RightToLeft,
299 }, {
300 in: strR + strAN,
301 dir: bidi.RightToLeft,
302 }, {
303 in: strR + strES + strNSM,
304 dir: bidi.RightToLeft,
305 n: len(strR + strES + strNSM),
306 err: ErrInvalid,
307 }, {
308 in: strR + strCS + strNSM + strNSM,
309 dir: bidi.RightToLeft,
310 n: len(strR + strCS + strNSM + strNSM),
311 err: ErrInvalid,
312 }, {
313 in: strR + strET,
314 dir: bidi.RightToLeft,
315 n: len(strR + strET),
316 err: ErrInvalid,
317 }, {
318 in: strR + strON + strNSM,
319 dir: bidi.RightToLeft,
320 n: len(strR + strON + strNSM),
321 err: ErrInvalid,
322 }, {
323 in: strR + strBN + strNSM + strNSM,
324 dir: bidi.RightToLeft,
325 n: len(strR + strBN + strNSM + strNSM),
326 err: ErrInvalid,
327 }, {
328 in: strR + strL + strNSM,
329 dir: bidi.RightToLeft,
330 n: len(strR),
331 err: ErrInvalid,
332 }, {
333 in: strR + strB + strNSM + strNSM,
334 dir: bidi.RightToLeft,
335 n: len(strR),
336 err: ErrInvalid,
337 }, {
338 in: strR + strS,
339 dir: bidi.RightToLeft,
340 n: len(strR),
341 err: ErrInvalid,
342 }, {
343 in: strR + strWS,
344 dir: bidi.RightToLeft,
345 n: len(strR),
346 err: ErrInvalid,
347 }, {
348 in: strAL + strNSM,
349 dir: bidi.RightToLeft,
350 }, {
351 in: strAL + strR,
352 dir: bidi.RightToLeft,
353 }, {
354 in: strAL + strAL + strNSM,
355 dir: bidi.RightToLeft,
356 }, {
357 in: strAL + strEN + strNSM + strNSM,
358 dir: bidi.RightToLeft,
359 }, {
360 in: strAL + strAN,
361 dir: bidi.RightToLeft,
362 }, {
363 in: strAL + strES + strNSM,
364 dir: bidi.RightToLeft,
365 n: len(strAL + strES + strNSM),
366 err: ErrInvalid,
367 }, {
368 in: strAL + strCS + strNSM + strNSM,
369 dir: bidi.RightToLeft,
370 n: len(strAL + strCS + strNSM + strNSM),
371 err: ErrInvalid,
372 }, {
373 in: strAL + strET,
374 dir: bidi.RightToLeft,
375 n: len(strAL + strET),
376 err: ErrInvalid,
377 }, {
378 in: strAL + strON + strNSM,
379 dir: bidi.RightToLeft,
380 n: len(strAL + strON + strNSM),
381 err: ErrInvalid,
382 }, {
383 in: strAL + strBN + strNSM + strNSM,
384 dir: bidi.RightToLeft,
385 n: len(strAL + strBN + strNSM + strNSM),
386 err: ErrInvalid,
387 }, {
388 in: strAL + strL + strNSM,
389 dir: bidi.RightToLeft,
390 n: len(strAL),
391 err: ErrInvalid,
392 }, {
393 in: strAL + strB + strNSM + strNSM,
394 dir: bidi.RightToLeft,
395 n: len(strAL),
396 err: ErrInvalid,
397 }, {
398 in: strAL + strS,
399 dir: bidi.RightToLeft,
400 n: len(strAL),
401 err: ErrInvalid,
402 }, {
403 in: strAL + strWS,
404 dir: bidi.RightToLeft,
405 n: len(strAL),
406 err: ErrInvalid,
407 }},
408
409
410
411 4: []ruleTest{{
412 in: strR + strEN + strAN,
413 dir: bidi.RightToLeft,
414 n: len(strR + strEN),
415 err: ErrInvalid,
416 }, {
417 in: strR + strAN + strEN + strNSM,
418 dir: bidi.RightToLeft,
419 n: len(strR + strAN),
420 err: ErrInvalid,
421 }, {
422 in: strAL + strEN + strAN,
423 dir: bidi.RightToLeft,
424 n: len(strAL + strEN),
425 err: ErrInvalid,
426 }, {
427 in: strAL + strAN + strEN + strNSM,
428 dir: bidi.RightToLeft,
429 n: len(strAL + strAN),
430 err: ErrInvalid,
431 }},
432
433
434
435 5: []ruleTest{{
436 in: strL + strL + strL,
437 dir: bidi.LeftToRight,
438 }, {
439 in: strL + strEN + strL,
440 dir: bidi.LeftToRight,
441 }, {
442 in: strL + strES + strL,
443 dir: bidi.LeftToRight,
444 }, {
445 in: strL + strCS + strL,
446 dir: bidi.LeftToRight,
447 }, {
448 in: strL + strET + strL,
449 dir: bidi.LeftToRight,
450 }, {
451 in: strL + strON + strL,
452 dir: bidi.LeftToRight,
453 }, {
454 in: strL + strBN + strL,
455 dir: bidi.LeftToRight,
456 }, {
457 in: strL + strNSM + strL,
458 dir: bidi.LeftToRight,
459 }, {
460 in: strL + strR + strL,
461 dir: bidi.RightToLeft,
462 n: len(strL),
463 err: ErrInvalid,
464 }, {
465 in: strL + strAL + strL,
466 dir: bidi.RightToLeft,
467 n: len(strL),
468 err: ErrInvalid,
469 }, {
470 in: strL + strAN + strL,
471 dir: bidi.RightToLeft,
472 n: len(strL),
473 err: ErrInvalid,
474 }, {
475 in: strL + strB + strL,
476 dir: bidi.LeftToRight,
477 n: len(strL + strAN + strL),
478 err: nil,
479 }, {
480 in: strL + strB + strL + strR,
481 dir: bidi.RightToLeft,
482 n: len(strL + strB + strL),
483 err: ErrInvalid,
484 }, {
485 in: strL + strS + strL,
486 dir: bidi.LeftToRight,
487 n: len(strL + strS + strL),
488 err: nil,
489 }, {
490 in: strL + strS + strL + strR,
491 dir: bidi.RightToLeft,
492 n: len(strL + strS + strL),
493 err: ErrInvalid,
494 }, {
495 in: strL + strWS + strL,
496 dir: bidi.LeftToRight,
497 n: len(strL + strWS + strL),
498 err: nil,
499 }, {
500 in: strL + strWS + strL + strR,
501 dir: bidi.RightToLeft,
502 n: len(strL + strWS + strL),
503 err: ErrInvalid,
504 }},
505
506
507
508
509 6: []ruleTest{{
510 in: strL,
511 dir: bidi.LeftToRight,
512 }, {
513 in: strL + strNSM,
514 dir: bidi.LeftToRight,
515 }, {
516 in: strL + strNSM + strNSM,
517 dir: bidi.LeftToRight,
518 }, {
519 in: strL + strEN,
520 dir: bidi.LeftToRight,
521 }, {
522 in: strL + strEN + strNSM,
523 dir: bidi.LeftToRight,
524 }, {
525 in: strL + strEN + strNSM + strNSM,
526 dir: bidi.LeftToRight,
527 }, {
528 in: strL + strES,
529 dir: bidi.LeftToRight,
530 n: len(strL + strES),
531 err: nil,
532 }, {
533 in: strL + strES + strR,
534 dir: bidi.RightToLeft,
535 n: len(strL + strES),
536 err: ErrInvalid,
537 }, {
538 in: strL + strCS,
539 dir: bidi.LeftToRight,
540 n: len(strL + strCS),
541 err: nil,
542 }, {
543 in: strL + strCS + strR,
544 dir: bidi.RightToLeft,
545 n: len(strL + strCS),
546 err: ErrInvalid,
547 }, {
548 in: strL + strET,
549 dir: bidi.LeftToRight,
550 n: len(strL + strET),
551 err: nil,
552 }, {
553 in: strL + strET + strR,
554 dir: bidi.RightToLeft,
555 n: len(strL + strET),
556 err: ErrInvalid,
557 }, {
558 in: strL + strON,
559 dir: bidi.LeftToRight,
560 n: len(strL + strON),
561 err: nil,
562 }, {
563 in: strL + strON + strR,
564 dir: bidi.RightToLeft,
565 n: len(strL + strON),
566 err: ErrInvalid,
567 }, {
568 in: strL + strBN,
569 dir: bidi.LeftToRight,
570 n: len(strL + strBN),
571 err: nil,
572 }, {
573 in: strL + strBN + strR,
574 dir: bidi.RightToLeft,
575 n: len(strL + strBN),
576 err: ErrInvalid,
577 }, {
578 in: strL + strR,
579 dir: bidi.RightToLeft,
580 n: len(strL),
581 err: ErrInvalid,
582 }, {
583 in: strL + strAL,
584 dir: bidi.RightToLeft,
585 n: len(strL),
586 err: ErrInvalid,
587 }, {
588 in: strL + strAN,
589 dir: bidi.RightToLeft,
590 n: len(strL),
591 err: ErrInvalid,
592 }, {
593 in: strL + strB,
594 dir: bidi.LeftToRight,
595 n: len(strL + strB),
596 err: nil,
597 }, {
598 in: strL + strB + strR,
599 dir: bidi.RightToLeft,
600 n: len(strL + strB),
601 err: ErrInvalid,
602 }, {
603 in: strL + strB,
604 dir: bidi.LeftToRight,
605 n: len(strL + strB),
606 err: nil,
607 }, {
608 in: strL + strB + strR,
609 dir: bidi.RightToLeft,
610 n: len(strL + strB),
611 err: ErrInvalid,
612 }, {
613 in: strL + strB,
614 dir: bidi.LeftToRight,
615 n: len(strL + strB),
616 err: nil,
617 }, {
618 in: strL + strB + strR,
619 dir: bidi.RightToLeft,
620 n: len(strL + strB),
621 err: ErrInvalid,
622 }},
623
624
625 9: []ruleTest{{
626 in: "e\u0301",
627 dir: bidi.LeftToRight,
628
629 pSrc: 2,
630 nSrc: 1,
631 err0: transform.ErrShortSrc,
632 }, {
633 in: "e\u1000f",
634 dir: bidi.LeftToRight,
635
636 pSrc: 3,
637 nSrc: 1,
638 err0: transform.ErrShortSrc,
639 }, {
640
641 in: strR + "ab",
642 dir: bidi.RightToLeft,
643 n: len(strR),
644 err: ErrInvalid,
645
646 pSrc: len(strR) + 1,
647 nSrc: len(strR),
648 err0: ErrInvalid,
649 }, {
650
651 in: "abcdefghij",
652 dir: bidi.LeftToRight,
653
654 pSrc: 10,
655 szDst: 5,
656 nSrc: 5,
657 err0: transform.ErrShortDst,
658 }, {
659
660 in: "e\u0301",
661 dir: bidi.LeftToRight,
662
663 pSrc: 3,
664 szDst: 2,
665 nSrc: 1,
666 err0: transform.ErrShortDst,
667 }},
668 }
669
View as plain text