@@ -64,6 +64,26 @@ ruleTester.run('interface', rule, {
64
64
{ code : "interface U {1:T; '11':T; A:T; 2?:T;}" , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : true } ] } ,
65
65
{ code : "interface U {'Z':T; À:T; è:T; '#'?:T;}" , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : true } ] } ,
66
66
67
+ // asc, required
68
+ { code : 'interface U {_:T; b:T; a?:T;} // asc, natural, insensitive, required' , options : [ 'asc' , { requiredFirst : true } ] } ,
69
+ { code : 'interface U {a:T; c:T; b?:T;}' , options : [ 'asc' , { requiredFirst : true } ] } ,
70
+ { code : 'interface U {b:T; b_:T; a?:T;}' , options : [ 'asc' , { requiredFirst : true } ] } ,
71
+ { code : 'interface U {C:T; c:T; b_?:T;}' , options : [ 'asc' , { requiredFirst : true } ] } ,
72
+ { code : 'interface U {1:T; 11:T; 9:T; 111?:T;}' , options : [ 'asc' , { requiredFirst : true } ] } ,
73
+ { code : 'interface U {$:T; _:T; A?:T; a?:T;}' , options : [ 'asc' , { requiredFirst : true } ] } ,
74
+ { code : "interface U {10:T; '11':T; 1?:T; 12?:T; 2?:T;}" , options : [ 'asc' , { requiredFirst : true } ] } ,
75
+ { code : "interface U {'Z':T; À:T; è:T; '#'?:T;}" , options : [ 'asc' , { requiredFirst : true } ] } ,
76
+
77
+ // asc, natural, insensitive, not-required
78
+ { code : 'interface U {_:T; a?:T; b:T;} // asc, natural, insensitive, not-required' , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
79
+ { code : 'interface U {a:T; b?:T; c:T;}' , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
80
+ { code : 'interface U {a?:T; b:T; b_:T;}' , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
81
+ { code : 'interface U {b_?:T; C:T; c:T;}' , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
82
+ { code : 'interface U {b_?:T; c:T; C:T;}' , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
83
+ { code : 'interface U {$:T; _:T; A?:T; a?:T;}' , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
84
+ { code : "interface U {1:T; 2?:T; '11':T; A:T;}" , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
85
+ { code : "interface U {'#'?:T; 'Z':T; À:T; è:T;}" , options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
86
+
67
87
// desc
68
88
{ code : 'interface U {b:T; a:T; _:T;} // desc' , options : [ 'desc' ] } ,
69
89
{ code : 'interface U {c:T; b:T; a:T;}' , options : [ 'desc' ] } ,
@@ -112,6 +132,26 @@ ruleTester.run('interface', rule, {
112
132
{ code : "interface U { A:T; '11':T; 1:T; 2?:T;}" , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : true } ] } ,
113
133
{ code : "interface U {è:T; 'Z':T; À?:T; '#'?:T;}" , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : true } ] } ,
114
134
135
+ // desc, required
136
+ { code : 'interface U {b:T; _:T; a?:T;} // desc, natural, insensitive, required' , options : [ 'desc' , { requiredFirst : true } ] } ,
137
+ { code : 'interface U {c:T; a:T; b?:T;}' , options : [ 'desc' , { requiredFirst : true } ] } ,
138
+ { code : 'interface U {b_:T; b:T; a?:T;}' , options : [ 'desc' , { requiredFirst : true } ] } ,
139
+ { code : 'interface U {c:T; C:T; b_?:T;}' , options : [ 'desc' , { requiredFirst : true } ] } ,
140
+ { code : 'interface U {9:T; 11:T; 1:T; 111?:T;}' , options : [ 'desc' , { requiredFirst : true } ] } ,
141
+ { code : 'interface U {_:T; $:T; a?:T; A?:T;}' , options : [ 'desc' , { requiredFirst : true } ] } ,
142
+ { code : "interface U {'11':T; 10:T; 2?:T; 12?:T; 1?:T;}" , options : [ 'desc' , { requiredFirst : true } ] } ,
143
+ { code : "interface U {è:T; À:T; 'Z':T; '#'?:T;}" , options : [ 'desc' , { requiredFirst : true } ] } ,
144
+
145
+ // desc, natural, insensitive, not-required
146
+ { code : 'interface U {b:T; a?:T; _:T;} // desc, natural, insensitive, not-required' , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
147
+ { code : 'interface U {c:T; b?:T; a:T;}' , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
148
+ { code : 'interface U {b_:T; b:T; a?:T;}' , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
149
+ { code : 'interface U {c:T; C:T; b_?:T;}' , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
150
+ { code : 'interface U {C:T; c:T; b_?:T;}' , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
151
+ { code : 'interface U {a?:T; A?:T; _:T; $:T;}' , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
152
+ { code : "interface U {A:T; '11':T; 2?:T; 1:T;}" , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
153
+ { code : "interface U {è:T; À:T; 'Z':T; '#'?:T;}" , options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] } ,
154
+
115
155
// index signatures
116
156
{ code : 'interface U<T> { [nkey: number]: T; [skey: string]: T; $: T; A: T; _: T; a: T; }' , options : [ 'asc' ] } ,
117
157
{ code : 'interface U<T> { a: T; _: T; A: T; $: T; [skey: string]: T; [nkey: number]: T; }' , options : [ 'desc' ] } ,
@@ -400,6 +440,56 @@ ruleTester.run('interface', rule, {
400
440
output : "interface U {'Z':T; À:T; è:T; '#'?:T;}" ,
401
441
} ,
402
442
443
+ // asc, natural, insensitive, not-required
444
+ {
445
+ code : 'interface U {_:T; b:T; a?:T;} // asc, natural, insensitive, not-required' ,
446
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
447
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. 'a' should be before 'b'." ] ,
448
+ output : 'interface U {_:T; a?:T; b:T;} // asc, natural, insensitive, not-required' ,
449
+ } ,
450
+ {
451
+ code : 'interface U {b?:T; a:T; c:T;}' ,
452
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
453
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. 'a' should be before 'b'." ] ,
454
+ output : 'interface U {a:T; b?:T; c:T;}' ,
455
+ } ,
456
+ {
457
+ code : 'interface U {b:T; a?:T; b_:T;}' ,
458
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
459
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. 'a' should be before 'b'." ] ,
460
+ output : 'interface U {a?:T; b:T; b_:T;}' ,
461
+ } ,
462
+ {
463
+ code : 'interface U {C:T; c:T; b_?:T;}' ,
464
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
465
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. 'b_' should be before 'c'." ] ,
466
+ output : 'interface U {b_?:T; c:T; C:T;}' ,
467
+ } ,
468
+ {
469
+ code : 'interface U {C:T; b_?:T; c:T;}' ,
470
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
471
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. 'b_' should be before 'C'." ] ,
472
+ output : 'interface U {b_?:T; C:T; c:T;}' ,
473
+ } ,
474
+ {
475
+ code : 'interface U {$:T; A?:T; _:T; a?:T;}' ,
476
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
477
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. '_' should be before 'A'." ] ,
478
+ output : 'interface U {$:T; _:T; A?:T; a?:T;}' ,
479
+ } ,
480
+ {
481
+ code : "interface U {1:T; '11':T; 2?:T; A:T;}" ,
482
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
483
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. '2' should be before '11'." ] ,
484
+ output : "interface U {1:T; 2?:T; '11':T; A:T;}" ,
485
+ } ,
486
+ {
487
+ code : "interface U {'Z':T; À:T; '#'?:T; è:T;}" ,
488
+ options : [ 'asc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
489
+ errors : [ "Expected interface keys to be in natural insensitive ascending order. '#' should be before 'À'." ] ,
490
+ output : "interface U {'#'?:T; À:T; 'Z':T; è:T;}" ,
491
+ } ,
492
+
403
493
// desc
404
494
{
405
495
code : 'interface U {a:T; _:T; b:T;} // desc' ,
@@ -652,6 +742,71 @@ ruleTester.run('interface', rule, {
652
742
output : "interface U {è:T; 'Z':T; '#'?:T; À?:T;}" ,
653
743
} ,
654
744
745
+ // desc, natural, insensitive, not-required
746
+ {
747
+ code : 'interface U {_:T; a?:T; b:T;} // desc, natural, insensitive, not-required' ,
748
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
749
+ errors : [
750
+ "Expected interface keys to be in natural insensitive descending order. 'a' should be before '_'." ,
751
+ "Expected interface keys to be in natural insensitive descending order. 'b' should be before 'a'." ,
752
+ ] ,
753
+ output : 'interface U {b:T; a?:T; _:T;} // desc, natural, insensitive, not-required' ,
754
+ } ,
755
+ {
756
+ code : 'interface U {a?:T; b:T; _:T;}' ,
757
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
758
+ errors : [ "Expected interface keys to be in natural insensitive descending order. 'b' should be before 'a'." ] ,
759
+ output : 'interface U {b:T; a?:T; _:T;}' ,
760
+ } ,
761
+ {
762
+ code : 'interface U {b:T; b_:T; a?:T;}' ,
763
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
764
+ errors : [ "Expected interface keys to be in natural insensitive descending order. 'b_' should be before 'b'." ] ,
765
+ output : 'interface U {b_:T; b:T; a?:T;}' ,
766
+ } ,
767
+ {
768
+ code : 'interface U {c:T; b_?:T; C:T;}' ,
769
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
770
+ errors : [ "Expected interface keys to be in natural insensitive descending order. 'C' should be before 'b_'." ] ,
771
+ output : 'interface U {c:T; C:T; b_?:T;}' ,
772
+ } ,
773
+ {
774
+ code : 'interface U {b_?:T; C:T; c:T;}' ,
775
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
776
+ errors : [ "Expected interface keys to be in natural insensitive descending order. 'C' should be before 'b_'." ] ,
777
+ output : 'interface U {C:T; b_?:T; c:T;}' ,
778
+ } ,
779
+ {
780
+ code : 'interface U {_:T; a?:T; $:T; A?:T;}' ,
781
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
782
+ errors : [
783
+ "Expected interface keys to be in natural insensitive descending order. 'a' should be before '_'." ,
784
+ "Expected interface keys to be in natural insensitive descending order. 'A' should be before '$'." ,
785
+ ] ,
786
+ output : 'interface U {a?:T; _:T; $:T; A?:T;}' ,
787
+ } ,
788
+ {
789
+ code : "interface U {2?:T; A:T; 1:T; '11':T;}" ,
790
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
791
+ errors : [
792
+ "Expected interface keys to be in natural insensitive descending order. 'A' should be before '2'." ,
793
+ "Expected interface keys to be in natural insensitive descending order. '11' should be before '1'." ,
794
+ ] ,
795
+ output : "interface U {A:T; 2?:T; 1:T; '11':T;}" ,
796
+ } ,
797
+ {
798
+ code : "interface U {è:T; 'Z':T; '#'?:T; À?:T;}" ,
799
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
800
+ errors : [ "Expected interface keys to be in natural insensitive descending order. 'À' should be before '#'." ] ,
801
+ output : "interface U {è:T; À?:T; '#'?:T; 'Z':T;}" ,
802
+ } ,
803
+ {
804
+ code : "interface U {À?:T; 'Z':T; '#'?:T; è:T;}" ,
805
+ options : [ 'desc' , { natural : true , caseSensitive : false , requiredFirst : false } ] ,
806
+ errors : [ "Expected interface keys to be in natural insensitive descending order. 'è' should be before '#'." ] ,
807
+ output : "interface U {è:T; 'Z':T; '#'?:T; À?:T;}" ,
808
+ } ,
809
+
655
810
// index signatures
656
811
{
657
812
code : 'interface U<T> { A: T; [skey: string]: T; _: T; }' ,
0 commit comments