blob: d27adbc4b51dc4e7da1ed5c347e3ae02c697ba13 [file] [log] [blame]
Bram Moolenaar6b643942017-03-05 19:44:06 +01001" Test for cinoptions and cindent
Bram Moolenaar6b643942017-03-05 19:44:06 +01002
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003def Test_cino_hash()
4 # Test that curbuf->b_ind_hash_comment is correctly reset
Bram Moolenaar6b643942017-03-05 19:44:06 +01005 new
6 setlocal cindent cinoptions=#1
7 setlocal cinoptions=
Bram Moolenaar7e569d02022-05-21 21:30:50 +01008 setline(1, ["#include <iostream>"])
9 cursor(1, 1)
Bram Moolenaar6b643942017-03-05 19:44:06 +010010 norm! o#include
Bram Moolenaar7e569d02022-05-21 21:30:50 +010011 assert_equal(["#include <iostream>", "#include"], getline(1, 2))
12
Bram Moolenaar6b643942017-03-05 19:44:06 +010013 bwipe!
Bram Moolenaar7e569d02022-05-21 21:30:50 +010014enddef
Bram Moolenaar7720ba82017-03-08 22:19:26 +010015
Bram Moolenaar7e569d02022-05-21 21:30:50 +010016def Test_cino_extern_c()
17 # Test for cino-E
Bram Moolenaar7720ba82017-03-08 22:19:26 +010018
Bram Moolenaar7e569d02022-05-21 21:30:50 +010019 var without_ind =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020020 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 int func_a(void);
24 #ifdef __cplusplus
25 }
26 #endif
Bram Moolenaarc79745a2019-05-20 22:12:34 +020027 [CODE]
Bram Moolenaar7720ba82017-03-08 22:19:26 +010028
Bram Moolenaar7e569d02022-05-21 21:30:50 +010029 var with_ind =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020030 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 int func_a(void);
34 #ifdef __cplusplus
35 }
36 #endif
Bram Moolenaarc79745a2019-05-20 22:12:34 +020037 [CODE]
Bram Moolenaar7720ba82017-03-08 22:19:26 +010038 new
39 setlocal cindent cinoptions=E0
Bram Moolenaar7e569d02022-05-21 21:30:50 +010040 setline(1, without_ind)
41 feedkeys("gg=G", 'tx')
42 assert_equal(with_ind, getline(1, '$'))
Bram Moolenaar7720ba82017-03-08 22:19:26 +010043
44 setlocal cinoptions=E-s
Bram Moolenaar7e569d02022-05-21 21:30:50 +010045 setline(1, with_ind)
46 feedkeys("gg=G", 'tx')
47 assert_equal(without_ind, getline(1, '$'))
Bram Moolenaar7720ba82017-03-08 22:19:26 +010048
49 setlocal cinoptions=Es
Bram Moolenaar7e569d02022-05-21 21:30:50 +010050 var tests = [
Bram Moolenaar7720ba82017-03-08 22:19:26 +010051 \ ['recognized', ['extern "C" {'], "\t\t;"],
52 \ ['recognized', ['extern "C++" {'], "\t\t;"],
53 \ ['recognized', ['extern /* com */ "C"{'], "\t\t;"],
54 \ ['recognized', ['extern"C"{'], "\t\t;"],
55 \ ['recognized', ['extern "C"', '{'], "\t\t;"],
56 \ ['not recognized', ['extern {'], "\t;"],
57 \ ['not recognized', ['extern /*"C"*/{'], "\t;"],
58 \ ['not recognized', ['extern "C" //{'], ";"],
59 \ ['not recognized', ['extern "C" /*{*/'], ";"],
60 \ ]
61
62 for pair in tests
Bram Moolenaar7e569d02022-05-21 21:30:50 +010063 var lines = pair[1]
64 setline(1, lines)
65 feedkeys(len(lines) .. "Go;", 'tx')
66 assert_equal(pair[2], getline(len(lines) + 1),
67 'Failed for "' .. string(lines) .. '"')
Bram Moolenaar7720ba82017-03-08 22:19:26 +010068 endfor
69
Bram Moolenaar7720ba82017-03-08 22:19:26 +010070 bwipe!
Bram Moolenaar7e569d02022-05-21 21:30:50 +010071enddef
Bram Moolenaar7720ba82017-03-08 22:19:26 +010072
Bram Moolenaar7e569d02022-05-21 21:30:50 +010073def Test_cindent_rawstring()
Bram Moolenaardde81312017-08-26 17:49:01 +020074 new
75 setl cindent
Bram Moolenaar7e569d02022-05-21 21:30:50 +010076 feedkeys("i" ..
77 \ "int main() {\<CR>" ..
78 \ "R\"(\<CR>" ..
79 \ ")\";\<CR>" ..
Bram Moolenaardde81312017-08-26 17:49:01 +020080 \ "statement;\<Esc>", "x")
Bram Moolenaar7e569d02022-05-21 21:30:50 +010081 assert_equal("\tstatement;", getline(line('.')))
Bram Moolenaare2e69e42017-09-02 20:30:35 +020082
Bram Moolenaar7e569d02022-05-21 21:30:50 +010083 bwipe!
84enddef
85
86def Test_cindent_expr()
Bram Moolenaare2e69e42017-09-02 20:30:35 +020087 new
Bram Moolenaar7e569d02022-05-21 21:30:50 +010088 def g:MyIndentFunction(): number
Bram Moolenaare2e69e42017-09-02 20:30:35 +020089 return v:lnum == 1 ? shiftwidth() : 0
Bram Moolenaar7e569d02022-05-21 21:30:50 +010090 enddef
91 setl expandtab sw=8 indentkeys+=; indentexpr=g:MyIndentFunction()
92 var testinput =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020093 var_a = something()
94 b = something()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020095 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +010096 setline(1, testinput)
97 cursor(1, 1)
98 feedkeys("^\<c-v>j$A;\<esc>", 'tnix')
99 var expected =<< [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200100 var_a = something();
101b = something();
102[CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100103 assert_equal(expected, getline(1, '$'))
Bram Moolenaare2e69e42017-09-02 20:30:35 +0200104
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100105 :%d
106 testinput =<< [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200107 var_a = something()
108 b = something()
109[CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100110 setline(1, testinput)
111 cursor(1, 1)
112 feedkeys("^\<c-v>j$A;\<esc>", 'tnix')
113 expected =<< [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200114 var_a = something();
115 b = something()
116[CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100117 assert_equal(expected, getline(1, '$'))
Bram Moolenaare2e69e42017-09-02 20:30:35 +0200118
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100119 delfunc g:MyIndentFunction
120
121 bwipe!
122enddef
123
124def Test_cindent_func()
Bram Moolenaar17aca702019-05-16 22:24:55 +0200125 new
126 setlocal cindent
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100127 setline(1, ['int main(void)', '{', 'return 0;', '}'])
128 assert_equal(-1, cindent(0))
129 assert_equal(&sw, 3->cindent())
130 assert_equal(-1, cindent(line('$') + 1))
Bram Moolenaar17aca702019-05-16 22:24:55 +0200131
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100132 bwipe!
133enddef
134
135def Test_cindent_1()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +0200136 new
137 setl cindent ts=4 sw=4
138 setl cino& sts&
139
Bram Moolenaar7e569d02022-05-21 21:30:50 +0100140 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +0200141 /* start of AUTO matically checked vim: set ts=4 : */
142 {
143 if (test)
144 cmd1;
145 cmd2;
146 }
147
148 {
149 if (test)
150 cmd1;
151 else
152 cmd2;
153 }
154
155 {
156 if (test)
157 {
158 cmd1;
159 cmd2;
160 }
161 }
162
163 {
164 if (test)
165 {
166 cmd1;
167 else
168 }
169 }
170
171 {
172 while (this)
173 if (test)
174 cmd1;
175 cmd2;
176 }
177
178 {
179 while (this)
180 if (test)
181 cmd1;
182 else
183 cmd2;
184 }
185
186 {
187 if (test)
188 {
189 cmd;
190 }
191
192 if (test)
193 cmd;
194 }
195
196 {
197 if (test) {
198 cmd;
199 }
200
201 if (test) cmd;
202 }
203
204 {
205 cmd1;
206 for (blah)
207 while (this)
208 if (test)
209 cmd2;
210 cmd3;
211 }
212
213 {
214 cmd1;
215 for (blah)
216 while (this)
217 if (test)
218 cmd2;
219 cmd3;
220
221 if (test)
222 {
223 cmd1;
224 cmd2;
225 cmd3;
226 }
227 }
228
229
230 /* Test for 'cindent' do/while mixed with if/else: */
231
232 {
233 do
234 if (asdf)
235 asdfasd;
236 while (cond);
237
238 do
239 if (asdf)
240 while (asdf)
241 asdf;
242 while (asdf);
243 }
244
245 /* Test for 'cindent' with two ) on a continuation line */
246 {
247 if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
248 aal;sdkjf ( ;asldfkja;sldfk
249 al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
250 line up here;
251 }
252
253
254 /* C++ tests: */
255
256 // foo() these three lines should remain in column 0
257 // {
258 // }
259
260 /* Test for continuation and unterminated lines: */
261 {
262 i = 99 + 14325 +
263 21345 +
264 21345 +
265 21345 + ( 21345 +
266 21345) +
267 2345 +
268 1234;
269 c = 1;
270 }
271
272 /*
273 testje for indent with empty line
274
275 here */
276
277 {
278 if (testing &&
279 not a joke ||
280 line up here)
281 hay;
282 if (testing &&
283 (not a joke || testing
284 )line up here)
285 hay;
286 if (testing &&
287 (not a joke || testing
288 line up here))
289 hay;
290 }
291
292
293 {
294 switch (c)
295 {
296 case xx:
297 do
298 if (asdf)
299 do
300 asdfasdf;
301 while (asdf);
302 else
303 asdfasdf;
304 while (cond);
305 case yy:
306 case xx:
307 case zz:
308 testing;
309 }
310 }
311
312 {
313 if (cond) {
314 foo;
315 }
316 else
317 {
318 bar;
319 }
320 }
321
322 {
323 if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
324 alsdkfj (asldk;fj
325 awith cino=(0 ;lf this one goes to below the paren with ==
326 ;laksjfd ;lsakdjf ;alskdf asd)
327 asdfasdf;)))
328 asdfasdf;
329 }
330
331 int
332 func(a, b)
333 int a;
334 int c;
335 {
336 if (c1 && (c2 ||
337 c3))
338 foo;
339 if (c1 &&
340 (c2 || c3)
341 )
342 }
343
344 {
345 while (asd)
346 {
347 if (asdf)
348 if (test)
349 if (that)
350 {
351 if (asdf)
352 do
353 cdasd;
354 while (as
355 df);
356 }
357 else
358 if (asdf)
359 asdf;
360 else
361 asdf;
362 asdf;
363 }
364 }
365
366 {
367 s = "/*"; b = ';'
368 s = "/*"; b = ';';
369 a = b;
370 }
371
372 {
373 switch (a)
374 {
375 case a:
376 switch (t)
377 {
378 case 1:
379 cmd;
380 break;
381 case 2:
382 cmd;
383 break;
384 }
385 cmd;
386 break;
387 case b:
388 {
389 int i;
390 cmd;
391 }
392 break;
393 case c: {
394 int i;
395 cmd;
396 }
397 case d: if (cond &&
398 test) { /* this line doesn't work right */
399 int i;
400 cmd;
401 }
402 break;
403 }
404 }
405
406 {
407 if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
408 (bp_to->b_p_initialized ||
409 (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
410 return;
411 label :
412 asdf = asdf ?
413 asdf : asdf;
414 asdf = asdf ?
415 asdf: asdf;
416 }
417
418 /* Special Comments : This function has the added complexity (compared */
419 /* : to addtolist) of having to check for a detail */
420 /* : texture and add that to the list first. */
421
422 char *(array[100]) = {
423 "testje",
424 "foo",
425 "bar",
426 }
427
428 enum soppie
429 {
430 yes = 0,
431 no,
432 maybe
433 };
434
435 typedef enum soppie
436 {
437 yes = 0,
438 no,
439 maybe
440 };
441
442 static enum
443 {
444 yes = 0,
445 no,
446 maybe
447 } soppie;
448
449 public static enum
450 {
451 yes = 0,
452 no,
453 maybe
454 } soppie;
455
456 static private enum
457 {
458 yes = 0,
459 no,
460 maybe
461 } soppie;
462
463 {
464 int a,
465 b;
466 }
467
468 {
469 struct Type
470 {
471 int i;
472 char *str;
473 } var[] =
474 {
475 0, "zero",
476 1, "one",
477 2, "two",
478 3, "three"
479 };
480
481 float matrix[3][3] =
482 {
483 {
484 0,
485 1,
486 2
487 },
488 {
489 3,
490 4,
491 5
492 },
493 {
494 6,
495 7,
496 8
497 }
498 };
499 }
500
501 {
502 /* blah ( blah */
503 /* where does this go? */
504
505 /* blah ( blah */
506 cmd;
507
508 func(arg1,
509 /* comment */
510 arg2);
511 a;
512 {
513 b;
514 {
515 c; /* Hey, NOW it indents?! */
516 }
517 }
518
519 {
520 func(arg1,
521 arg2,
522 arg3);
523 /* Hey, what am I doing here? Is this coz of the ","? */
524 }
525 }
526
527 main ()
528 {
529 if (cond)
530 {
531 a = b;
532 }
533 if (cond) {
534 a = c;
535 }
536 if (cond)
537 a = d;
538 return;
539 }
540
541 {
542 case 2: if (asdf &&
543 asdfasdf)
544 aasdf;
545 a = 9;
546 case 3: if (asdf)
547 aasdf;
548 a = 9;
549 case 4: x = 1;
550 y = 2;
551
552 label: if (asdf)
553 here;
554
555 label: if (asdf &&
556 asdfasdf)
557 {
558 }
559
560 label: if (asdf &&
561 asdfasdf) {
562 there;
563 }
564
565 label: if (asdf &&
566 asdfasdf)
567 there;
568 }
569
570 {
571 /*
572 hello with ":set comments= cino=c5"
573 */
574
575 /*
576 hello with ":set comments= cino="
577 */
578 }
579
580
581 {
582 if (a < b) {
583 a = a + 1;
584 } else
585 a = a + 2;
586
587 if (a)
588 do {
589 testing;
590 } while (asdfasdf);
591 a = b + 1;
592 asdfasdf
593 }
594
595 {
596 for ( int i = 0;
597 i < 10; i++ )
598 {
599 }
600 i = 0;
601 }
602
603 class bob
604 {
605 int foo() {return 1;}
606 int bar;
607 }
608
609 main()
610 {
611 while(1)
612 if (foo)
613 {
614 bar;
615 }
616 else {
617 asdf;
618 }
619 misplacedline;
620 }
621
622 {
623 if (clipboard.state == SELECT_DONE
624 && ((row == clipboard.start.lnum
625 && col >= clipboard.start.col)
626 || row > clipboard.start.lnum))
627 }
628
629 {
630 if (1) {i += 4;}
631 where_am_i;
632 return 0;
633 }
634
635 {
636 {
637 } // sdf(asdf
638 if (asdf)
639 asd;
640 }
641
642 {
643 label1:
644 label2:
645 }
646
647 {
648 int fooRet = foo(pBar1, false /*fKB*/,
649 true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
650 f() {
651 for ( i = 0;
652 i < m;
653 /* c */ i++ ) {
654 a = b;
655 }
656 }
657 }
658
659 {
660 f1(/*comment*/);
661 f2();
662 }
663
664 {
665 do {
666 if (foo) {
667 } else
668 ;
669 } while (foo);
670 foo(); // was wrong
671 }
672
673 int x; // no extra indent because of the ;
674 void func()
675 {
676 }
677
678 char *tab[] = {"aaa",
679 "};", /* }; */ NULL}
680 int indented;
681 {}
682
683 char *a[] = {"aaa", "bbb",
684 "ccc", NULL};
685 // here
686
687 char *tab[] = {"aaa",
688 "xx", /* xx */}; /* asdf */
689 int not_indented;
690
691 {
692 do {
693 switch (bla)
694 {
695 case 1: if (foo)
696 bar;
697 }
698 } while (boo);
699 wrong;
700 }
701
702 int foo,
703 bar;
704 int foo;
705
706 #if defined(foo) \
707 && defined(bar)
708 char * xx = "asdf\
709 foo\
710 bor";
711 int x;
712
713 char *foo = "asdf\
714 asdf\
715 asdf",
716 *bar;
717
718 void f()
719 {
720 #if defined(foo) \
721 && defined(bar)
722 char *foo = "asdf\
723 asdf\
724 asdf",
725 *bar;
726 {
727 int i;
728 char *foo = "asdf\
729 asdf\
730 asdf",
731 *bar;
732 }
733 #endif
734 }
735 #endif
736
737 int y; // comment
738 // comment
739
740 // comment
741
742 {
743 Constructor(int a,
744 int b ) : BaseClass(a)
745 {
746 }
747 }
748
749 void foo()
750 {
751 char one,
752 two;
753 struct bla piet,
754 jan;
755 enum foo kees,
756 jannie;
757 static unsigned sdf,
758 krap;
759 unsigned int piet,
760 jan;
761 int
762 kees,
763 jan;
764 }
765
766 {
767 t(int f,
768 int d); // )
769 d();
770 }
771
772 Constructor::Constructor(int a,
773 int b
774 ) :
775 BaseClass(a,
776 b,
777 c),
778 mMember(b),
779 {
780 }
781
782 Constructor::Constructor(int a,
783 int b ) :
784 BaseClass(a)
785 {
786 }
787
788 Constructor::Constructor(int a,
789 int b ) /*x*/ : /*x*/ BaseClass(a),
790 member(b)
791 {
792 }
793
794 A::A(int a, int b)
795 : aa(a),
796 bb(b),
797 cc(c)
798 {
799 }
800
801 class CAbc :
802 public BaseClass1,
803 protected BaseClass2
804 {
805 int Test() { return FALSE; }
806 int Test1() { return TRUE; }
807
808 CAbc(int a, int b ) :
809 BaseClass(a)
810 {
811 switch(xxx)
812 {
813 case abc:
814 asdf();
815 break;
816
817 case 999:
818 baer();
819 break;
820 }
821 }
822
Bram Moolenaar4b96df52020-01-26 22:00:26 +0100823 public: // <-- this was incorrectly indented before!!
Bram Moolenaar1ab74a52019-05-31 20:02:53 +0200824 void testfall();
825 protected:
826 void testfall();
827 };
828
829 class CAbc : public BaseClass1,
830 protected BaseClass2
831 {
832 };
833
834 static struct
835 {
836 int a;
837 int b;
838 } variable[COUNT] =
839 {
840 {
841 123,
842 456
843 },
844 {
845 123,
846 456
847 }
848 };
849
850 static struct
851 {
852 int a;
853 int b;
854 } variable[COUNT] =
855 {
856 { 123, 456 },
857 { 123, 456 }
858 };
859
860 void asdf() /* ind_maxparen may cause trouble here */
861 {
862 if ((0
863 && 1
864 && 1
865 && 1
866 && 1
867 && 1
868 && 1
869 && 1
870 && 1
871 && 1
872 && 1
873 && 1
874 && 1
875 && 1
876 && 1
877 && 1
878 && 1
879 && 1
880 && 1
881 && 1
882 && 1
883 && 1
884 && 1
885 && 1
886 && 1
887 && 1)) break;
888 }
889
890 foo()
891 {
892 a = cond ? foo() : asdf
893 + asdf;
894
895 a = cond ?
896 foo() : asdf
897 + asdf;
898 }
899
900 int main(void)
901 {
902 if (a)
903 if (b)
904 2;
905 else 3;
906 next_line_of_code();
907 }
908
909 barry()
910 {
911 Foo::Foo (int one,
912 int two)
913 : something(4)
914 {}
915 }
916
917 barry()
918 {
919 Foo::Foo (int one, int two)
920 : something(4)
921 {}
922 }
923
924 Constructor::Constructor(int a,
925 int b
926 ) :
927 BaseClass(a,
928 b,
929 c),
930 mMember(b)
931 {
932 }
933 int main ()
934 {
935 if (lala)
936 do
937 ++(*lolo);
938 while (lili
939 && lele);
940 lulu;
941 }
942
943 int main ()
944 {
945 switch (c)
946 {
947 case 'c': if (cond)
948 {
949 }
950 }
951 }
952
953 main()
954 {
955 (void) MyFancyFuasdfadsfnction(
956 argument);
957 }
958
959 main()
960 {
961 char foo[] = "/*";
962 /* as
963 df */
964 hello
965 }
966
967 /* valid namespaces with normal indent */
968 namespace
969 {
970 {
971 111111111111;
972 }
973 }
974 namespace /* test */
975 {
976 11111111111111111;
977 }
978 namespace // test
979 {
980 111111111111111111;
981 }
982 namespace
983 {
984 111111111111111111;
985 }
986 namespace test
987 {
988 111111111111111111;
989 }
990 namespace{
991 111111111111111111;
992 }
993 namespace test{
994 111111111111111111;
995 }
996 namespace {
997 111111111111111111;
998 }
999 namespace test {
1000 111111111111111111;
1001 namespace test2 {
1002 22222222222222222;
1003 }
1004 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00001005 inline namespace {
1006 111111111111111111;
1007 }
1008 inline /* test */ namespace {
1009 111111111111111111;
1010 }
1011 inline/* test */namespace {
1012 111111111111111111;
1013 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001014
1015 /* invalid namespaces use block indent */
1016 namespace test test2 {
1017 111111111111111111111;
1018 }
1019 namespace11111111111 {
1020 111111111111;
1021 }
1022 namespace() {
1023 1111111111111;
1024 }
1025 namespace()
1026 {
1027 111111111111111111;
1028 }
1029 namespace test test2
1030 {
1031 1111111111111111111;
1032 }
1033 namespace111111111
1034 {
1035 111111111111111111;
1036 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00001037 inlinenamespace {
1038 111111111111111111;
1039 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001040
1041 void getstring() {
1042 /* Raw strings */
1043 const char* s = R"(
1044 test {
1045 # comment
1046 field: 123
1047 }
1048 )";
1049 }
1050
1051 void getstring() {
1052 const char* s = R"foo(
1053 test {
1054 # comment
1055 field: 123
1056 }
1057 )foo";
1058 }
1059
1060 {
1061 int a[4] = {
1062 [0] = 0,
1063 [1] = 1,
1064 [2] = 2,
1065 [3] = 3,
1066 };
1067 }
1068
1069 {
1070 a = b[2]
1071 + 3;
1072 }
1073
1074 {
1075 if (1)
1076 /* aaaaa
1077 * bbbbb
1078 */
1079 a = 1;
1080 }
1081
1082 void func()
1083 {
1084 switch (foo)
1085 {
1086 case (bar):
1087 if (baz())
1088 quux();
1089 break;
1090 case (shmoo):
1091 if (!bar)
1092 {
1093 }
1094 case (foo1):
1095 switch (bar)
1096 {
1097 case baz:
1098 baz_f();
1099 break;
1100 }
1101 break;
1102 default:
1103 baz();
1104 baz();
1105 break;
1106 }
1107 }
1108
1109 /* end of AUTO */
1110 [CODE]
1111
Bram Moolenaar7e569d02022-05-21 21:30:50 +01001112 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001113 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01001114 search('start of AUTO')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001115 exe "normal =/end of AUTO\<CR>"
1116
Bram Moolenaar7e569d02022-05-21 21:30:50 +01001117 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001118 /* start of AUTO matically checked vim: set ts=4 : */
1119 {
1120 if (test)
1121 cmd1;
1122 cmd2;
1123 }
1124
1125 {
1126 if (test)
1127 cmd1;
1128 else
1129 cmd2;
1130 }
1131
1132 {
1133 if (test)
1134 {
1135 cmd1;
1136 cmd2;
1137 }
1138 }
1139
1140 {
1141 if (test)
1142 {
1143 cmd1;
1144 else
1145 }
1146 }
1147
1148 {
1149 while (this)
1150 if (test)
1151 cmd1;
1152 cmd2;
1153 }
1154
1155 {
1156 while (this)
1157 if (test)
1158 cmd1;
1159 else
1160 cmd2;
1161 }
1162
1163 {
1164 if (test)
1165 {
1166 cmd;
1167 }
1168
1169 if (test)
1170 cmd;
1171 }
1172
1173 {
1174 if (test) {
1175 cmd;
1176 }
1177
1178 if (test) cmd;
1179 }
1180
1181 {
1182 cmd1;
1183 for (blah)
1184 while (this)
1185 if (test)
1186 cmd2;
1187 cmd3;
1188 }
1189
1190 {
1191 cmd1;
1192 for (blah)
1193 while (this)
1194 if (test)
1195 cmd2;
1196 cmd3;
1197
1198 if (test)
1199 {
1200 cmd1;
1201 cmd2;
1202 cmd3;
1203 }
1204 }
1205
1206
1207 /* Test for 'cindent' do/while mixed with if/else: */
1208
1209 {
1210 do
1211 if (asdf)
1212 asdfasd;
1213 while (cond);
1214
1215 do
1216 if (asdf)
1217 while (asdf)
1218 asdf;
1219 while (asdf);
1220 }
1221
1222 /* Test for 'cindent' with two ) on a continuation line */
1223 {
1224 if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
1225 aal;sdkjf ( ;asldfkja;sldfk
1226 al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
1227 line up here;
1228 }
1229
1230
1231 /* C++ tests: */
1232
1233 // foo() these three lines should remain in column 0
1234 // {
1235 // }
1236
1237 /* Test for continuation and unterminated lines: */
1238 {
1239 i = 99 + 14325 +
1240 21345 +
1241 21345 +
1242 21345 + ( 21345 +
1243 21345) +
1244 2345 +
1245 1234;
1246 c = 1;
1247 }
1248
1249 /*
1250 testje for indent with empty line
1251
1252 here */
1253
1254 {
1255 if (testing &&
1256 not a joke ||
1257 line up here)
1258 hay;
1259 if (testing &&
1260 (not a joke || testing
1261 )line up here)
1262 hay;
1263 if (testing &&
1264 (not a joke || testing
1265 line up here))
1266 hay;
1267 }
1268
1269
1270 {
1271 switch (c)
1272 {
1273 case xx:
1274 do
1275 if (asdf)
1276 do
1277 asdfasdf;
1278 while (asdf);
1279 else
1280 asdfasdf;
1281 while (cond);
1282 case yy:
1283 case xx:
1284 case zz:
1285 testing;
1286 }
1287 }
1288
1289 {
1290 if (cond) {
1291 foo;
1292 }
1293 else
1294 {
1295 bar;
1296 }
1297 }
1298
1299 {
1300 if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
1301 alsdkfj (asldk;fj
1302 awith cino=(0 ;lf this one goes to below the paren with ==
1303 ;laksjfd ;lsakdjf ;alskdf asd)
1304 asdfasdf;)))
1305 asdfasdf;
1306 }
1307
1308 int
1309 func(a, b)
1310 int a;
1311 int c;
1312 {
1313 if (c1 && (c2 ||
1314 c3))
1315 foo;
1316 if (c1 &&
1317 (c2 || c3)
1318 )
1319 }
1320
1321 {
1322 while (asd)
1323 {
1324 if (asdf)
1325 if (test)
1326 if (that)
1327 {
1328 if (asdf)
1329 do
1330 cdasd;
1331 while (as
1332 df);
1333 }
1334 else
1335 if (asdf)
1336 asdf;
1337 else
1338 asdf;
1339 asdf;
1340 }
1341 }
1342
1343 {
1344 s = "/*"; b = ';'
1345 s = "/*"; b = ';';
1346 a = b;
1347 }
1348
1349 {
1350 switch (a)
1351 {
1352 case a:
1353 switch (t)
1354 {
1355 case 1:
1356 cmd;
1357 break;
1358 case 2:
1359 cmd;
1360 break;
1361 }
1362 cmd;
1363 break;
1364 case b:
1365 {
1366 int i;
1367 cmd;
1368 }
1369 break;
1370 case c: {
1371 int i;
1372 cmd;
1373 }
1374 case d: if (cond &&
1375 test) { /* this line doesn't work right */
1376 int i;
1377 cmd;
1378 }
1379 break;
1380 }
1381 }
1382
1383 {
1384 if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
1385 (bp_to->b_p_initialized ||
1386 (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
1387 return;
1388 label :
1389 asdf = asdf ?
1390 asdf : asdf;
1391 asdf = asdf ?
1392 asdf: asdf;
1393 }
1394
1395 /* Special Comments : This function has the added complexity (compared */
1396 /* : to addtolist) of having to check for a detail */
1397 /* : texture and add that to the list first. */
1398
1399 char *(array[100]) = {
1400 "testje",
1401 "foo",
1402 "bar",
1403 }
1404
1405 enum soppie
1406 {
1407 yes = 0,
1408 no,
1409 maybe
1410 };
1411
1412 typedef enum soppie
1413 {
1414 yes = 0,
1415 no,
1416 maybe
1417 };
1418
1419 static enum
1420 {
1421 yes = 0,
1422 no,
1423 maybe
1424 } soppie;
1425
1426 public static enum
1427 {
1428 yes = 0,
1429 no,
1430 maybe
1431 } soppie;
1432
1433 static private enum
1434 {
1435 yes = 0,
1436 no,
1437 maybe
1438 } soppie;
1439
1440 {
1441 int a,
1442 b;
1443 }
1444
1445 {
1446 struct Type
1447 {
1448 int i;
1449 char *str;
1450 } var[] =
1451 {
1452 0, "zero",
1453 1, "one",
1454 2, "two",
1455 3, "three"
1456 };
1457
1458 float matrix[3][3] =
1459 {
1460 {
1461 0,
1462 1,
1463 2
1464 },
1465 {
1466 3,
1467 4,
1468 5
1469 },
1470 {
1471 6,
1472 7,
1473 8
1474 }
1475 };
1476 }
1477
1478 {
1479 /* blah ( blah */
1480 /* where does this go? */
1481
1482 /* blah ( blah */
1483 cmd;
1484
1485 func(arg1,
1486 /* comment */
1487 arg2);
1488 a;
1489 {
1490 b;
1491 {
1492 c; /* Hey, NOW it indents?! */
1493 }
1494 }
1495
1496 {
1497 func(arg1,
1498 arg2,
1499 arg3);
1500 /* Hey, what am I doing here? Is this coz of the ","? */
1501 }
1502 }
1503
1504 main ()
1505 {
1506 if (cond)
1507 {
1508 a = b;
1509 }
1510 if (cond) {
1511 a = c;
1512 }
1513 if (cond)
1514 a = d;
1515 return;
1516 }
1517
1518 {
1519 case 2: if (asdf &&
1520 asdfasdf)
1521 aasdf;
1522 a = 9;
1523 case 3: if (asdf)
1524 aasdf;
1525 a = 9;
1526 case 4: x = 1;
1527 y = 2;
1528
1529 label: if (asdf)
1530 here;
1531
1532 label: if (asdf &&
1533 asdfasdf)
1534 {
1535 }
1536
1537 label: if (asdf &&
1538 asdfasdf) {
1539 there;
1540 }
1541
1542 label: if (asdf &&
1543 asdfasdf)
1544 there;
1545 }
1546
1547 {
1548 /*
1549 hello with ":set comments= cino=c5"
1550 */
1551
1552 /*
1553 hello with ":set comments= cino="
1554 */
1555 }
1556
1557
1558 {
1559 if (a < b) {
1560 a = a + 1;
1561 } else
1562 a = a + 2;
1563
1564 if (a)
1565 do {
1566 testing;
1567 } while (asdfasdf);
1568 a = b + 1;
1569 asdfasdf
1570 }
1571
1572 {
1573 for ( int i = 0;
1574 i < 10; i++ )
1575 {
1576 }
1577 i = 0;
1578 }
1579
1580 class bob
1581 {
1582 int foo() {return 1;}
1583 int bar;
1584 }
1585
1586 main()
1587 {
1588 while(1)
1589 if (foo)
1590 {
1591 bar;
1592 }
1593 else {
1594 asdf;
1595 }
1596 misplacedline;
1597 }
1598
1599 {
1600 if (clipboard.state == SELECT_DONE
1601 && ((row == clipboard.start.lnum
1602 && col >= clipboard.start.col)
1603 || row > clipboard.start.lnum))
1604 }
1605
1606 {
1607 if (1) {i += 4;}
1608 where_am_i;
1609 return 0;
1610 }
1611
1612 {
1613 {
1614 } // sdf(asdf
1615 if (asdf)
1616 asd;
1617 }
1618
1619 {
1620 label1:
1621 label2:
1622 }
1623
1624 {
1625 int fooRet = foo(pBar1, false /*fKB*/,
1626 true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
1627 f() {
1628 for ( i = 0;
1629 i < m;
1630 /* c */ i++ ) {
1631 a = b;
1632 }
1633 }
1634 }
1635
1636 {
1637 f1(/*comment*/);
1638 f2();
1639 }
1640
1641 {
1642 do {
1643 if (foo) {
1644 } else
1645 ;
1646 } while (foo);
1647 foo(); // was wrong
1648 }
1649
1650 int x; // no extra indent because of the ;
1651 void func()
1652 {
1653 }
1654
1655 char *tab[] = {"aaa",
1656 "};", /* }; */ NULL}
1657 int indented;
1658 {}
1659
1660 char *a[] = {"aaa", "bbb",
1661 "ccc", NULL};
1662 // here
1663
1664 char *tab[] = {"aaa",
1665 "xx", /* xx */}; /* asdf */
1666 int not_indented;
1667
1668 {
1669 do {
1670 switch (bla)
1671 {
1672 case 1: if (foo)
1673 bar;
1674 }
1675 } while (boo);
1676 wrong;
1677 }
1678
1679 int foo,
1680 bar;
1681 int foo;
1682
1683 #if defined(foo) \
1684 && defined(bar)
1685 char * xx = "asdf\
1686 foo\
1687 bor";
1688 int x;
1689
1690 char *foo = "asdf\
1691 asdf\
1692 asdf",
1693 *bar;
1694
1695 void f()
1696 {
1697 #if defined(foo) \
1698 && defined(bar)
1699 char *foo = "asdf\
1700 asdf\
1701 asdf",
1702 *bar;
1703 {
1704 int i;
1705 char *foo = "asdf\
1706 asdf\
1707 asdf",
1708 *bar;
1709 }
1710 #endif
1711 }
1712 #endif
1713
1714 int y; // comment
Bram Moolenaar6e371ec2021-12-12 14:16:39 +00001715 // comment
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001716
Bram Moolenaar6e371ec2021-12-12 14:16:39 +00001717 // comment
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001718
1719 {
1720 Constructor(int a,
1721 int b ) : BaseClass(a)
1722 {
1723 }
1724 }
1725
1726 void foo()
1727 {
1728 char one,
1729 two;
1730 struct bla piet,
1731 jan;
1732 enum foo kees,
1733 jannie;
1734 static unsigned sdf,
1735 krap;
1736 unsigned int piet,
1737 jan;
1738 int
1739 kees,
1740 jan;
1741 }
1742
1743 {
1744 t(int f,
1745 int d); // )
1746 d();
1747 }
1748
1749 Constructor::Constructor(int a,
1750 int b
1751 ) :
1752 BaseClass(a,
1753 b,
1754 c),
1755 mMember(b),
1756 {
1757 }
1758
1759 Constructor::Constructor(int a,
1760 int b ) :
1761 BaseClass(a)
1762 {
1763 }
1764
1765 Constructor::Constructor(int a,
1766 int b ) /*x*/ : /*x*/ BaseClass(a),
1767 member(b)
1768 {
1769 }
1770
1771 A::A(int a, int b)
1772 : aa(a),
1773 bb(b),
1774 cc(c)
1775 {
1776 }
1777
1778 class CAbc :
1779 public BaseClass1,
1780 protected BaseClass2
1781 {
1782 int Test() { return FALSE; }
1783 int Test1() { return TRUE; }
1784
1785 CAbc(int a, int b ) :
1786 BaseClass(a)
1787 {
1788 switch(xxx)
1789 {
1790 case abc:
1791 asdf();
1792 break;
1793
1794 case 999:
1795 baer();
1796 break;
1797 }
1798 }
1799
Bram Moolenaar4b96df52020-01-26 22:00:26 +01001800 public: // <-- this was incorrectly indented before!!
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001801 void testfall();
1802 protected:
1803 void testfall();
1804 };
1805
1806 class CAbc : public BaseClass1,
1807 protected BaseClass2
1808 {
1809 };
1810
1811 static struct
1812 {
1813 int a;
1814 int b;
1815 } variable[COUNT] =
1816 {
1817 {
1818 123,
1819 456
1820 },
1821 {
1822 123,
1823 456
1824 }
1825 };
1826
1827 static struct
1828 {
1829 int a;
1830 int b;
1831 } variable[COUNT] =
1832 {
1833 { 123, 456 },
1834 { 123, 456 }
1835 };
1836
1837 void asdf() /* ind_maxparen may cause trouble here */
1838 {
1839 if ((0
1840 && 1
1841 && 1
1842 && 1
1843 && 1
1844 && 1
1845 && 1
1846 && 1
1847 && 1
1848 && 1
1849 && 1
1850 && 1
1851 && 1
1852 && 1
1853 && 1
1854 && 1
1855 && 1
1856 && 1
1857 && 1
1858 && 1
1859 && 1
1860 && 1
1861 && 1
1862 && 1
1863 && 1
1864 && 1)) break;
1865 }
1866
1867 foo()
1868 {
1869 a = cond ? foo() : asdf
1870 + asdf;
1871
1872 a = cond ?
1873 foo() : asdf
1874 + asdf;
1875 }
1876
1877 int main(void)
1878 {
1879 if (a)
1880 if (b)
1881 2;
1882 else 3;
1883 next_line_of_code();
1884 }
1885
1886 barry()
1887 {
1888 Foo::Foo (int one,
1889 int two)
1890 : something(4)
1891 {}
1892 }
1893
1894 barry()
1895 {
1896 Foo::Foo (int one, int two)
1897 : something(4)
1898 {}
1899 }
1900
1901 Constructor::Constructor(int a,
1902 int b
1903 ) :
1904 BaseClass(a,
1905 b,
1906 c),
1907 mMember(b)
1908 {
1909 }
1910 int main ()
1911 {
1912 if (lala)
1913 do
1914 ++(*lolo);
1915 while (lili
1916 && lele);
1917 lulu;
1918 }
1919
1920 int main ()
1921 {
1922 switch (c)
1923 {
1924 case 'c': if (cond)
1925 {
1926 }
1927 }
1928 }
1929
1930 main()
1931 {
1932 (void) MyFancyFuasdfadsfnction(
1933 argument);
1934 }
1935
1936 main()
1937 {
1938 char foo[] = "/*";
1939 /* as
1940 df */
1941 hello
1942 }
1943
1944 /* valid namespaces with normal indent */
1945 namespace
1946 {
1947 {
1948 111111111111;
1949 }
1950 }
1951 namespace /* test */
1952 {
1953 11111111111111111;
1954 }
1955 namespace // test
1956 {
1957 111111111111111111;
1958 }
1959 namespace
1960 {
1961 111111111111111111;
1962 }
1963 namespace test
1964 {
1965 111111111111111111;
1966 }
1967 namespace{
1968 111111111111111111;
1969 }
1970 namespace test{
1971 111111111111111111;
1972 }
1973 namespace {
1974 111111111111111111;
1975 }
1976 namespace test {
1977 111111111111111111;
1978 namespace test2 {
1979 22222222222222222;
1980 }
1981 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00001982 inline namespace {
1983 111111111111111111;
1984 }
1985 inline /* test */ namespace {
1986 111111111111111111;
1987 }
1988 inline/* test */namespace {
1989 111111111111111111;
1990 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02001991
1992 /* invalid namespaces use block indent */
1993 namespace test test2 {
1994 111111111111111111111;
1995 }
1996 namespace11111111111 {
1997 111111111111;
1998 }
1999 namespace() {
2000 1111111111111;
2001 }
2002 namespace()
2003 {
2004 111111111111111111;
2005 }
2006 namespace test test2
2007 {
2008 1111111111111111111;
2009 }
2010 namespace111111111
2011 {
2012 111111111111111111;
2013 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00002014 inlinenamespace {
2015 111111111111111111;
2016 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002017
2018 void getstring() {
2019 /* Raw strings */
2020 const char* s = R"(
2021 test {
2022 # comment
2023 field: 123
2024 }
2025 )";
2026 }
2027
2028 void getstring() {
2029 const char* s = R"foo(
2030 test {
2031 # comment
2032 field: 123
2033 }
2034 )foo";
2035 }
2036
2037 {
2038 int a[4] = {
2039 [0] = 0,
2040 [1] = 1,
2041 [2] = 2,
2042 [3] = 3,
2043 };
2044 }
2045
2046 {
2047 a = b[2]
2048 + 3;
2049 }
2050
2051 {
2052 if (1)
2053 /* aaaaa
2054 * bbbbb
2055 */
2056 a = 1;
2057 }
2058
2059 void func()
2060 {
2061 switch (foo)
2062 {
2063 case (bar):
2064 if (baz())
2065 quux();
2066 break;
2067 case (shmoo):
2068 if (!bar)
2069 {
2070 }
2071 case (foo1):
2072 switch (bar)
2073 {
2074 case baz:
2075 baz_f();
2076 break;
2077 }
2078 break;
2079 default:
2080 baz();
2081 baz();
2082 break;
2083 }
2084 }
2085
2086 /* end of AUTO */
2087
2088 [CODE]
2089
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002090 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002091
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002092 bwipe!
2093enddef
2094
2095def Test_cindent_2()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002096 new
2097 setl cindent ts=4 sw=4
2098 setl tw=0 noai fo=croq
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002099 &wm = &columns - 20
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002100
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002101 var code =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +02002102 {
2103
2104 /* this is
2105 * a real serious important big
2106 * comment
2107 */
2108 /* insert " about life, the universe, and the rest" after "serious" */
2109 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002110 [CODE]
2111
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002112 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002113 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002114 search('serious', 'e')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002115 normal a about life, the universe, and the rest
2116
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002117 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002118 {
2119
2120 /* this is
2121 * a real serious
2122 * about life, the
2123 * universe, and the
2124 * rest important big
2125 * comment
2126 */
2127 /* insert " about life, the universe, and the rest" after "serious" */
2128 }
2129
2130 [CODE]
2131
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002132 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002133 set wm&
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002134
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002135 bwipe!
2136enddef
2137
2138def Test_cindent_3()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002139 new
2140 setl nocindent ts=4 sw=4
2141
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002142 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002143 {
2144 /*
2145 * Testing for comments, without 'cin' set
2146 */
2147
2148 /*
2149 * what happens here?
2150 */
2151
2152 /*
2153 the end of the comment, try inserting a line below */
2154
2155 /* how about
2156 this one */
2157 }
2158 [CODE]
2159
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002160 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002161 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002162 search('comments')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002163 normal joabout life
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002164 search('happens')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002165 normal jothere
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002166 search('below')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002167 normal oline
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002168 search('this')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002169 normal Ohello
2170
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002171 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002172 {
2173 /*
2174 * Testing for comments, without 'cin' set
2175 */
2176 about life
2177
2178 /*
2179 * what happens here?
2180 */
2181 there
2182
2183 /*
2184 the end of the comment, try inserting a line below */
2185 line
2186
2187 /* how about
2188 hello
2189 this one */
2190 }
2191
2192 [CODE]
2193
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002194 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002195
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002196 bwipe!
2197enddef
2198
2199def Test_cindent_4()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002200 new
2201 setl cindent ts=4 sw=4
2202
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002203 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002204 {
2205 var = this + that + vec[0] * vec[0]
2206 + vec[1] * vec[1]
2207 + vec2[2] * vec[2];
2208 }
2209 [CODE]
2210
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002211 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002212 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002213 search('vec2')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002214 normal ==
2215
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002216 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002217 {
2218 var = this + that + vec[0] * vec[0]
2219 + vec[1] * vec[1]
2220 + vec2[2] * vec[2];
2221 }
2222
2223 [CODE]
2224
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002225 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002226
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002227 bwipe!
2228enddef
2229
2230def Test_cindent_5()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002231 new
2232 setl cindent ts=4 sw=4
2233 setl cino=}4
2234
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002235 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002236 {
2237 asdf asdflkajds f;
2238 if (tes & ting) {
2239 asdf asdf asdf ;
2240 asdfa sdf asdf;
2241 }
2242 testing1;
2243 if (tes & ting)
2244 {
2245 asdf asdf asdf ;
2246 asdfa sdf asdf;
2247 }
2248 testing2;
2249 }
2250 [CODE]
2251
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002252 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002253 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002254 search('testing1')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002255 exe "normal k2==/testing2\<CR>"
2256 normal k2==
2257
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002258 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002259 {
2260 asdf asdflkajds f;
2261 if (tes & ting) {
2262 asdf asdf asdf ;
2263 asdfa sdf asdf;
2264 }
2265 testing1;
2266 if (tes & ting)
2267 {
2268 asdf asdf asdf ;
2269 asdfa sdf asdf;
2270 }
2271 testing2;
2272 }
2273
2274 [CODE]
2275
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002276 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002277
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002278 bwipe!
2279enddef
2280
2281def Test_cindent_6()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002282 new
2283 setl cindent ts=4 sw=4
2284 setl cino=(0,)20
2285
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002286 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002287 main ( int first_par, /*
2288 * Comment for
2289 * first par
2290 */
2291 int second_par /*
2292 * Comment for
2293 * second par
2294 */
2295 )
2296 {
2297 func( first_par, /*
2298 * Comment for
2299 * first par
2300 */
2301 second_par /*
2302 * Comment for
2303 * second par
2304 */
2305 );
2306
2307 }
2308 [CODE]
2309
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002310 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002311 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002312 search('main')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002313 normal =][
2314
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002315 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002316 main ( int first_par, /*
2317 * Comment for
2318 * first par
2319 */
2320 int second_par /*
2321 * Comment for
2322 * second par
2323 */
2324 )
2325 {
2326 func( first_par, /*
2327 * Comment for
2328 * first par
2329 */
2330 second_par /*
2331 * Comment for
2332 * second par
2333 */
2334 );
2335
2336 }
2337
2338 [CODE]
2339
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002340 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002341
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002342 bwipe!
2343enddef
2344
2345def Test_cindent_7()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002346 new
2347 setl cindent ts=4 sw=4
2348 setl cino=es,n0s
2349
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002350 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002351 main(void)
2352 {
2353 /* Make sure that cino=X0s is not parsed like cino=Xs. */
2354 if (cond)
2355 foo();
2356 else
2357 {
2358 bar();
2359 }
2360 }
2361 [CODE]
2362
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002363 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002364 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002365 search('main')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002366 normal =][
2367
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002368 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002369 main(void)
2370 {
2371 /* Make sure that cino=X0s is not parsed like cino=Xs. */
2372 if (cond)
2373 foo();
2374 else
2375 {
2376 bar();
2377 }
2378 }
2379
2380 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002381 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002382
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002383 bwipe!
2384enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002385
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002386def Test_cindent_8()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002387 new
2388 setl cindent ts=4 sw=4
2389 setl cino=
2390
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002391 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002392
2393 {
2394 do
2395 {
2396 if ()
2397 {
2398 if ()
2399 asdf;
2400 else
2401 asdf;
2402 }
2403 } while ();
2404 cmd; /* this should go under the } */
2405 }
2406 [CODE]
2407
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002408 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002409 normal gg
2410 normal ]]=][
2411
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002412 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002413
2414 {
2415 do
2416 {
2417 if ()
2418 {
2419 if ()
2420 asdf;
2421 else
2422 asdf;
2423 }
2424 } while ();
2425 cmd; /* this should go under the } */
2426 }
2427
2428 [CODE]
2429
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002430 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002431
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002432 bwipe!
2433enddef
2434
2435def Test_cindent_9()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002436 new
2437 setl cindent ts=4 sw=4
2438
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002439 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002440
2441 void f()
2442 {
2443 if ( k() ) {
2444 l();
2445
2446 } else { /* Start (two words) end */
2447 m();
2448 }
2449
2450 n();
2451 }
2452 [CODE]
2453
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002454 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002455 normal gg
2456 normal ]]=][
2457
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002458 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002459
2460 void f()
2461 {
2462 if ( k() ) {
2463 l();
2464
2465 } else { /* Start (two words) end */
2466 m();
2467 }
2468
2469 n();
2470 }
2471
2472 [CODE]
2473
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002474 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002475
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002476 bwipe!
2477enddef
2478
2479def Test_cindent_10()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002480 new
2481 setl cindent ts=4 sw=4
2482 setl cino={s,e-s
2483
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002484 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002485
2486 void f()
2487 {
2488 if ( k() )
2489 {
2490 l();
2491 } else { /* Start (two words) end */
2492 m();
2493 }
2494 n(); /* should be under the if () */
2495 }
2496 [CODE]
2497
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002498 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002499 normal gg
2500 normal ]]=][
2501
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002502 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002503
2504 void f()
2505 {
2506 if ( k() )
2507 {
2508 l();
2509 } else { /* Start (two words) end */
2510 m();
2511 }
2512 n(); /* should be under the if () */
2513 }
2514
2515 [CODE]
2516
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002517 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002518
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002519 bwipe!
2520enddef
2521
2522def Test_cindent_11()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002523 new
2524 setl cindent ts=4 sw=4
2525 setl cino={s,fs
2526
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002527 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002528 void bar(void)
2529 {
2530 static array[2][2] =
2531 {
2532 { 1, 2 },
2533 { 3, 4 },
2534 }
2535
2536 while (a)
2537 {
2538 foo(&a);
2539 }
2540
2541 {
2542 int a;
2543 {
2544 a = a + 1;
2545 }
2546 }
2547 b = a;
2548 }
2549
2550 void func(void)
2551 {
2552 a = 1;
2553 {
2554 b = 2;
2555 }
2556 c = 3;
2557 d = 4;
2558 }
2559 /* foo */
2560 [CODE]
2561
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002562 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002563 normal gg
2564 exe "normal ]]=/ foo\<CR>"
2565
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002566 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002567 void bar(void)
2568 {
2569 static array[2][2] =
2570 {
2571 { 1, 2 },
2572 { 3, 4 },
2573 }
2574
2575 while (a)
2576 {
2577 foo(&a);
2578 }
2579
2580 {
2581 int a;
2582 {
2583 a = a + 1;
2584 }
2585 }
2586 b = a;
2587 }
2588
2589 void func(void)
2590 {
2591 a = 1;
2592 {
2593 b = 2;
2594 }
2595 c = 3;
2596 d = 4;
2597 }
2598 /* foo */
2599
2600 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002601 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002602
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002603 bwipe!
2604enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002605
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002606def Test_cindent_12()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002607 new
2608 setl cindent ts=4 sw=4
2609 setl cino=
2610
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002611 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002612 a()
2613 {
2614 do {
2615 a = a +
2616 a;
2617 } while ( a ); /* add text under this line */
2618 if ( a )
2619 a;
2620 }
2621 [CODE]
2622
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002623 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002624 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002625 search('while')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002626 normal ohere
2627
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002628 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002629 a()
2630 {
2631 do {
2632 a = a +
2633 a;
2634 } while ( a ); /* add text under this line */
2635 here
2636 if ( a )
2637 a;
2638 }
2639
2640 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002641 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002642
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002643 bwipe!
2644enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002645
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002646def Test_cindent_13()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002647 new
2648 setl cindent ts=4 sw=4
2649 setl cino= com=
2650
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002651 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002652 a()
2653 {
2654 label1:
2655 /* hmm */
2656 // comment
2657 }
2658 [CODE]
2659
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002660 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002661 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002662 search('comment')
2663 exe "normal olabel2: b();\rlabel3 /* post */:\r/* pre */ label4:\r"
2664 .. "f(/*com*/);\rif (/*com*/)\rcmd();"
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002665
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002666 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002667 a()
2668 {
2669 label1:
2670 /* hmm */
2671 // comment
2672 label2: b();
2673 label3 /* post */:
2674 /* pre */ label4:
2675 f(/*com*/);
2676 if (/*com*/)
2677 cmd();
2678 }
2679
2680 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002681 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002682
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002683 bwipe!
2684enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002685
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002686def Test_cindent_14()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002687 new
2688 setl cindent ts=4 sw=4
2689 setl comments& comments^=s:/*,m:**,ex:*/
2690
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002691 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002692 /*
2693 * A simple comment
2694 */
2695
2696 /*
2697 ** A different comment
2698 */
2699 [CODE]
2700
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002701 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002702 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002703 search('simple')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002704 normal =5j
2705
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002706 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002707 /*
2708 * A simple comment
2709 */
2710
2711 /*
2712 ** A different comment
2713 */
2714
2715 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002716 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002717
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002718 bwipe!
2719enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002720
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002721def Test_cindent_15()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002722 new
2723 setl cindent ts=4 sw=4
2724 setl cino=c0
2725 setl comments& comments-=s1:/* comments^=s0:/*
2726
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002727 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002728 void f()
2729 {
2730
2731 /*********
2732 A comment.
2733 *********/
2734 }
2735 [CODE]
2736
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002737 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002738 normal gg
2739 normal ]]=][
2740
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002741 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002742 void f()
2743 {
2744
2745 /*********
2746 A comment.
2747 *********/
2748 }
2749
2750 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002751 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002752
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002753 bwipe!
2754enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002755
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002756def Test_cindent_16()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002757 new
2758 setl cindent ts=4 sw=4
2759 setl cino=c0,C1
2760 setl comments& comments-=s1:/* comments^=s0:/*
2761
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002762 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002763 void f()
2764 {
2765
2766 /*********
2767 A comment.
2768 *********/
2769 }
2770 [CODE]
2771
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002772 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002773 normal gg
2774 normal ]]=][
2775
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002776 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002777 void f()
2778 {
2779
2780 /*********
2781 A comment.
2782 *********/
2783 }
2784
2785 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002786 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002787
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002788 bwipe!
2789enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002790
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002791def Test_cindent_17()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002792 new
2793 setl cindent ts=4 sw=4
2794 setl cino=
2795
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002796 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002797 void f()
2798 {
2799 c = c1 &&
2800 (
2801 c2 ||
2802 c3
2803 ) && c4;
2804 }
2805 [CODE]
2806
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002807 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002808 normal gg
2809 normal ]]=][
2810
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002811 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002812 void f()
2813 {
2814 c = c1 &&
2815 (
2816 c2 ||
2817 c3
2818 ) && c4;
2819 }
2820
2821 [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002822 call assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002823
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002824 bwipe!
2825enddef
2826
2827def Test_cindent_18()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002828 new
2829 setl cindent ts=4 sw=4
2830 setl cino=(s
2831
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002832 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002833 void f()
2834 {
2835 c = c1 &&
2836 (
2837 c2 ||
2838 c3
2839 ) && c4;
2840 }
2841 [CODE]
2842
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002843 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002844 normal gg
2845 normal ]]=][
2846
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002847 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002848 void f()
2849 {
2850 c = c1 &&
2851 (
2852 c2 ||
2853 c3
2854 ) && c4;
2855 }
2856
2857 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002858 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002859
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002860 bwipe!
2861enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002862
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002863def Test_cindent_19()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002864 new
2865 setl cindent ts=4 sw=4
2866 set cino=(s,U1
2867
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002868 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002869 void f()
2870 {
2871 c = c1 &&
2872 (
2873 c2 ||
2874 c3
2875 ) && c4;
2876 }
2877 [CODE]
2878
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002879 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002880 normal gg
2881 normal ]]=][
2882
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002883 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002884 void f()
2885 {
2886 c = c1 &&
2887 (
2888 c2 ||
2889 c3
2890 ) && c4;
2891 }
2892
2893 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002894 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002895
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002896 bwipe!
2897enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002898
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002899def Test_cindent_20()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002900 new
2901 setl cindent ts=4 sw=4
2902 setl cino=(0
2903
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002904 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002905 void f()
2906 {
2907 if ( c1
2908 && ( c2
2909 || c3))
2910 foo;
2911 }
2912 [CODE]
2913
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002914 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002915 normal gg
2916 normal ]]=][
2917
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002918 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002919 void f()
2920 {
2921 if ( c1
2922 && ( c2
2923 || c3))
2924 foo;
2925 }
2926
2927 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002928 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002929
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002930 bwipe!
2931enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002932
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002933def Test_cindent_21()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002934 new
2935 setl cindent ts=4 sw=4
2936 setl cino=(0,w1
2937
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002938 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002939 void f()
2940 {
2941 if ( c1
2942 && ( c2
2943 || c3))
2944 foo;
2945 }
2946 [CODE]
2947
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002948 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002949 normal gg
2950 normal ]]=][
2951
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002952 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002953 void f()
2954 {
2955 if ( c1
2956 && ( c2
2957 || c3))
2958 foo;
2959 }
2960
2961 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002962 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002963
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002964 bwipe!
2965enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002966
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002967def Test_cindent_22()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002968 new
2969 setl cindent ts=4 sw=4
2970 setl cino=(s
2971
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002972 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002973 void f()
2974 {
2975 c = c1 && (
2976 c2 ||
2977 c3
2978 ) && c4;
2979 if (
2980 c1 && c2
2981 )
2982 foo;
2983 }
2984 [CODE]
2985
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002986 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002987 normal gg
2988 normal ]]=][
2989
Bram Moolenaar7e569d02022-05-21 21:30:50 +01002990 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02002991 void f()
2992 {
2993 c = c1 && (
2994 c2 ||
2995 c3
2996 ) && c4;
2997 if (
2998 c1 && c2
2999 )
3000 foo;
3001 }
3002
3003 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003004 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003005
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003006 bwipe!
3007enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003008
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003009def Test_cindent_23()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003010 new
3011 setl cindent ts=4 sw=4
3012 setl cino=(s,m1
3013
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003014 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003015 void f()
3016 {
3017 c = c1 && (
3018 c2 ||
3019 c3
3020 ) && c4;
3021 if (
3022 c1 && c2
3023 )
3024 foo;
3025 }
3026 [CODE]
3027
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003028 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003029 normal gg
3030 normal ]]=][
3031
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003032 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003033 void f()
3034 {
3035 c = c1 && (
3036 c2 ||
3037 c3
3038 ) && c4;
3039 if (
3040 c1 && c2
3041 )
3042 foo;
3043 }
3044
3045 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003046 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003047
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003048 bwipe!
3049enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003050
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003051def Test_cindent_24()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003052 new
3053 setl cindent ts=4 sw=4
3054 setl cino=b1
3055
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003056 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003057 void f()
3058 {
3059 switch (x)
3060 {
3061 case 1:
3062 a = b;
3063 break;
3064 default:
3065 a = 0;
3066 break;
3067 }
3068 }
3069 [CODE]
3070
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003071 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003072 normal gg
3073 normal ]]=][
3074
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003075 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003076 void f()
3077 {
3078 switch (x)
3079 {
3080 case 1:
3081 a = b;
3082 break;
3083 default:
3084 a = 0;
3085 break;
3086 }
3087 }
3088
3089 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003090 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003091
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003092 bwipe!
3093enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003094
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003095def Test_cindent_25()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003096 new
3097 setl cindent ts=4 sw=4
3098 setl cino=(0,W5
3099
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003100 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003101 void f()
3102 {
3103 invokeme(
3104 argu,
3105 ment);
3106 invokeme(
3107 argu,
3108 ment
3109 );
3110 invokeme(argu,
3111 ment
3112 );
3113 }
3114 [CODE]
3115
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003116 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003117 normal gg
3118 normal ]]=][
3119
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003120 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003121 void f()
3122 {
3123 invokeme(
3124 argu,
3125 ment);
3126 invokeme(
3127 argu,
3128 ment
3129 );
3130 invokeme(argu,
3131 ment
3132 );
3133 }
3134
3135 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003136 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003137
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003138 bwipe!
3139enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003140
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003141def Test_cindent_26()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003142 new
3143 setl cindent ts=4 sw=4
3144 setl cino=/6
3145
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003146 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003147 void f()
3148 {
3149 statement;
3150 // comment 1
3151 // comment 2
3152 }
3153 [CODE]
3154
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003155 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003156 normal gg
3157 normal ]]=][
3158
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003159 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003160 void f()
3161 {
3162 statement;
3163 // comment 1
3164 // comment 2
3165 }
3166
3167 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003168 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003169
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003170 bwipe!
3171enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003172
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003173def Test_cindent_27()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003174 new
3175 setl cindent ts=4 sw=4
3176 setl cino=
3177
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003178 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003179 void f()
3180 {
3181 statement;
3182 // comment 1
3183 // comment 2
3184 }
3185 [CODE]
3186
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003187 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003188 normal gg
3189 exe "normal ]]/comment 1/+1\<CR>=="
3190
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003191 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003192 void f()
3193 {
3194 statement;
3195 // comment 1
3196 // comment 2
3197 }
3198
3199 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003200 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003201
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003202 bwipe!
3203enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003204
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003205def Test_cindent_28()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003206 new
3207 setl cindent ts=4 sw=4
3208 setl cino=g0
3209
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003210 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003211 class CAbc
3212 {
3213 int Test() { return FALSE; }
3214
3215 public: // comment
3216 void testfall();
3217 protected:
3218 void testfall();
3219 };
3220 [CODE]
3221
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003222 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003223 normal gg
3224 normal ]]=][
3225
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003226 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003227 class CAbc
3228 {
3229 int Test() { return FALSE; }
3230
3231 public: // comment
3232 void testfall();
3233 protected:
3234 void testfall();
3235 };
3236
3237 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003238 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003239
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003240 bwipe!
3241enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003242
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003243def Test_cindent_29()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003244 new
3245 setl cindent ts=4 sw=4
3246 setl cino=(0,gs,hs
3247
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003248 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003249 class Foo : public Bar
3250 {
3251 public:
3252 virtual void method1(void) = 0;
3253 virtual void method2(int arg1,
3254 int arg2,
3255 int arg3) = 0;
3256 };
3257 [CODE]
3258
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003259 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003260 normal gg
3261 normal ]]=][
3262
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003263 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003264 class Foo : public Bar
3265 {
3266 public:
3267 virtual void method1(void) = 0;
3268 virtual void method2(int arg1,
3269 int arg2,
3270 int arg3) = 0;
3271 };
3272
3273 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003274 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003275
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003276 bwipe!
3277enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003278
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003279def Test_cindent_30()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003280 new
3281 setl cindent ts=4 sw=4
3282 setl cino=+20
3283
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003284 var code =<< [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +02003285 void
3286foo()
3287{
3288 if (a)
3289 {
3290 } else
3291 asdf;
3292}
3293[CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003294
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003295 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003296 normal gg
3297 normal ]]=][
3298
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003299 var expected =<< [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +02003300 void
3301foo()
3302{
3303 if (a)
3304 {
3305 } else
3306 asdf;
3307}
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003308
Bram Moolenaare7eb9272019-06-24 00:58:07 +02003309[CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003310 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003311
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003312 bwipe!
3313enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003314
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003315def Test_cindent_31()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003316 new
3317 setl cindent ts=4 sw=4
3318 setl cino=(0,W2s
3319
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003320 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003321
3322 {
3323 averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
3324 asdasdf,
3325 func(asdf,
3326 asdfadsf),
3327 asdfasdf
3328 );
3329
3330 /* those are ugly, but consequent */
3331
3332 func()->asd(asdasdf,
3333 averylongfunctionname(
3334 abc,
3335 dec)->averylongfunctionname(
3336 asdfadsf,
3337 asdfasdf,
3338 asdfasdf,
3339 ),
3340 func(asdfadf,
3341 asdfasdf
3342 ),
3343 asdasdf
3344 );
3345
3346 averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
3347 abc,
3348 dec)->asdfasdfasdf(
3349 asdfadsf,
3350 asdfasdf,
3351 asdfasdf,
3352 ),
3353 func(asdfadf,
3354 asdfasdf),
3355 asdasdf
3356 );
3357 }
3358 [CODE]
3359
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003360 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003361 normal gg
3362 normal ]]=][
3363
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003364 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003365
3366 {
3367 averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
3368 asdasdf,
3369 func(asdf,
3370 asdfadsf),
3371 asdfasdf
3372 );
3373
3374 /* those are ugly, but consequent */
3375
3376 func()->asd(asdasdf,
3377 averylongfunctionname(
3378 abc,
3379 dec)->averylongfunctionname(
3380 asdfadsf,
3381 asdfasdf,
3382 asdfasdf,
3383 ),
3384 func(asdfadf,
3385 asdfasdf
3386 ),
3387 asdasdf
3388 );
3389
3390 averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
3391 abc,
3392 dec)->asdfasdfasdf(
3393 asdfadsf,
3394 asdfasdf,
3395 asdfasdf,
3396 ),
3397 func(asdfadf,
3398 asdfasdf),
3399 asdasdf
3400 );
3401 }
3402
3403 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003404 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003405
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003406 bwipe!
3407enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003408
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003409def Test_cindent_32()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003410 new
3411 setl cindent ts=4 sw=4
3412 setl cino=M1
3413
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003414 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003415 int main ()
3416 {
3417 if (cond1 &&
3418 cond2
3419 )
3420 foo;
3421 }
3422 [CODE]
3423
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003424 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003425 normal gg
3426 normal ]]=][
3427
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003428 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003429 int main ()
3430 {
3431 if (cond1 &&
3432 cond2
3433 )
3434 foo;
3435 }
3436
3437 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003438 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003439
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003440 bwipe!
3441enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003442
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003443def Test_cindent_33()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003444 new
3445 setl cindent ts=4 sw=4
3446 setl cino=(0,ts
3447
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003448 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003449 void func(int a
3450 #if defined(FOO)
3451 , int b
3452 , int c
3453 #endif
3454 )
3455 {
3456 }
3457 [CODE]
3458
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003459 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003460 normal gg
3461 normal 2j=][
3462
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003463 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003464 void func(int a
3465 #if defined(FOO)
3466 , int b
3467 , int c
3468 #endif
3469 )
3470 {
3471 }
3472
3473 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003474 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003475
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003476 bwipe!
3477enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003478
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003479def Test_cindent_34()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003480 new
3481 setl cindent ts=4 sw=4
3482 setl cino=(0
3483
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003484 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003485
3486 void
3487 func(int a
3488 #if defined(FOO)
3489 , int b
3490 , int c
3491 #endif
3492 )
3493 {
3494 }
3495 [CODE]
3496
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003497 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003498 normal gg
3499 normal =][
3500
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003501 var expected =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +02003502
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003503 void
3504 func(int a
3505 #if defined(FOO)
3506 , int b
3507 , int c
3508 #endif
3509 )
3510 {
3511 }
3512
3513 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003514 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003515
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003516 bwipe!
3517enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003518
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003519def Test_cindent_35()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003520 new
3521 setl cindent ts=4 sw=4
3522 setl cino&
3523
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003524 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003525 void func(void)
3526 {
3527 if(x==y)
3528 if(y==z)
3529 foo=1;
3530 else { bar=1;
3531 baz=2;
3532 }
3533 printf("Foo!\n");
3534 }
3535
3536 void func1(void)
3537 {
3538 char* tab[] = {"foo", "bar",
3539 "baz", "quux",
3540 "this line used", "to be indented incorrectly"};
3541 foo();
3542 }
3543
3544 void func2(void)
3545 {
3546 int tab[] =
3547 {1, 2,
3548 3, 4,
3549 5, 6};
3550
3551 printf("This line used to be indented incorrectly.\n");
3552 }
3553
3554 int foo[]
3555 #ifdef BAR
3556
3557 = { 1, 2, 3,
3558 4, 5, 6 }
3559
3560 #endif
3561 ;
3562 int baz;
3563
3564 void func3(void)
3565 {
3566 int tab[] = {
3567 1, 2,
3568 3, 4,
3569 5, 6};
3570
3571 printf("Don't you dare indent this line incorrectly!\n");
3572 }
3573
3574 void
3575 func4(a, b,
3576 c)
3577 int a;
3578 int b;
3579 int c;
3580 {
3581 }
3582
3583 void
3584 func5(
3585 int a,
3586 int b)
3587 {
3588 }
3589
3590 void
3591 func6(
3592 int a)
3593 {
3594 }
3595 [CODE]
3596
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003597 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003598 normal gg
3599 normal ]]=7][
3600
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003601 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003602 void func(void)
3603 {
3604 if(x==y)
3605 if(y==z)
3606 foo=1;
3607 else { bar=1;
3608 baz=2;
3609 }
3610 printf("Foo!\n");
3611 }
3612
3613 void func1(void)
3614 {
3615 char* tab[] = {"foo", "bar",
3616 "baz", "quux",
3617 "this line used", "to be indented incorrectly"};
3618 foo();
3619 }
3620
3621 void func2(void)
3622 {
3623 int tab[] =
3624 {1, 2,
3625 3, 4,
3626 5, 6};
3627
3628 printf("This line used to be indented incorrectly.\n");
3629 }
3630
3631 int foo[]
3632 #ifdef BAR
3633
3634 = { 1, 2, 3,
3635 4, 5, 6 }
3636
3637 #endif
3638 ;
3639 int baz;
3640
3641 void func3(void)
3642 {
3643 int tab[] = {
3644 1, 2,
3645 3, 4,
3646 5, 6};
3647
3648 printf("Don't you dare indent this line incorrectly!\n");
3649 }
3650
3651 void
3652 func4(a, b,
3653 c)
3654 int a;
3655 int b;
3656 int c;
3657 {
3658 }
3659
3660 void
3661 func5(
3662 int a,
3663 int b)
3664 {
3665 }
3666
3667 void
3668 func6(
3669 int a)
3670 {
3671 }
3672
3673 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003674 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003675
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003676 bwipe!
3677enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003678
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003679def Test_cindent_36()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003680 new
3681 setl cindent ts=4 sw=4
3682 setl cino&
3683 setl cino+=l1
3684
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003685 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003686 void func(void)
3687 {
3688 int tab[] =
3689 {
3690 1, 2, 3,
3691 4, 5, 6};
3692
3693 printf("Indent this line correctly!\n");
3694
3695 switch (foo)
3696 {
3697 case bar:
3698 printf("bar");
3699 break;
3700 case baz: {
3701 printf("baz");
3702 break;
3703 }
3704 case quux:
3705 printf("But don't break the indentation of this instruction\n");
3706 break;
3707 }
3708 }
3709 [CODE]
3710
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003711 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003712 normal gg
3713 normal ]]=][
3714
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003715 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003716 void func(void)
3717 {
3718 int tab[] =
3719 {
3720 1, 2, 3,
3721 4, 5, 6};
3722
3723 printf("Indent this line correctly!\n");
3724
3725 switch (foo)
3726 {
3727 case bar:
3728 printf("bar");
3729 break;
3730 case baz: {
3731 printf("baz");
3732 break;
3733 }
3734 case quux:
3735 printf("But don't break the indentation of this instruction\n");
3736 break;
3737 }
3738 }
3739
3740 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003741 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003742
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003743 bwipe!
3744enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003745
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003746def Test_cindent_37()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003747 new
3748 setl cindent ts=4 sw=4
3749 setl cino&
3750
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003751 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003752 void func(void)
3753 {
3754 cout << "a"
3755 << "b"
3756 << ") :"
3757 << "c";
3758 }
3759 [CODE]
3760
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003761 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003762 normal gg
3763 normal ]]=][
3764
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003765 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003766 void func(void)
3767 {
3768 cout << "a"
3769 << "b"
3770 << ") :"
3771 << "c";
3772 }
3773
3774 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003775 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003776
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003777 bwipe!
3778enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003779
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003780def Test_cindent_38()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003781 new
3782 setl cindent ts=4 sw=4
3783 setl com=s1:/*,m:*,ex:*/
3784
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003785 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003786 void func(void)
3787 {
3788 /*
3789 * This is a comment.
3790 */
3791 }
3792 [CODE]
3793
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003794 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003795 normal gg
3796 normal ]]3jofoo();
3797
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003798 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003799 void func(void)
3800 {
3801 /*
3802 * This is a comment.
3803 */
3804 foo();
3805 }
3806
3807 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003808 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003809
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003810 bwipe!
3811enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003812
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003813def Test_cindent_39()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003814 new
3815 setl cindent ts=4 sw=4
3816 setl cino&
3817
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003818 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003819 void func(void)
3820 {
3821 for (int i = 0; i < 10; ++i)
3822 if (i & 1) {
3823 foo(1);
3824 } else
3825 foo(0);
3826 baz();
3827 }
3828 [CODE]
3829
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003830 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003831 normal gg
3832 normal ]]=][
3833
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003834 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003835 void func(void)
3836 {
3837 for (int i = 0; i < 10; ++i)
3838 if (i & 1) {
3839 foo(1);
3840 } else
3841 foo(0);
3842 baz();
3843 }
3844
3845 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003846 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003847
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003848 bwipe!
3849enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003850
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003851def Test_cindent_40()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003852 new
3853 setl cindent ts=4 sw=4
3854 setl cino=k2s,(0
3855
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003856 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003857 void func(void)
3858 {
3859 if (condition1
3860 && condition2)
3861 action();
3862 function(argument1
3863 && argument2);
3864
3865 if (c1 && (c2 ||
3866 c3))
3867 foo;
3868 if (c1 &&
3869 (c2 || c3))
3870 {
3871 }
3872
3873 if ( c1
3874 && ( c2
3875 || c3))
3876 foo;
3877 func( c1
3878 && ( c2
3879 || c3))
3880 foo;
3881 }
3882 [CODE]
3883
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003884 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003885 normal gg
3886 normal ]]=][
3887
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003888 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003889 void func(void)
3890 {
3891 if (condition1
3892 && condition2)
3893 action();
3894 function(argument1
3895 && argument2);
3896
3897 if (c1 && (c2 ||
3898 c3))
3899 foo;
3900 if (c1 &&
3901 (c2 || c3))
3902 {
3903 }
3904
3905 if ( c1
3906 && ( c2
3907 || c3))
3908 foo;
3909 func( c1
3910 && ( c2
3911 || c3))
3912 foo;
3913 }
3914
3915 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003916 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003917
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003918 bwipe!
3919enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003920
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003921def Test_cindent_41()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003922 new
3923 setl cindent ts=4 sw=4
3924 setl cino=k2s,(s
3925
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003926 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003927 void func(void)
3928 {
3929 if (condition1
3930 && condition2)
3931 action();
3932 function(argument1
3933 && argument2);
3934
3935 if (c1 && (c2 ||
3936 c3))
3937 foo;
3938 if (c1 &&
3939 (c2 || c3))
3940 {
3941 }
3942
3943 if ( c1
3944 && ( c2
3945 || c3))
3946 foo;
3947 func( c1
3948 && ( c2
3949 || c3))
3950 foo;
3951 }
3952 [CODE]
3953
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003954 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003955 normal gg
3956 normal ]]=][
3957
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003958 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003959 void func(void)
3960 {
3961 if (condition1
3962 && condition2)
3963 action();
3964 function(argument1
3965 && argument2);
3966
3967 if (c1 && (c2 ||
3968 c3))
3969 foo;
3970 if (c1 &&
3971 (c2 || c3))
3972 {
3973 }
3974
3975 if ( c1
3976 && ( c2
3977 || c3))
3978 foo;
3979 func( c1
3980 && ( c2
3981 || c3))
3982 foo;
3983 }
3984
3985 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003986 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003987
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003988 bwipe!
3989enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003990
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003991def Test_cindent_42()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003992 new
3993 setl cindent ts=4 sw=4
3994 setl cino=k2s,(s,U1
3995
Bram Moolenaar7e569d02022-05-21 21:30:50 +01003996 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02003997 void func(void)
3998 {
3999 if (condition1
4000 && condition2)
4001 action();
4002 function(argument1
4003 && argument2);
4004
4005 if (c1 && (c2 ||
4006 c3))
4007 foo;
4008 if (c1 &&
4009 (c2 || c3))
4010 {
4011 }
4012 if (c123456789
4013 && (c22345
4014 || c3))
4015 printf("foo\n");
4016
4017 c = c1 &&
4018 (
4019 c2 ||
4020 c3
4021 ) && c4;
4022 }
4023 [CODE]
4024
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004025 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004026 normal gg
4027 normal ]]=][
4028
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004029 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004030 void func(void)
4031 {
4032 if (condition1
4033 && condition2)
4034 action();
4035 function(argument1
4036 && argument2);
4037
4038 if (c1 && (c2 ||
4039 c3))
4040 foo;
4041 if (c1 &&
4042 (c2 || c3))
4043 {
4044 }
4045 if (c123456789
4046 && (c22345
4047 || c3))
4048 printf("foo\n");
4049
4050 c = c1 &&
4051 (
4052 c2 ||
4053 c3
4054 ) && c4;
4055 }
4056
4057 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004058 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004059
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004060 bwipe!
4061enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004062
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004063def Test_cindent_43()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004064 new
4065 setl cindent ts=4 sw=4
4066 setl cino=k2s,(0,W4
4067
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004068 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004069 void func(void)
4070 {
4071 if (condition1
4072 && condition2)
4073 action();
4074 function(argument1
4075 && argument2);
4076
4077 if (c1 && (c2 ||
4078 c3))
4079 foo;
4080 if (c1 &&
4081 (c2 || c3))
4082 {
4083 }
4084 if (c123456789
4085 && (c22345
4086 || c3))
4087 printf("foo\n");
4088
4089 if ( c1
4090 && ( c2
4091 || c3))
4092 foo;
4093
4094 a_long_line(
4095 argument,
4096 argument);
4097 a_short_line(argument,
4098 argument);
4099 }
4100 [CODE]
4101
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004102 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004103 normal gg
4104 normal ]]=][
4105
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004106 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004107 void func(void)
4108 {
4109 if (condition1
4110 && condition2)
4111 action();
4112 function(argument1
4113 && argument2);
4114
4115 if (c1 && (c2 ||
4116 c3))
4117 foo;
4118 if (c1 &&
4119 (c2 || c3))
4120 {
4121 }
4122 if (c123456789
4123 && (c22345
4124 || c3))
4125 printf("foo\n");
4126
4127 if ( c1
4128 && ( c2
4129 || c3))
4130 foo;
4131
4132 a_long_line(
4133 argument,
4134 argument);
4135 a_short_line(argument,
4136 argument);
4137 }
4138
4139 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004140 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004141
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004142 bwipe!
4143enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004144
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004145def Test_cindent_44()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004146 new
4147 setl cindent ts=4 sw=4
4148 setl cino=k2s,u2
4149
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004150 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004151 void func(void)
4152 {
4153 if (condition1
4154 && condition2)
4155 action();
4156 function(argument1
4157 && argument2);
4158
4159 if (c1 && (c2 ||
4160 c3))
4161 foo;
4162 if (c1 &&
4163 (c2 || c3))
4164 {
4165 }
4166 if (c123456789
4167 && (c22345
4168 || c3))
4169 printf("foo\n");
4170 }
4171 [CODE]
4172
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004173 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004174 normal gg
4175 normal ]]=][
4176
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004177 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004178 void func(void)
4179 {
4180 if (condition1
4181 && condition2)
4182 action();
4183 function(argument1
4184 && argument2);
4185
4186 if (c1 && (c2 ||
4187 c3))
4188 foo;
4189 if (c1 &&
4190 (c2 || c3))
4191 {
4192 }
4193 if (c123456789
4194 && (c22345
4195 || c3))
4196 printf("foo\n");
4197 }
4198
4199 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004200 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004201
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004202 bwipe!
4203enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004204
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004205def Test_cindent_45()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004206 new
4207 setl cindent ts=4 sw=4
4208 setl cino=k2s,(0,w1
4209
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004210 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004211 void func(void)
4212 {
4213 if (condition1
4214 && condition2)
4215 action();
4216 function(argument1
4217 && argument2);
4218
4219 if (c1 && (c2 ||
4220 c3))
4221 foo;
4222 if (c1 &&
4223 (c2 || c3))
4224 {
4225 }
4226 if (c123456789
4227 && (c22345
4228 || c3))
4229 printf("foo\n");
4230
4231 if ( c1
4232 && ( c2
4233 || c3))
4234 foo;
4235 func( c1
4236 && ( c2
4237 || c3))
4238 foo;
4239 }
4240 [CODE]
4241
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004242 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004243 normal gg
4244 normal ]]=][
4245
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004246 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004247 void func(void)
4248 {
4249 if (condition1
4250 && condition2)
4251 action();
4252 function(argument1
4253 && argument2);
4254
4255 if (c1 && (c2 ||
4256 c3))
4257 foo;
4258 if (c1 &&
4259 (c2 || c3))
4260 {
4261 }
4262 if (c123456789
4263 && (c22345
4264 || c3))
4265 printf("foo\n");
4266
4267 if ( c1
4268 && ( c2
4269 || c3))
4270 foo;
4271 func( c1
4272 && ( c2
4273 || c3))
4274 foo;
4275 }
4276
4277 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004278 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004279
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004280 bwipe!
4281enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004282
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004283def Test_cindent_46()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004284 new
4285 setl cindent ts=4 sw=4
4286 setl cino=k2,(s
4287
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004288 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004289 void func(void)
4290 {
4291 if (condition1
4292 && condition2)
4293 action();
4294 function(argument1
4295 && argument2);
4296
4297 if (c1 && (c2 ||
4298 c3))
4299 foo;
4300 if (c1 &&
4301 (c2 || c3))
4302 {
4303 }
4304 }
4305 [CODE]
4306
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004307 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004308 normal gg
4309 normal ]]=][
4310
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004311 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004312 void func(void)
4313 {
4314 if (condition1
4315 && condition2)
4316 action();
4317 function(argument1
4318 && argument2);
4319
4320 if (c1 && (c2 ||
4321 c3))
4322 foo;
4323 if (c1 &&
4324 (c2 || c3))
4325 {
4326 }
4327 }
4328
4329 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004330 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004331
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004332 bwipe!
4333enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004334
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004335def Test_cindent_47()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004336 new
4337 setl cindent ts=4 sw=4
4338 setl cino=N-s
4339
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004340 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004341 NAMESPACESTART
4342 /* valid namespaces with normal indent */
4343 namespace
4344 {
4345 {
4346 111111111111;
4347 }
4348 }
4349 namespace /* test */
4350 {
4351 11111111111111111;
4352 }
4353 namespace // test
4354 {
4355 111111111111111111;
4356 }
4357 namespace
4358 {
4359 111111111111111111;
4360 }
4361 namespace test
4362 {
4363 111111111111111111;
4364 }
4365 namespace test::cpp17
4366 {
4367 111111111111111111;
4368 }
4369 namespace ::incorrectcpp17
4370 {
4371 111111111111111111;
4372 }
4373 namespace test::incorrectcpp17::
4374 {
4375 111111111111111111;
4376 }
4377 namespace test:incorrectcpp17
4378 {
4379 111111111111111111;
4380 }
4381 namespace test:::incorrectcpp17
4382 {
4383 111111111111111111;
4384 }
4385 namespace{
4386 111111111111111111;
4387 }
4388 namespace test{
4389 111111111111111111;
4390 }
4391 namespace {
4392 111111111111111111;
4393 }
4394 namespace test {
4395 111111111111111111;
4396 namespace test2 {
4397 22222222222222222;
4398 }
4399 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00004400 inline namespace {
4401 111111111111111111;
4402 }
4403 inline /* test */ namespace {
4404 111111111111111111;
4405 }
4406 inline/* test */namespace {
4407 111111111111111111;
4408 }
Virginia Senioria99e4ab22023-03-24 19:25:06 +00004409 export namespace {
4410 111111111111111111;
4411 }
4412 export inline namespace {
4413 111111111111111111;
4414 }
4415 export/* test */inline namespace {
4416 111111111111111111;
4417 }
4418 inline export namespace {
4419 111111111111111111;
4420 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004421
4422 /* invalid namespaces use block indent */
4423 namespace test test2 {
4424 111111111111111111111;
4425 }
4426 namespace11111111111 {
4427 111111111111;
4428 }
4429 namespace() {
4430 1111111111111;
4431 }
4432 namespace()
4433 {
4434 111111111111111111;
4435 }
4436 namespace test test2
4437 {
4438 1111111111111111111;
4439 }
4440 namespace111111111
4441 {
4442 111111111111111111;
4443 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00004444 inlinenamespace {
4445 111111111111111111;
4446 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004447 NAMESPACEEND
4448 [CODE]
4449
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004450 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004451 normal gg
4452 call search('^NAMESPACESTART')
4453 exe "normal =/^NAMESPACEEND\n"
4454
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004455 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004456 NAMESPACESTART
4457 /* valid namespaces with normal indent */
4458 namespace
4459 {
4460 {
4461 111111111111;
4462 }
4463 }
4464 namespace /* test */
4465 {
4466 11111111111111111;
4467 }
4468 namespace // test
4469 {
4470 111111111111111111;
4471 }
4472 namespace
4473 {
4474 111111111111111111;
4475 }
4476 namespace test
4477 {
4478 111111111111111111;
4479 }
4480 namespace test::cpp17
4481 {
4482 111111111111111111;
4483 }
4484 namespace ::incorrectcpp17
4485 {
4486 111111111111111111;
4487 }
4488 namespace test::incorrectcpp17::
4489 {
4490 111111111111111111;
4491 }
4492 namespace test:incorrectcpp17
4493 {
4494 111111111111111111;
4495 }
4496 namespace test:::incorrectcpp17
4497 {
4498 111111111111111111;
4499 }
4500 namespace{
4501 111111111111111111;
4502 }
4503 namespace test{
4504 111111111111111111;
4505 }
4506 namespace {
4507 111111111111111111;
4508 }
4509 namespace test {
4510 111111111111111111;
4511 namespace test2 {
4512 22222222222222222;
4513 }
4514 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00004515 inline namespace {
4516 111111111111111111;
4517 }
4518 inline /* test */ namespace {
4519 111111111111111111;
4520 }
4521 inline/* test */namespace {
4522 111111111111111111;
4523 }
Virginia Senioria99e4ab22023-03-24 19:25:06 +00004524 export namespace {
4525 111111111111111111;
4526 }
4527 export inline namespace {
4528 111111111111111111;
4529 }
4530 export/* test */inline namespace {
4531 111111111111111111;
4532 }
4533 inline export namespace {
4534 111111111111111111;
4535 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004536
4537 /* invalid namespaces use block indent */
4538 namespace test test2 {
4539 111111111111111111111;
4540 }
4541 namespace11111111111 {
4542 111111111111;
4543 }
4544 namespace() {
4545 1111111111111;
4546 }
4547 namespace()
4548 {
4549 111111111111111111;
4550 }
4551 namespace test test2
4552 {
4553 1111111111111111111;
4554 }
4555 namespace111111111
4556 {
4557 111111111111111111;
4558 }
zeertzjqf2f0bdd2021-12-22 20:55:30 +00004559 inlinenamespace {
4560 111111111111111111;
4561 }
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004562 NAMESPACEEND
4563
4564 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004565 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004566
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004567 bwipe!
4568enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004569
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004570def Test_cindent_48()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004571 new
4572 setl cindent ts=4 sw=4
4573 setl cino=j1,J1
4574
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004575 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004576 JSSTART
4577 var bar = {
4578 foo: {
4579 that: this,
4580 some: ok,
4581 },
4582 "bar":{
4583 a : 2,
4584 b: "123abc",
4585 x: 4,
4586 "y": 5
4587 }
4588 }
4589 JSEND
4590 [CODE]
4591
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004592 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004593 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004594 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004595 exe "normal =/^JSEND\n"
4596
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004597 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004598 JSSTART
4599 var bar = {
4600 foo: {
4601 that: this,
4602 some: ok,
4603 },
4604 "bar":{
4605 a : 2,
4606 b: "123abc",
4607 x: 4,
4608 "y": 5
4609 }
4610 }
4611 JSEND
4612
4613 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004614 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004615
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004616 bwipe!
4617enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004618
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004619def Test_cindent_49()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004620 new
4621 setl cindent ts=4 sw=4
4622 setl cino=j1,J1
4623
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004624 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004625 JSSTART
4626 var foo = [
4627 1,
4628 2,
4629 3
4630 ];
4631 JSEND
4632 [CODE]
4633
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004634 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004635 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004636 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004637 exe "normal =/^JSEND\n"
4638
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004639 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004640 JSSTART
4641 var foo = [
4642 1,
4643 2,
4644 3
4645 ];
4646 JSEND
4647
4648 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004649 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004650
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004651 bwipe!
4652enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004653
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004654def Test_cindent_50()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004655 new
4656 setl cindent ts=4 sw=4
4657 setl cino=j1,J1
4658
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004659 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004660 JSSTART
4661 function bar() {
4662 var foo = [
4663 1,
4664 2,
4665 3
4666 ];
4667 }
4668 JSEND
4669 [CODE]
4670
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004671 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004672 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004673 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004674 exe "normal =/^JSEND\n"
4675
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004676 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004677 JSSTART
4678 function bar() {
4679 var foo = [
4680 1,
4681 2,
4682 3
4683 ];
4684 }
4685 JSEND
4686
4687 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004688 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004689
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004690 bwipe!
4691enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004692
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004693def Test_cindent_51()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004694 new
4695 setl cindent ts=4 sw=4
4696 setl cino=j1,J1
4697
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004698 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004699 JSSTART
4700 (function($){
4701
4702 if (cond &&
4703 cond) {
4704 stmt;
4705 }
4706 window.something.left =
4707 (width - 50 + offset) + "px";
4708 var class_name='myclass';
4709
4710 function private_method() {
4711 }
4712
4713 var public_method={
4714 method: function(options,args){
4715 private_method();
4716 }
4717 }
4718
4719 function init(options) {
4720
4721 $(this).data(class_name+'_public',$.extend({},{
4722 foo: 'bar',
4723 bar: 2,
4724 foobar: [
4725 1,
4726 2,
4727 3
4728 ],
4729 callback: function(){
4730 return true;
4731 }
4732 }, options||{}));
4733 }
4734
4735 $.fn[class_name]=function() {
4736
4737 var _arguments=arguments;
4738 return this.each(function(){
4739
4740 var options=$(this).data(class_name+'_public');
4741 if (!options) {
4742 init.apply(this,_arguments);
4743
4744 } else {
4745 var method=public_method[_arguments[0]];
4746
4747 if (typeof(method)!='function') {
4748 console.log(class_name+' has no method "'+_arguments[0]+'"');
4749 return false;
4750 }
4751 _arguments[0]=options;
4752 method.apply(this,_arguments);
4753 }
4754 });
4755 }
4756
4757 })(jQuery);
4758 JSEND
4759 [CODE]
4760
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004761 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004762 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004763 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004764 exe "normal =/^JSEND\n"
4765
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004766 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004767 JSSTART
4768 (function($){
4769
4770 if (cond &&
4771 cond) {
4772 stmt;
4773 }
4774 window.something.left =
4775 (width - 50 + offset) + "px";
4776 var class_name='myclass';
4777
4778 function private_method() {
4779 }
4780
4781 var public_method={
4782 method: function(options,args){
4783 private_method();
4784 }
4785 }
4786
4787 function init(options) {
4788
4789 $(this).data(class_name+'_public',$.extend({},{
4790 foo: 'bar',
4791 bar: 2,
4792 foobar: [
4793 1,
4794 2,
4795 3
4796 ],
4797 callback: function(){
4798 return true;
4799 }
4800 }, options||{}));
4801 }
4802
4803 $.fn[class_name]=function() {
4804
4805 var _arguments=arguments;
4806 return this.each(function(){
4807
4808 var options=$(this).data(class_name+'_public');
4809 if (!options) {
4810 init.apply(this,_arguments);
4811
4812 } else {
4813 var method=public_method[_arguments[0]];
4814
4815 if (typeof(method)!='function') {
4816 console.log(class_name+' has no method "'+_arguments[0]+'"');
4817 return false;
4818 }
4819 _arguments[0]=options;
4820 method.apply(this,_arguments);
4821 }
4822 });
4823 }
4824
4825 })(jQuery);
4826 JSEND
4827
4828 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004829 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004830
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004831 bwipe!
4832enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004833
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004834def Test_cindent_52()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004835 new
4836 setl cindent ts=4 sw=4
4837 setl cino=j1,J1
4838
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004839 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004840 JSSTART
4841 function init(options) {
4842 $(this).data(class_name+'_public',$.extend({},{
4843 foo: 'bar',
4844 bar: 2,
4845 foobar: [
4846 1,
4847 2,
4848 3
4849 ],
4850 callback: function(){
4851 return true;
4852 }
4853 }, options||{}));
4854 }
4855 JSEND
4856 [CODE]
4857
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004858 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004859 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004860 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004861 exe "normal =/^JSEND\n"
4862
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004863 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004864 JSSTART
4865 function init(options) {
4866 $(this).data(class_name+'_public',$.extend({},{
4867 foo: 'bar',
4868 bar: 2,
4869 foobar: [
4870 1,
4871 2,
4872 3
4873 ],
4874 callback: function(){
4875 return true;
4876 }
4877 }, options||{}));
4878 }
4879 JSEND
4880
4881 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004882 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004883
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004884 bwipe!
4885enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004886
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004887def Test_cindent_53()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004888 new
4889 setl cindent ts=4 sw=4
4890 setl cino=j1,J1
4891
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004892 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004893 JSSTART
4894 (function($){
4895 function init(options) {
4896 $(this).data(class_name+'_public',$.extend({},{
4897 foo: 'bar',
4898 bar: 2,
4899 foobar: [
4900 1,
4901 2,
4902 3
4903 ],
4904 callback: function(){
4905 return true;
4906 }
4907 }, options||{}));
4908 }
4909 })(jQuery);
4910 JSEND
4911 [CODE]
4912
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004913 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004914 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004915 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004916 exe "normal =/^JSEND\n"
4917
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004918 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004919 JSSTART
4920 (function($){
4921 function init(options) {
4922 $(this).data(class_name+'_public',$.extend({},{
4923 foo: 'bar',
4924 bar: 2,
4925 foobar: [
4926 1,
4927 2,
4928 3
4929 ],
4930 callback: function(){
4931 return true;
4932 }
4933 }, options||{}));
4934 }
4935 })(jQuery);
4936 JSEND
4937
4938 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004939 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004940
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004941 bwipe!
4942enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004943
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004944def Test_cindent_54()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004945 new
4946 setl cindent ts=4 sw=4
4947 setl cino=j1,J1,+2
4948
Bram Moolenaar7e569d02022-05-21 21:30:50 +01004949 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02004950 JSSTART
4951 // Results of JavaScript indent
4952 // 1
4953 (function(){
4954 var a = [
4955 'a',
4956 'b',
4957 'c',
4958 'd',
4959 'e',
4960 'f',
4961 'g',
4962 'h',
4963 'i'
4964 ];
4965 }())
4966
4967 // 2
4968 (function(){
4969 var a = [
4970 0 +
4971 5 *
4972 9 *
4973 'a',
4974 'b',
4975 0 +
4976 5 *
4977 9 *
4978 'c',
4979 'd',
4980 'e',
4981 'f',
4982 'g',
4983 'h',
4984 'i'
4985 ];
4986 }())
4987
4988 // 3
4989 (function(){
4990 var a = [
4991 0 +
4992 // comment 1
4993 5 *
4994 /* comment 2 */
4995 9 *
4996 'a',
4997 'b',
4998 0 +
4999 5 *
5000 9 *
5001 'c',
5002 'd',
5003 'e',
5004 'f',
5005 'g',
5006 'h',
5007 'i'
5008 ];
5009 }())
5010
5011 // 4
5012 {
5013 var a = [
5014 0,
5015 1
5016 ];
5017 var b;
5018 var c;
5019 }
5020
5021 // 5
5022 {
5023 var a = [
5024 [
5025 0
5026 ],
5027 2,
5028 3
5029 ];
5030 }
5031
5032 // 6
5033 {
5034 var a = [
5035 [
5036 0,
5037 1
5038 ],
5039 2,
5040 3
5041 ];
5042 }
5043
5044 // 7
5045 {
5046 var a = [
5047 // [
5048 0,
5049 // 1
5050 // ],
5051 2,
5052 3
5053 ];
5054 }
5055
5056 // 8
5057 var x = [
5058 (function(){
5059 var a,
5060 b,
5061 c,
5062 d,
5063 e,
5064 f,
5065 g,
5066 h,
5067 i;
5068 })
5069 ];
5070
5071 // 9
5072 var a = [
5073 0 +
5074 5 *
5075 9 *
5076 'a',
5077 'b',
5078 0 +
5079 5 *
5080 9 *
5081 'c',
5082 'd',
5083 'e',
5084 'f',
5085 'g',
5086 'h',
5087 'i'
5088 ];
5089
5090 // 10
5091 var a,
5092 b,
5093 c,
5094 d,
5095 e,
5096 f,
5097 g,
5098 h,
5099 i;
5100 JSEND
5101 [CODE]
5102
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005103 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005104 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005105 search('^JSSTART')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005106 exe "normal =/^JSEND\n"
5107
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005108 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005109 JSSTART
5110 // Results of JavaScript indent
5111 // 1
5112 (function(){
5113 var a = [
5114 'a',
5115 'b',
5116 'c',
5117 'd',
5118 'e',
5119 'f',
5120 'g',
5121 'h',
5122 'i'
5123 ];
5124 }())
5125
5126 // 2
5127 (function(){
5128 var a = [
5129 0 +
5130 5 *
5131 9 *
5132 'a',
5133 'b',
5134 0 +
5135 5 *
5136 9 *
5137 'c',
5138 'd',
5139 'e',
5140 'f',
5141 'g',
5142 'h',
5143 'i'
5144 ];
5145 }())
5146
5147 // 3
5148 (function(){
5149 var a = [
5150 0 +
5151 // comment 1
5152 5 *
5153 /* comment 2 */
5154 9 *
5155 'a',
5156 'b',
5157 0 +
5158 5 *
5159 9 *
5160 'c',
5161 'd',
5162 'e',
5163 'f',
5164 'g',
5165 'h',
5166 'i'
5167 ];
5168 }())
5169
5170 // 4
5171 {
5172 var a = [
5173 0,
5174 1
5175 ];
5176 var b;
5177 var c;
5178 }
5179
5180 // 5
5181 {
5182 var a = [
5183 [
5184 0
5185 ],
5186 2,
5187 3
5188 ];
5189 }
5190
5191 // 6
5192 {
5193 var a = [
5194 [
5195 0,
5196 1
5197 ],
5198 2,
5199 3
5200 ];
5201 }
5202
5203 // 7
5204 {
5205 var a = [
5206 // [
5207 0,
5208 // 1
5209 // ],
5210 2,
5211 3
5212 ];
5213 }
5214
5215 // 8
5216 var x = [
5217 (function(){
5218 var a,
5219 b,
5220 c,
5221 d,
5222 e,
5223 f,
5224 g,
5225 h,
5226 i;
5227 })
5228 ];
5229
5230 // 9
5231 var a = [
5232 0 +
5233 5 *
5234 9 *
5235 'a',
5236 'b',
5237 0 +
5238 5 *
5239 9 *
5240 'c',
5241 'd',
5242 'e',
5243 'f',
5244 'g',
5245 'h',
5246 'i'
5247 ];
5248
5249 // 10
5250 var a,
5251 b,
5252 c,
5253 d,
5254 e,
5255 f,
5256 g,
5257 h,
5258 i;
5259 JSEND
5260
5261 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005262 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005263
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005264 bwipe!
5265enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005266
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005267def Test_cindent_55()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005268 new
5269 setl cindent ts=4 sw=4
5270 setl cino&
5271
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005272 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005273 /* start of define */
5274 {
5275 }
5276 #define AAA \
5277 BBB\
5278 CCC
5279
5280 #define CNT \
5281 1 + \
5282 2 + \
5283 4
5284 /* end of define */
5285 [CODE]
5286
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005287 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005288 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005289 search('start of define')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005290 exe "normal =/end of define\n"
5291
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005292 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005293 /* start of define */
5294 {
5295 }
5296 #define AAA \
5297 BBB\
5298 CCC
5299
5300 #define CNT \
5301 1 + \
5302 2 + \
5303 4
5304 /* end of define */
5305
5306 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005307 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005308
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005309 bwipe!
5310enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005311
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005312def Test_cindent_56()
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005313 new
5314 setl cindent ts=4 sw=4
5315 setl cino&
5316
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005317 var code =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005318 {
5319 a = second/*bug*/*line;
5320 }
5321 [CODE]
5322
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005323 append(0, code)
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005324 normal gg
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005325 search('a = second')
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005326 normal ox
5327
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005328 var expected =<< trim [CODE]
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005329 {
5330 a = second/*bug*/*line;
5331 x
5332 }
5333
5334 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005335 assert_equal(expected, getline(1, '$'))
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005336
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005337 bwipe!
5338enddef
Bram Moolenaar1ab74a52019-05-31 20:02:53 +02005339
Bram Moolenaar02ad4632020-01-12 13:48:18 +01005340" this was going beyond the end of the line.
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005341def Test_cindent_case()
Bram Moolenaar02ad4632020-01-12 13:48:18 +01005342 new
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005343 setline(1, 'case x: // x')
Bram Moolenaar02ad4632020-01-12 13:48:18 +01005344 set cindent
5345 norm! f:a:
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005346 assert_equal('case x:: // x', getline(1))
Bram Moolenaar4b96df52020-01-26 22:00:26 +01005347 set cindent&
Bram Moolenaar02ad4632020-01-12 13:48:18 +01005348 bwipe!
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005349enddef
Bram Moolenaar02ad4632020-01-12 13:48:18 +01005350
Bram Moolenaarf5f1e102020-03-08 05:13:15 +01005351" Test for changing multiple lines (using c) with cindent
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005352def Test_cindent_change_multline()
Bram Moolenaarf5f1e102020-03-08 05:13:15 +01005353 new
5354 setlocal cindent
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005355 setline(1, ['if (a)', '{', ' i = 1;', '}'])
Bram Moolenaarf5f1e102020-03-08 05:13:15 +01005356 normal! jc3jm = 2;
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005357 assert_equal("\tm = 2;", getline(2))
5358 bwipe!
5359enddef
Bram Moolenaarf5f1e102020-03-08 05:13:15 +01005360
Bram Moolenaar60ae0e72022-05-16 18:06:15 +01005361" This was reading past the end of the line
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005362def Test_cindent_check_funcdecl()
Bram Moolenaar60ae0e72022-05-16 18:06:15 +01005363 new
5364 sil norm o0('\0=L
5365 bwipe!
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005366enddef
Bram Moolenaar60ae0e72022-05-16 18:06:15 +01005367
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005368def Test_cindent_scopedecls()
Tom Praschan3506cf32022-04-07 12:39:08 +01005369 new
5370 setl cindent ts=4 sw=4
5371 setl cino=g0
5372 setl cinsd+=public\ slots,signals
5373
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005374 var code =<< trim [CODE]
Tom Praschan3506cf32022-04-07 12:39:08 +01005375 class Foo
5376 {
5377 public:
5378 virtual void foo() = 0;
5379 public slots:
5380 void onBar();
5381 signals:
5382 void baz();
5383 private:
5384 int x;
5385 };
5386 [CODE]
5387
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005388 append(0, code)
Tom Praschan3506cf32022-04-07 12:39:08 +01005389 normal gg
5390 normal ]]=][
5391
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005392 var expected =<< trim [CODE]
Tom Praschan3506cf32022-04-07 12:39:08 +01005393 class Foo
5394 {
5395 public:
5396 virtual void foo() = 0;
5397 public slots:
5398 void onBar();
5399 signals:
5400 void baz();
5401 private:
5402 int x;
5403 };
5404
5405 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005406 assert_equal(expected, getline(1, '$'))
Tom Praschan3506cf32022-04-07 12:39:08 +01005407
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005408 bwipe!
5409enddef
Tom Praschan3506cf32022-04-07 12:39:08 +01005410
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005411def Test_cindent_pragma()
Bram Moolenaard881b512020-05-31 17:49:30 +02005412 new
5413 setl cindent ts=4 sw=4
5414 setl cino=Ps
5415
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005416 var code =<< trim [CODE]
Bram Moolenaard881b512020-05-31 17:49:30 +02005417 {
5418 #pragma omp parallel
5419 {
5420 #pragma omp task
5421 foo();
5422 # pragma omp taskwait
5423 }
5424 }
5425 [CODE]
5426
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005427 append(0, code)
Bram Moolenaard881b512020-05-31 17:49:30 +02005428 normal gg
5429 normal =G
5430
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005431 var expected =<< trim [CODE]
Bram Moolenaard881b512020-05-31 17:49:30 +02005432 {
5433 #pragma omp parallel
5434 {
5435 #pragma omp task
5436 foo();
5437 # pragma omp taskwait
5438 }
5439 }
5440
5441 [CODE]
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005442 assert_equal(expected, getline(1, '$'))
Bram Moolenaard881b512020-05-31 17:49:30 +02005443
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005444 bwipe!
5445enddef
Bram Moolenaard881b512020-05-31 17:49:30 +02005446
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005447def Test_backslash_at_end_of_line()
Bram Moolenaar78e0fa42021-10-05 21:58:53 +01005448 new
5449 exe "norm v>O'\\\<C-m>-"
5450 exe "norm \<C-q>="
5451 bwipe!
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005452enddef
Bram Moolenaar78e0fa42021-10-05 21:58:53 +01005453
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005454def Test_find_brace_backwards()
5455 # this was looking beyond the end of the line
Bram Moolenaar2de9b7c2021-11-19 19:41:13 +00005456 new
5457 norm R/*
5458 norm o0{
5459 norm o//
5460 norm V{=
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005461 assert_equal(['/*', ' 0{', '//'], getline(1, 3))
Bram Moolenaar2de9b7c2021-11-19 19:41:13 +00005462 bwipe!
Bram Moolenaar7e569d02022-05-21 21:30:50 +01005463enddef
Bram Moolenaar2de9b7c2021-11-19 19:41:13 +00005464
5465
Bram Moolenaar7720ba82017-03-08 22:19:26 +01005466" vim: shiftwidth=2 sts=2 expandtab