]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.1.1434: test 3 is old style v8.1.1434
authorBram Moolenaar <Bram@vim.org>
Fri, 31 May 2019 18:02:53 +0000 (20:02 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 31 May 2019 18:02:53 +0000 (20:02 +0200)
Problem:    Test 3 is old style.
Solution:   Turn into a new style test. (Yegappan Lakshmanan, closes #4460)

src/Makefile
src/testdir/Make_all.mak
src/testdir/Make_vms.mms
src/testdir/test3.in [deleted file]
src/testdir/test3.ok [deleted file]
src/testdir/test_cindent.vim
src/version.c

index 10405c61c13282b2c889dcf20b60376e4a78dfa1..1347499eb11afa89c4152723eb580949fb3f1f2e 100644 (file)
@@ -2181,7 +2181,6 @@ test_libvterm:
 # These do not depend on the executable, compile it when needed.
 test1 \
        test_eval \
-       test3 \
        test39 \
        test42 test44 test48 test49 \
        test52 test59 \
index ce9955f595279443fb5c8de08c35d03a4c447592..34644d6b9518793005de3aa2d80d5ae03982b9f8 100644 (file)
@@ -13,7 +13,6 @@ SCRIPTS_FIRST = \
 
 # Tests that run on all systems.
 SCRIPTS_ALL = \
-       test3.out \
        test39.out \
        test42.out \
        test44.out \
index 09d0692f8ba17c05ac30cf1536c6b7e324a3212b..88aff09e1f19556a8b1d9c8f02ad68f12e5cb38b 100644 (file)
@@ -73,7 +73,7 @@ VIMPROG = <->vim.exe
 
 .SUFFIXES : .out .in
 
-SCRIPT = test1.out test3.out \
+SCRIPT = test1.out \
        test39.out \
        test42.out test44.out test48.out test49.out \
        test64.out test69.out \
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
deleted file mode 100644 (file)
index 646fbb3..0000000
+++ /dev/null
@@ -1,2354 +0,0 @@
-/* vim: set cin ts=4 sw=4 : */
-
-Test for 'cindent'.
-For new tests, consider putting them in test_cindent.vim.
-
-STARTTEST
-:so small.vim
-:set nocompatible viminfo+=nviminfo modeline
-:edit                " read modeline
-/start of AUTO
-=/end of AUTO
-ENDTEST
-
-/* start of AUTO matically checked vim: set ts=4 : */
-{
-       if (test)
-               cmd1;
-       cmd2;
-}
-
-{
-       if (test)
-               cmd1;
-       else
-               cmd2;
-}
-
-{
-       if (test)
-       {
-               cmd1;
-               cmd2;
-       }
-}
-
-{
-       if (test)
-       {
-               cmd1;
-               else
-       }
-}
-
-{
-       while (this)
-               if (test)
-                       cmd1;
-       cmd2;
-}
-
-{
-       while (this)
-               if (test)
-                       cmd1;
-               else
-                       cmd2;
-}
-
-{
-       if (test)
-       {
-               cmd;
-       }
-
-       if (test)
-               cmd;
-}
-
-{
-       if (test) {
-               cmd;
-       }
-
-       if (test) cmd;
-}
-
-{
-       cmd1;
-       for (blah)
-               while (this)
-                       if (test)
-                               cmd2;
-       cmd3;
-}
-
-{
-       cmd1;
-       for (blah)
-               while (this)
-                       if (test)
-                               cmd2;
-       cmd3;
-
-       if (test)
-       {
-               cmd1;
-               cmd2;
-               cmd3;
-       }
-}
-
-
-/* Test for 'cindent' do/while mixed with if/else: */
-
-{
-       do
-               if (asdf)
-                       asdfasd;
-       while (cond);
-
-       do
-               if (asdf)
-                       while (asdf)
-                               asdf;
-       while (asdf);
-}
-
-/* Test for 'cindent' with two ) on a continuation line */
-{
-       if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
-                       aal;sdkjf  ( ;asldfkja;sldfk
-                                       al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
-               line up here;
-}
-
-
-/* C++ tests: */
-
-// foo()               these three lines should remain in column 0
-// {
-// }
-
-/* Test for continuation and unterminated lines: */
-{
-       i = 99 + 14325 +
-               21345 +
-               21345 +
-               21345 + ( 21345 +
-                               21345) +
-               2345 +
-               1234;
-       c = 1;
-}
-
-/*
-   testje for indent with empty line
-
-   here */
-
-{
-       if (testing &&
-                       not a joke ||
-                       line up here)
-               hay;
-       if (testing &&
-                       (not a joke || testing
-                       )line up here)
-               hay;
-       if (testing &&
-                       (not a joke || testing
-                        line up here))
-               hay;
-}
-
-
-{
-       switch (c)
-       {
-               case xx:
-                       do
-                               if (asdf)
-                                       do
-                                               asdfasdf;
-                                       while (asdf);
-                               else
-                                       asdfasdf;
-                       while (cond);
-               case yy:
-               case xx:
-               case zz:
-                       testing;
-       }
-}
-
-{
-       if (cond) {
-               foo;
-       }
-       else
-       {
-               bar;
-       }
-}
-
-{
-       if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
-                       alsdkfj (asldk;fj
-                                       awith cino=(0 ;lf this one goes to below the paren with ==
-                                                       ;laksjfd ;lsakdjf ;alskdf asd)
-                                       asdfasdf;)))
-               asdfasdf;
-}
-
-       int
-func(a, b)
-       int a;
-       int c;
-{
-       if (c1 && (c2 ||
-                       c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3)
-          )
-}
-
-{
-       while (asd)
-       {
-               if (asdf)
-                       if (test)
-                               if (that)
-                               {
-                                       if (asdf)
-                                               do
-                                                       cdasd;
-                                               while (as
-                                                               df);
-                               }
-                               else
-                                       if (asdf)
-                                               asdf;
-                                       else
-                                               asdf;
-               asdf;
-       }
-}
-
-{
-       s = "/*"; b = ';'
-               s = "/*"; b = ';';
-       a = b;
-}
-
-{
-       switch (a)
-       {
-               case a:
-                       switch (t)
-                       {
-                               case 1:
-                                       cmd;
-                                       break;
-                               case 2:
-                                       cmd;
-                                       break;
-                       }
-                       cmd;
-                       break;
-               case b:
-                       {
-                               int i;
-                               cmd;
-                       }
-                       break;
-               case c: {
-                                       int i;
-                                       cmd;
-                               }
-               case d: if (cond &&
-                                               test) {         /* this line doesn't work right */
-                                       int i;
-                                       cmd;
-                               }
-                               break;
-       }
-}
-
-{
-       if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
-                       (bp_to->b_p_initialized ||
-                        (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
-               return;
-label :
-       asdf = asdf ?
-               asdf : asdf;
-       asdf = asdf ?
-               asdf: asdf;
-}
-
-/* Special Comments    : This function has the added complexity (compared  */
-/*                                     : to addtolist) of having to check for a detail     */
-/*                                     : texture and add that to the list first.                   */
-
-char *(array[100]) = {
-       "testje",
-       "foo",
-       "bar",
-}
-
-enum soppie
-{
-yes = 0,
-no,
-maybe
-};
-
-typedef enum soppie
-{
-yes = 0,
-no,
-maybe
-};
-
-static enum
-{
-yes = 0,
-no,
-maybe
-} soppie;
-
-public static enum
-{
-yes = 0,
-no,
-maybe
-} soppie;
-
-static private enum
-{
-yes = 0,
-no,
-maybe
-} soppie;
-
-{
-       int a,
-               b;
-}
-
-{
-       struct Type
-       {
-               int i;
-               char *str;
-       } var[] =
-       {
-               0, "zero",
-               1, "one",
-               2, "two",
-               3, "three"
-       };
-
-       float matrix[3][3] =
-       {
-               {
-                       0,
-                       1,
-                       2
-               },
-               {
-                       3,
-                       4,
-                       5
-               },
-               {
-                       6,
-                       7,
-                       8
-               }
-       };
-}
-
-{
-       /* blah ( blah */
-       /* where does this go? */
-
-       /* blah ( blah */
-       cmd;
-
-       func(arg1,
-                       /* comment */
-                       arg2);
-       a;
-       {
-               b;
-               {
-                       c; /* Hey, NOW it indents?! */
-               }
-       }
-
-       {
-               func(arg1,
-                               arg2,
-                               arg3);
-               /* Hey, what am I doing here?  Is this coz of the ","? */
-       }
-}
-
-main ()
-{
-       if (cond)
-       {
-               a = b;
-       }
-       if (cond) {
-               a = c;
-       }
-       if (cond)
-               a = d;
-       return;
-}
-
-{
-       case 2: if (asdf &&
-                                       asdfasdf)
-                               aasdf;
-                       a = 9;
-       case 3: if (asdf)
-                               aasdf;
-                       a = 9;
-       case 4:    x = 1;
-                          y = 2;
-
-label: if (asdf)
-                       here;
-
-label:  if (asdf &&
-                               asdfasdf)
-               {
-               }
-
-label:  if (asdf &&
-                               asdfasdf) {
-                       there;
-               }
-
-label:  if (asdf &&
-                               asdfasdf)
-                       there;
-}
-
-{
-       /*
-          hello with ":set comments= cino=c5"
-        */
-
-       /*
-          hello with ":set comments= cino="
-        */
-}
-
-
-{
-       if (a < b) {
-               a = a + 1;
-       } else
-               a = a + 2;
-
-       if (a)
-               do {
-                       testing;
-               } while (asdfasdf);
-       a = b + 1;
-       asdfasdf
-}
-
-{
-for ( int i = 0;
-       i < 10; i++ )
-{
-}
-       i = 0;
-}
-
-class bob
-{
-       int foo() {return 1;}
-               int bar;
-}
-
-main()
-{
-while(1)
-if (foo)
-{
-bar;
-}
-else {
-asdf;
-}
-misplacedline;
-}
-
-{
-       if (clipboard.state == SELECT_DONE
-       && ((row == clipboard.start.lnum
-       && col >= clipboard.start.col)
-       || row > clipboard.start.lnum))
-}
-
-{
-if (1) {i += 4;}
-where_am_i;
-return 0;
-}
-
-{
-{
-} // sdf(asdf
-if (asdf)
-asd;
-}
-
-{
-label1:
-label2:
-}
-
-{
-int fooRet = foo(pBar1, false /*fKB*/,
-       true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
-f() {
-for ( i = 0;
-       i < m;
-       /* c */ i++ ) {
-a = b;
-}
-}
-}
-
-{
-       f1(/*comment*/);
-       f2();
-}
-
-{
-do {
-if (foo) {
-} else
-;
-} while (foo);
-foo(); // was wrong
-}
-
-int x;     // no extra indent because of the ;
-void func()
-{
-}
-
-char *tab[] = {"aaa",
-       "};", /* }; */ NULL}
-       int indented;
-{}
-
-char *a[] = {"aaa", "bbb",
-       "ccc", NULL};
-// here
-
-char *tab[] = {"aaa",
-       "xx", /* xx */};    /* asdf */
-int not_indented;
-
-{
-       do {
-               switch (bla)
-               {
-                       case 1: if (foo)
-                                               bar;
-               }
-       } while (boo);
-                                       wrong;
-}
-
-int    foo,
-       bar;
-int foo;
-
-#if defined(foo) \
-       && defined(bar)
-char * xx = "asdf\
-       foo\
-       bor";
-int x;
-
-char    *foo = "asdf\
-       asdf\
-       asdf",
-       *bar;
-
-void f()
-{
-#if defined(foo) \
-       && defined(bar)
-char    *foo = "asdf\
-       asdf\
-       asdf",
-       *bar;
-       {
-       int i;
-char    *foo = "asdf\
-       asdf\
-       asdf",
-       *bar;
-       }
-#endif
-}
-#endif
-
-int y;         // comment
-               // comment
-
-       // comment
-
-{
-       Constructor(int a,
-                       int b )  : BaseClass(a)
-       {
-       }
-}
-
-void foo()
-{
-       char one,
-       two;
-       struct bla piet,
-       jan;
-       enum foo kees,
-       jannie;
-       static unsigned sdf,
-       krap;
-       unsigned int piet,
-       jan;
-       int
-       kees,
-       jan;
-}
-
-{
-       t(int f,
-                       int d);         // )
-       d();
-}
-
-Constructor::Constructor(int a,
-                         int b 
-                        )  : 
-   BaseClass(a,
-             b,
-             c),
-   mMember(b),
-{
-}
-
-Constructor::Constructor(int a,
-                         int b )  : 
-   BaseClass(a)
-{
-}
-
-Constructor::Constructor(int a,
-                         int b ) /*x*/ : /*x*/ BaseClass(a),
-                                               member(b)
-{
-}
-
-A::A(int a, int b)
-: aa(a),
-bb(b),
-cc(c)
-{
-}
-
-class CAbc :
-   public BaseClass1,
-   protected BaseClass2
-{
-   int Test() { return FALSE; }
-   int Test1() { return TRUE; }
-
-   CAbc(int a, int b )  : 
-      BaseClass(a)
-   { 
-      switch(xxx)
-      {
-         case abc:
-            asdf();
-            break;
-
-         case 999:
-            baer();
-            break;
-      }
-   }
-
-public: // <-- this was incoreectly indented before!!
-   void testfall();
-protected:
-   void testfall();
-};
-
-class CAbc : public BaseClass1,
-             protected BaseClass2
-{
-};
-
-static struct
-{
-    int a;
-    int b;
-} variable[COUNT] =
-{
-    {
-        123,
-        456
-    },
-       {
-        123,
-        456
-    }
-};
-
-static struct
-{
-    int a;
-    int b;
-} variable[COUNT] =
-{
-    { 123, 456 },
-       { 123, 456 }
-};
-
-void asdf()            /* ind_maxparen may cause trouble here */
-{
-       if ((0
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1)) break;
-}
-
-foo()
-{
-       a = cond ? foo() : asdf
-                                          + asdf;
-
-       a = cond ?
-               foo() : asdf
-                               + asdf;
-}
-
-int  main(void)
-{
-       if (a)
-               if (b)
-                       2;
-               else 3;
-       next_line_of_code();
-}
-
-barry()
-{
-       Foo::Foo (int one,
-                       int two)
-               : something(4)
-       {}
-}
-
-barry()
-{
-       Foo::Foo (int one, int two)
-               : something(4)
-       {}
-}
-
-Constructor::Constructor(int a,
-               int b 
-               )  : 
-       BaseClass(a,
-                       b,
-                       c),
-       mMember(b)
-{
-}
-       int main ()
-       {
-        if (lala)
-          do
-            ++(*lolo);
-          while (lili
-                 && lele);
-          lulu;
-       }
-
-int main ()
-{
-switch (c)
-{
-case 'c': if (cond)
-{
-}
-}
-}
-
-main()
-{
-       (void) MyFancyFuasdfadsfnction(
-                       argument);
-}
-
-main()
-{
-       char    foo[] = "/*";
-       /* as
-       df */
-               hello
-}
-
-/* valid namespaces with normal indent */
-namespace
-{
-{
-  111111111111;
-}
-}
-namespace /* test */
-{
-  11111111111111111;
-}
-namespace // test
-{
-  111111111111111111;
-}
-namespace
-{
-  111111111111111111;
-}
-namespace test
-{
-  111111111111111111;
-}
-namespace{
-  111111111111111111;
-}
-namespace test{
-  111111111111111111;
-}
-namespace {
-  111111111111111111;
-}
-namespace test {
-  111111111111111111;
-namespace test2 {
-  22222222222222222;
-}
-}
-
-/* invalid namespaces use block indent */
-namespace test test2 {
-  111111111111111111111;
-}
-namespace11111111111 {
-  111111111111;
-}
-namespace() {
-  1111111111111;
-}
-namespace()
-{
-  111111111111111111;
-}
-namespace test test2
-{
-  1111111111111111111;
-}
-namespace111111111
-{
-  111111111111111111;
-}
-
-void getstring() {
-/* Raw strings */
-const char* s = R"(
-  test {
-    # comment
-    field: 123
-  }
- )";
-     }
-
-void getstring() {
-const char* s = R"foo(
-  test {
-    # comment
-    field: 123
-  }
-    )foo";
-     }
-
-{
-int a[4] = {
-[0] = 0,
-[1] = 1,
-[2] = 2,
-[3] = 3,
-};
-}
-
-{
-a = b[2]
-+ 3;
-}
-
-{
-if (1)
-/* aaaaa
-* bbbbb
-*/
-a = 1;
-}
-
-void func()
-{
-switch (foo)
-{
-case (bar):
-if (baz())
-quux();
-break;
-case (shmoo):
-if (!bar)
-{
-}
-case (foo1):
-switch (bar)
-{
-case baz:
-baz_f();
-break;
-}
-break;
-default:
-baz();
-baz();
-break;
-}
-}
-
-/* end of AUTO */
-
-STARTTEST
-:set tw=0 noai fo=croq
-:let &wm = &columns - 20
-/serious/e
-a about life, the universe, and the rest\e
-ENDTEST
-
-{
-
-/* this is
- * a real serious important big
- * comment
- */
-       /* insert " about life, the universe, and the rest" after "serious" */
-}
-
-STARTTEST
-:set nocin
-/comments
-joabout life\e/happens
-jothere\e/below
-oline\e/this
-Ohello\e
-ENDTEST
-
-{
-       /*
-        * Testing for comments, without 'cin' set
-        */
-
-/*
-* what happens here?
-*/
-
-       /*
-          the end of the comment, try inserting a line below */
-
-               /* how about
-                               this one */
-}
-
-STARTTEST
-:set cin
-/vec2
-==
-ENDTEST
-
-{
-    var = this + that + vec[0] * vec[0]
-                                     + vec[1] * vec[1]
-                                         + vec2[2] * vec[2];
-}
-
-STARTTEST
-:set cin
-:set cino=}4
-/testing1
-k2==/testing2
-k2==
-ENDTEST
-
-{
-               asdf asdflkajds f;
-       if (tes & ting) {
-               asdf asdf asdf ;
-               asdfa sdf asdf;
-               }
-       testing1;
-       if (tes & ting)
-       {
-               asdf asdf asdf ;
-               asdfa sdf asdf;
-               }
-       testing2;
-}
-
-STARTTEST
-:set cin
-:set cino=(0,)20
-/main
-=][
-ENDTEST
-
-main ( int first_par, /*
-                       * Comment for
-                       * first par
-                       */
-          int second_par /*
-                       * Comment for
-                       * second par
-                       */
-     )
-{
-       func( first_par, /*
-                      * Comment for
-                      * first par
-                      */
-    second_par /*
-                      * Comment for
-                      * second par
-                      */
-        );
-
-}
-
-STARTTEST
-:set cin
-:set cino=es,n0s
-/main
-=][
-ENDTEST
-
-main(void)
-{
-       /* Make sure that cino=X0s is not parsed like cino=Xs. */
-       if (cond)
-               foo();
-       else
-       {
-               bar();
-       }
-}
-
-STARTTEST
-:set cin
-:set cino=
-]]=][
-ENDTEST
-
-{
-       do
-       {
-               if ()
-               {
-                       if ()
-                               asdf;
-                       else
-                               asdf;
-               }
-       } while ();
-                       cmd;            /* this should go under the } */
-}
-
-STARTTEST
-]]=][
-ENDTEST
-
-void f()
-{
-    if ( k() ) {
-        l();
-
-    } else { /* Start (two words) end */
-        m();
-    }
-
-    n();
-}
-
-STARTTEST
-:set cino={s,e-s
-]]=][
-ENDTEST
-
-void f()
-{
-    if ( k() )
-       {
-        l();
-    } else { /* Start (two words) end */
-        m();
-    }
-               n();    /* should be under the if () */
-}
-
-STARTTEST
-:set cino={s,fs
-]]=/ foo
-ENDTEST
-
-void bar(void)
-{
-       static array[2][2] =
-       {
-               { 1, 2 },
-               { 3, 4 },
-       }
-
-       while (a)
-       {
-               foo(&a);
-       }
-
-       {
-               int a;
-               {
-                       a = a + 1;
-               }
-       }
-       b = a;
-       }
-
-void func(void)
-       {
-       a = 1;
-       {
-               b = 2;
-       }
-       c = 3;
-       d = 4;
-       }
-/* foo */
-
-STARTTEST
-:set cino=
-/while
-ohere\e
-ENDTEST
-
-a()
-{
-  do {
-    a = a +
-      a;
-  } while ( a );               /* add text under this line */
-    if ( a )
-      a;
-}
-
-STARTTEST
-:set cino= com=
-/comment
-olabel2: b();\rlabel3 /* post */:\r/* pre */ label4:\rf(/*com*/);\rif (/*com*/)\rcmd();\e
-ENDTEST
-
-a()
-{
-label1:
-            /* hmm */
-            // comment
-}
-
-STARTTEST
-:set comments& comments^=s:/*,m:**,ex:*/
-/simple
-=5j
-ENDTEST
-
-/*
-  * A simple comment
-   */
-
-/*
-  ** A different comment
-   */
-
-STARTTEST
-:set cino=c0
-:set comments& comments-=s1:/* comments^=s0:/*
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-
-       /*********
-  A comment.
-*********/
-}
-
-STARTTEST
-:set cino=c0,C1
-:set comments& comments-=s1:/* comments^=s0:/*
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-
-       /*********
-  A comment.
-*********/
-}
-
-STARTTEST
-:set cino=
-]]=][
-ENDTEST
-
-void f()
-{
-       c = c1 &&
-       (
-       c2 ||
-       c3
-       ) && c4;
-}
-
-STARTTEST
-:set cino=(s
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       c = c1 &&
-       (
-       c2 ||
-       c3
-       ) && c4;
-}
-
-STARTTEST
-:set cino=(s,U1  
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       c = c1 &&
-       (
-       c2 ||
-       c3
-       ) && c4;
-}
-
-STARTTEST
-:set cino=(0
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       if (   c1
-       && (   c2
-       || c3))
-       foo;
-}
-
-STARTTEST
-:set cino=(0,w1  
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       if (   c1
-       && (   c2
-       || c3))
-       foo;
-}
-
-STARTTEST
-:set cino=(s
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       c = c1 && (
-       c2 ||
-       c3
-       ) && c4;
-       if (
-       c1 && c2
-       )
-       foo;
-}
-
-STARTTEST
-:set cino=(s,m1  
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       c = c1 && (
-       c2 ||
-       c3
-       ) && c4;
-       if (
-       c1 && c2
-       )
-       foo;
-}
-
-STARTTEST
-:set cino=b1
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       switch (x)
-       {
-               case 1:
-                       a = b;
-                       break;
-               default:
-                       a = 0;
-                       break;
-       }
-}
-
-STARTTEST
-:set cino=(0,W5
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       invokeme(
-       argu,
-       ment);
-       invokeme(
-       argu,
-       ment
-       );
-       invokeme(argu,
-       ment
-       );
-}
-
-STARTTEST
-:set cino=/6
-2kdd]]=][
-ENDTEST
-
-void f()
-{
-       statement;
-               // comment 1
-       // comment 2
-}
-
-STARTTEST
-:set cino=
-2kdd]]/comment 1/+1
-==
-ENDTEST
-
-void f()
-{
-       statement;
-          // comment 1
-       // comment 2
-}
-
-STARTTEST
-:set cino=g0
-2kdd]]=][
-ENDTEST
-
-class CAbc
-{
-   int Test() { return FALSE; }
-
-public: // comment
-   void testfall();
-protected:
-   void testfall();
-};
-
-STARTTEST
-:set cino=(0,gs,hs
-2kdd]]=][
-ENDTEST
-
-class Foo : public Bar
-{
-public:
-virtual void method1(void) = 0;
-virtual void method2(int arg1,
-int arg2,
-int arg3) = 0;
-};
-
-STARTTEST
-:set cino=+20
-2kdd]]=][
-ENDTEST
-
-       void
-foo()
-{
-       if (a)
-       {
-       } else
-               asdf;
-}
-
-STARTTEST
-:set cino=(0,W2s
-2kdd]]=][
-ENDTEST
-
-{
-   averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
-         asdasdf,
-         func(asdf,
-              asdfadsf),
-         asdfasdf
-         );
-
-   /* those are ugly, but consequent */
-
-   func()->asd(asdasdf,
-               averylongfunctionname(
-                     abc,
-                     dec)->averylongfunctionname(
-                           asdfadsf,
-                           asdfasdf,
-                           asdfasdf,
-                           ),
-               func(asdfadf,
-                    asdfasdf
-                   ),
-               asdasdf
-              );
-
-   averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
-               abc,
-               dec)->asdfasdfasdf(
-                     asdfadsf,
-                     asdfasdf,
-                     asdfasdf,
-                     ),
-         func(asdfadf,
-              asdfasdf),
-         asdasdf
-         );
-}
-
-STARTTEST
-:set cino=M1
-2kdd]]=][
-ENDTEST
-
-int main ()
-{
-       if (cond1 &&
-                       cond2
-                       )
-               foo;
-}
-
-STARTTEST
-:set cino=(0,ts
-2kdd2j=][
-ENDTEST
-
-void func(int a
-#if defined(FOO)
-                 , int b
-                 , int c
-#endif
-                )
-{
-}
-
-STARTTEST
-:set cino=(0
-2kdd2j=][
-ENDTEST
-
-void
-func(int a
-#if defined(FOO)
-                 , int b
-                 , int c
-#endif
-                )
-{
-}
-
-STARTTEST
-:set cino&
-2kdd2j=7][
-ENDTEST
-
-void func(void)
-{
-       if(x==y)
-               if(y==z)
-                       foo=1;
-               else { bar=1;
-                       baz=2;
-               }
-       printf("Foo!\n");
-}
-
-void func1(void)
-{
-       char* tab[] = {"foo", "bar",
-               "baz", "quux",
-                       "this line used", "to be indented incorrectly"};
-       foo();
-}
-
-void func2(void)
-{
-       int tab[] =
-       {1, 2,
-               3, 4,
-               5, 6};
-
-               printf("This line used to be indented incorrectly.\n");
-}
-
-int foo[]
-#ifdef BAR
-
-= { 1, 2, 3,
-       4, 5, 6 }
-
-#endif
-;
-       int baz;
-
-void func3(void)
-{
-       int tab[] = {
-       1, 2,
-       3, 4,
-       5, 6};
-
-printf("Don't you dare indent this line incorrectly!\n");
-}
-
-void
-func4(a, b,
-               c)
-int a;
-int b;
-int c;
-{
-}
-
-void
-func5(
-               int a,
-               int b)
-{
-}
-
-void
-func6(
-               int a)
-{
-}
-
-STARTTEST
-:set cino&
-:set cino+=l1
-2kdd2j=][
-ENDTEST
-
-void func(void)
-{
-       int tab[] =
-       {
-               1, 2, 3,
-               4, 5, 6};
-
-       printf("Indent this line correctly!\n");
-
-       switch (foo)
-       {
-               case bar:
-                       printf("bar");
-                       break;
-               case baz: {
-                       printf("baz");
-                       break;
-               }
-               case quux:
-printf("But don't break the indentation of this instruction\n");
-break;
-       }
-}
-
-STARTTEST
-:set cino&
-2kdd2j=][
-ENDTEST
-
-void func(void)
-{
-       cout << "a"
-       << "b"
-       << ") :"
-       << "c";
-}
-
-STARTTEST
-:set com=s1:/*,m:*,ex:*/
-]]3jofoo();\e
-ENDTEST
-
-void func(void)
-{
-       /*
-        * This is a comment.
-        */
-}
-
-STARTTEST
-:set cino&
-2kdd2j=][
-ENDTEST
-
-void func(void)
-{
-       for (int i = 0; i < 10; ++i)
-               if (i & 1) {
-                       foo(1);
-               } else
-                       foo(0);
-baz();
-}
-
-STARTTEST
-:set cino=k2s,(0
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-       && condition2)
-       action();
-       function(argument1
-       && argument2);
-
-       if (c1 && (c2 ||
-       c3))
-       foo;
-       if (c1 &&
-       (c2 || c3))
-       {
-       }
-
-       if (   c1
-       && (      c2
-       || c3))
-       foo;
-       func( c1
-       && (     c2
-       || c3))
-       foo;
-}
-
-STARTTEST
-:set cino=k2s,(s
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-       && condition2)
-       action();
-       function(argument1
-       && argument2);
-
-       if (c1 && (c2 ||
-       c3))
-       foo;
-       if (c1 &&
-       (c2 || c3))
-       {
-       }
-
-       if (   c1
-       && (      c2
-       || c3))
-       foo;
-       func(   c1
-       && (      c2
-       || c3))
-       foo;
-}
-
-STARTTEST
-:set cino=k2s,(s,U1
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-       && condition2)
-       action();
-       function(argument1
-       && argument2);
-
-       if (c1 && (c2 ||
-       c3))
-       foo;
-       if (c1 &&
-       (c2 || c3))
-       {
-       }
-       if (c123456789
-       && (c22345
-       || c3))
-       printf("foo\n");
-
-       c = c1 &&
-       (
-       c2 ||
-       c3
-       ) && c4;
-}
-
-STARTTEST
-:set cino=k2s,(0,W4
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-       && condition2)
-       action();
-       function(argument1
-       && argument2);
-
-       if (c1 && (c2 ||
-       c3))
-       foo;
-       if (c1 &&
-       (c2 || c3))
-       {
-       }
-       if (c123456789
-       && (c22345
-       || c3))
-       printf("foo\n");
-
-       if (   c1
-       && (   c2
-       || c3))
-       foo;
-
-       a_long_line(
-       argument,
-       argument);
-       a_short_line(argument,
-       argument);
-}
-
-STARTTEST
-:set cino=k2s,u2
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-       && condition2)
-       action();
-       function(argument1
-       && argument2);
-
-       if (c1 && (c2 ||
-       c3))
-       foo;
-       if (c1 &&
-       (c2 || c3))
-       {
-       }
-       if (c123456789
-       && (c22345
-       || c3))
-       printf("foo\n");
-}
-
-STARTTEST
-:set cino=k2s,(0,w1
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-       && condition2)
-       action();
-       function(argument1
-       && argument2);
-
-       if (c1 && (c2 ||
-       c3))
-       foo;
-       if (c1 &&
-       (c2 || c3))
-       {
-       }
-       if (c123456789
-       && (c22345
-       || c3))
-       printf("foo\n");
-
-       if (   c1
-       && (      c2
-       || c3))
-       foo;
-       func(   c1
-       && (      c2
-       || c3))
-       foo;
-}
-
-STARTTEST
-:set cino=k2,(s
-2kdd3j=][
-ENDTEST
-
-void func(void)
-{
-       if (condition1
-         && condition2)
-               action();
-       function(argument1
-               && argument2);
-
-       if (c1 && (c2 ||
-                 c3))
-               foo;
-       if (c1 &&
-         (c2 || c3))
-       {
-       }
-}
-
-STARTTEST
-:set cino=N-s
-/^NAMESPACESTART
-=/^NAMESPACEEND
-ENDTEST
-
-NAMESPACESTART
-/* valid namespaces with normal indent */
-namespace
-{
-   {
-       111111111111;
-}
-}
-namespace /* test */
-{
-  11111111111111111;
-}
-namespace // test
-{
-  111111111111111111;
-}
-namespace
-{
-  111111111111111111;
-}
-namespace test
-{
-  111111111111111111;
-}
-namespace test::cpp17
-{
-  111111111111111111;
-}
-namespace ::incorrectcpp17
-{
-  111111111111111111;
-}
-namespace test::incorrectcpp17::
-{
-  111111111111111111;
-}
-namespace test:incorrectcpp17
-{
-  111111111111111111;
-}
-namespace test:::incorrectcpp17
-{
-  111111111111111111;
-}
-namespace{
-  111111111111111111;
-}
-namespace test{
-  111111111111111111;
-}
-namespace {
-  111111111111111111;
-}
-namespace test {
-  111111111111111111;
-namespace test2 {
-  22222222222222222;
-}
-}
-
-/* invalid namespaces use block indent */
-namespace test test2 {
-  111111111111111111111;
-}
-namespace11111111111 {
-  111111111111;
-}
-namespace() {
-  1111111111111;
-}
-namespace()
-{
-  111111111111111111;
-}
-namespace test test2
-{
-  1111111111111111111;
-}
-namespace111111111
-{
-  111111111111111111;
-}
-NAMESPACEEND
-
-
-STARTTEST
-:set cino=j1,J1
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-var bar = {
-foo: {
-that: this,
-some: ok,
-},
-"bar":{
-a : 2,
-b: "123abc",
-x: 4,
-"y": 5
-}
-}
-JSEND
-
-STARTTEST
-:set cino=j1,J1
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-var foo = [
-1,
-2,
-3
-];
-JSEND
-
-STARTTEST
-:set cino=j1,J1
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-function bar() {
-var foo = [
-1,
-2,
-3
-];
-}
-JSEND
-
-STARTTEST
-:set cino=j1,J1
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-(function($){
-
-if (cond &&
-cond) {
-stmt;
-}
-window.something.left =
-(width - 50 + offset) + "px";
-var class_name='myclass';
-
-function private_method() {
-}
-
-var public_method={
-method: function(options,args){
-private_method();
-}
-}
-
-function init(options) {
-
-$(this).data(class_name+'_public',$.extend({},{
-foo: 'bar',
-bar: 2,
-foobar: [
-1,
-2,
-3
-],
-callback: function(){
-return true;
-}
-}, options||{}));
-}
-
-$.fn[class_name]=function() {
-
-var _arguments=arguments;
-return this.each(function(){
-
-var options=$(this).data(class_name+'_public');
-if (!options) {
-init.apply(this,_arguments);
-
-} else {
-var method=public_method[_arguments[0]];
-
-if (typeof(method)!='function') {
-console.log(class_name+' has no method "'+_arguments[0]+'"');
-return false;
-}
-_arguments[0]=options;
-method.apply(this,_arguments);
-}
-});
-}
-
-})(jQuery);
-JSEND
-
-STARTTEST
-:set cino=j1,J1
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-function init(options) {
-$(this).data(class_name+'_public',$.extend({},{
-foo: 'bar',
-bar: 2,
-foobar: [
-1,
-2,
-3
-],
-callback: function(){
-return true;
-}
-}, options||{}));
-}
-JSEND
-
-STARTTEST
-:set cino=j1,J1
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-(function($){
-function init(options) {
-$(this).data(class_name+'_public',$.extend({},{
-foo: 'bar',
-bar: 2,
-foobar: [
-1,
-2,
-3
-],
-callback: function(){
-return true;
-}
-}, options||{}));
-}
-})(jQuery);
-JSEND
-
-STARTTEST
-:set cino=j1,J1,+2
-/^JSSTART
-=/^JSEND
-ENDTEST
-
-JSSTART
-// Results of JavaScript indent
-// 1
-(function(){
-var a = [
-'a',
-'b',
-'c',
-'d',
-'e',
-'f',
-'g',
-'h',
-'i'
-];
-}())
-
-// 2
-(function(){
-var a = [
-0 +
-5 *
-9 *
-'a',
-'b',
-0 +
-5 *
-9 *
-'c',
-'d',
-'e',
-'f',
-'g',
-'h',
-'i'
-];
-}())
-
-// 3
-(function(){
-var a = [
-0 +
-// comment 1
-5 *
-/* comment 2 */
-9 *
-'a',
-'b',
-0 +
-5 *
-9 *
-'c',
-'d',
-'e',
-'f',
-'g',
-'h',
-'i'
-];
-}())
-
-// 4
-{
-var a = [
-0,
-1
-];
-var b;
-var c;
-}
-
-// 5
-{
-var a = [
-[
-0
-],
-2,
-3
-];
-}
-
-// 6
-{
-var a = [
-[
-0,
-1
-],
-2,
-3
-];
-}
-
-// 7
-{
-var a = [
-// [
-0,
-// 1
-// ],
-2,
-3
-];
-}
-
-// 8
-var x = [
-(function(){
-var a,
-b,
-c,
-d,
-e,
-f,
-g,
-h,
-i;
-})
-];
-
-// 9
-var a = [
-0 +
-5 *
-9 *
-'a',
-'b',
-0 +
-5 *
-9 *
-'c',
-'d',
-'e',
-'f',
-'g',
-'h',
-'i'
-];
-
-// 10
-var a,
-b,
-c,
-d,
-e,
-f,
-g,
-h,
-i;
-JSEND
-
-STARTTEST
-:set cin cino&
-/start of define
-=/end of define
-ENDTEST
-
-/* start of define */
-{
-}
-#define AAA \
-BBB\
-CCC
-
-#define CNT \
-1 + \
-2 + \
-4
-/* end of define */
-
-STARTTEST
-:set cin cino&
-/a = second
-ox\e
-ENDTEST
-
-{
-       a = second/*bug*/*line;
-}
-
-STARTTEST
-:g/^STARTTEST/.,/^ENDTEST/d
-:1;/start of AUTO/,$wq! test.out
-ENDTEST
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
deleted file mode 100644 (file)
index 035ea39..0000000
+++ /dev/null
@@ -1,2102 +0,0 @@
-/* start of AUTO matically checked vim: set ts=4 : */
-{
-       if (test)
-               cmd1;
-       cmd2;
-}
-
-{
-       if (test)
-               cmd1;
-       else
-               cmd2;
-}
-
-{
-       if (test)
-       {
-               cmd1;
-               cmd2;
-       }
-}
-
-{
-       if (test)
-       {
-               cmd1;
-               else
-       }
-}
-
-{
-       while (this)
-               if (test)
-                       cmd1;
-       cmd2;
-}
-
-{
-       while (this)
-               if (test)
-                       cmd1;
-               else
-                       cmd2;
-}
-
-{
-       if (test)
-       {
-               cmd;
-       }
-
-       if (test)
-               cmd;
-}
-
-{
-       if (test) {
-               cmd;
-       }
-
-       if (test) cmd;
-}
-
-{
-       cmd1;
-       for (blah)
-               while (this)
-                       if (test)
-                               cmd2;
-       cmd3;
-}
-
-{
-       cmd1;
-       for (blah)
-               while (this)
-                       if (test)
-                               cmd2;
-       cmd3;
-
-       if (test)
-       {
-               cmd1;
-               cmd2;
-               cmd3;
-       }
-}
-
-
-/* Test for 'cindent' do/while mixed with if/else: */
-
-{
-       do
-               if (asdf)
-                       asdfasd;
-       while (cond);
-
-       do
-               if (asdf)
-                       while (asdf)
-                               asdf;
-       while (asdf);
-}
-
-/* Test for 'cindent' with two ) on a continuation line */
-{
-       if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
-                       aal;sdkjf  ( ;asldfkja;sldfk
-                               al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
-               line up here;
-}
-
-
-/* C++ tests: */
-
-// foo()               these three lines should remain in column 0
-// {
-// }
-
-/* Test for continuation and unterminated lines: */
-{
-       i = 99 + 14325 +
-               21345 +
-               21345 +
-               21345 + ( 21345 +
-                               21345) +
-               2345 +
-               1234;
-       c = 1;
-}
-
-/*
-   testje for indent with empty line
-
-   here */
-
-{
-       if (testing &&
-                       not a joke ||
-                       line up here)
-               hay;
-       if (testing &&
-                       (not a joke || testing
-                       )line up here)
-               hay;
-       if (testing &&
-                       (not a joke || testing
-                        line up here))
-               hay;
-}
-
-
-{
-       switch (c)
-       {
-               case xx:
-                       do
-                               if (asdf)
-                                       do
-                                               asdfasdf;
-                                       while (asdf);
-                               else
-                                       asdfasdf;
-                       while (cond);
-               case yy:
-               case xx:
-               case zz:
-                       testing;
-       }
-}
-
-{
-       if (cond) {
-               foo;
-       }
-       else
-       {
-               bar;
-       }
-}
-
-{
-       if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
-                               alsdkfj (asldk;fj
-                                       awith cino=(0 ;lf this one goes to below the paren with ==
-                                               ;laksjfd ;lsakdjf ;alskdf asd)
-                                       asdfasdf;)))
-               asdfasdf;
-}
-
-       int
-func(a, b)
-       int a;
-       int c;
-{
-       if (c1 && (c2 ||
-                               c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3)
-          )
-}
-
-{
-       while (asd)
-       {
-               if (asdf)
-                       if (test)
-                               if (that)
-                               {
-                                       if (asdf)
-                                               do
-                                                       cdasd;
-                                               while (as
-                                                               df);
-                               }
-                               else
-                                       if (asdf)
-                                               asdf;
-                                       else
-                                               asdf;
-               asdf;
-       }
-}
-
-{
-       s = "/*"; b = ';'
-               s = "/*"; b = ';';
-       a = b;
-}
-
-{
-       switch (a)
-       {
-               case a:
-                       switch (t)
-                       {
-                               case 1:
-                                       cmd;
-                                       break;
-                               case 2:
-                                       cmd;
-                                       break;
-                       }
-                       cmd;
-                       break;
-               case b:
-                       {
-                               int i;
-                               cmd;
-                       }
-                       break;
-               case c: {
-                                       int i;
-                                       cmd;
-                               }
-               case d: if (cond &&
-                                               test) {         /* this line doesn't work right */
-                                       int i;
-                                       cmd;
-                               }
-                               break;
-       }
-}
-
-{
-       if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
-                       (bp_to->b_p_initialized ||
-                        (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
-               return;
-label :
-       asdf = asdf ?
-               asdf : asdf;
-       asdf = asdf ?
-               asdf: asdf;
-}
-
-/* Special Comments    : This function has the added complexity (compared  */
-/*                                     : to addtolist) of having to check for a detail     */
-/*                                     : texture and add that to the list first.                   */
-
-char *(array[100]) = {
-       "testje",
-       "foo",
-       "bar",
-}
-
-enum soppie
-{
-       yes = 0,
-       no,
-       maybe
-};
-
-typedef enum soppie
-{
-       yes = 0,
-       no,
-       maybe
-};
-
-static enum
-{
-       yes = 0,
-       no,
-       maybe
-} soppie;
-
-public static enum
-{
-       yes = 0,
-       no,
-       maybe
-} soppie;
-
-static private enum
-{
-       yes = 0,
-       no,
-       maybe
-} soppie;
-
-{
-       int a,
-               b;
-}
-
-{
-       struct Type
-       {
-               int i;
-               char *str;
-       } var[] =
-       {
-               0, "zero",
-               1, "one",
-               2, "two",
-               3, "three"
-       };
-
-       float matrix[3][3] =
-       {
-               {
-                       0,
-                       1,
-                       2
-               },
-               {
-                       3,
-                       4,
-                       5
-               },
-               {
-                       6,
-                       7,
-                       8
-               }
-       };
-}
-
-{
-       /* blah ( blah */
-       /* where does this go? */
-
-       /* blah ( blah */
-       cmd;
-
-       func(arg1,
-                       /* comment */
-                       arg2);
-       a;
-       {
-               b;
-               {
-                       c; /* Hey, NOW it indents?! */
-               }
-       }
-
-       {
-               func(arg1,
-                               arg2,
-                               arg3);
-               /* Hey, what am I doing here?  Is this coz of the ","? */
-       }
-}
-
-main ()
-{
-       if (cond)
-       {
-               a = b;
-       }
-       if (cond) {
-               a = c;
-       }
-       if (cond)
-               a = d;
-       return;
-}
-
-{
-       case 2: if (asdf &&
-                                       asdfasdf)
-                               aasdf;
-                       a = 9;
-       case 3: if (asdf)
-                               aasdf;
-                       a = 9;
-       case 4:    x = 1;
-                          y = 2;
-
-label: if (asdf)
-                       here;
-
-label:  if (asdf &&
-                               asdfasdf)
-               {
-               }
-
-label:  if (asdf &&
-                               asdfasdf) {
-                       there;
-               }
-
-label:  if (asdf &&
-                               asdfasdf)
-                       there;
-}
-
-{
-       /*
-          hello with ":set comments= cino=c5"
-        */
-
-       /*
-          hello with ":set comments= cino="
-        */
-}
-
-
-{
-       if (a < b) {
-               a = a + 1;
-       } else
-               a = a + 2;
-
-       if (a)
-               do {
-                       testing;
-               } while (asdfasdf);
-       a = b + 1;
-       asdfasdf
-}
-
-{
-       for ( int i = 0;
-                       i < 10; i++ )
-       {
-       }
-       i = 0;
-}
-
-class bob
-{
-       int foo() {return 1;}
-       int bar;
-}
-
-main()
-{
-       while(1)
-               if (foo)
-               {
-                       bar;
-               }
-               else {
-                       asdf;
-               }
-       misplacedline;
-}
-
-{
-       if (clipboard.state == SELECT_DONE
-                       && ((row == clipboard.start.lnum
-                                       && col >= clipboard.start.col)
-                               || row > clipboard.start.lnum))
-}
-
-{
-       if (1) {i += 4;}
-       where_am_i;
-       return 0;
-}
-
-{
-       {
-       } // sdf(asdf
-       if (asdf)
-               asd;
-}
-
-{
-label1:
-label2:
-}
-
-{
-       int fooRet = foo(pBar1, false /*fKB*/,
-                       true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
-       f() {
-               for ( i = 0;
-                               i < m;
-                               /* c */ i++ ) {
-                       a = b;
-               }
-       }
-}
-
-{
-       f1(/*comment*/);
-       f2();
-}
-
-{
-       do {
-               if (foo) {
-               } else
-                       ;
-       } while (foo);
-       foo();  // was wrong
-}
-
-int x;     // no extra indent because of the ;
-void func()
-{
-}
-
-char *tab[] = {"aaa",
-       "};", /* }; */ NULL}
-       int indented;
-{}
-
-char *a[] = {"aaa", "bbb",
-       "ccc", NULL};
-// here
-
-char *tab[] = {"aaa",
-       "xx", /* xx */};    /* asdf */
-int not_indented;
-
-{
-       do {
-               switch (bla)
-               {
-                       case 1: if (foo)
-                                               bar;
-               }
-       } while (boo);
-       wrong;
-}
-
-int    foo,
-       bar;
-int foo;
-
-#if defined(foo) \
-       && defined(bar)
-char * xx = "asdf\
-                        foo\
-                        bor";
-int x;
-
-char    *foo = "asdf\
-                               asdf\
-                               asdf",
-               *bar;
-
-void f()
-{
-#if defined(foo) \
-       && defined(bar)
-       char    *foo = "asdf\
-                                       asdf\
-                                       asdf",
-                       *bar;
-       {
-               int i;
-               char    *foo = "asdf\
-                                               asdf\
-                                               asdf",
-                               *bar;
-       }
-#endif
-}
-#endif
-
-int y;         // comment
-// comment
-
-// comment
-
-{
-       Constructor(int a,
-                       int b )  : BaseClass(a)
-       {
-       }
-}
-
-void foo()
-{
-       char one,
-                two;
-       struct bla piet,
-                          jan;
-       enum foo kees,
-                        jannie;
-       static unsigned sdf,
-                                       krap;
-       unsigned int piet,
-                                jan;
-       int
-               kees,
-               jan;
-}
-
-{
-       t(int f,
-                       int d);         // )
-       d();
-}
-
-Constructor::Constructor(int a,
-               int b 
-               )  : 
-       BaseClass(a,
-                       b,
-                       c),
-       mMember(b),
-{
-}
-
-Constructor::Constructor(int a,
-               int b )  : 
-       BaseClass(a)
-{
-}
-
-Constructor::Constructor(int a,
-               int b ) /*x*/ : /*x*/ BaseClass(a),
-       member(b)
-{
-}
-
-A::A(int a, int b)
-       : aa(a),
-       bb(b),
-       cc(c)
-{
-}
-
-class CAbc :
-       public BaseClass1,
-       protected BaseClass2
-{
-       int Test() { return FALSE; }
-       int Test1() { return TRUE; }
-
-       CAbc(int a, int b )  : 
-               BaseClass(a)
-       { 
-               switch(xxx)
-               {
-                       case abc:
-                               asdf();
-                               break;
-
-                       case 999:
-                               baer();
-                               break;
-               }
-       }
-
-       public: // <-- this was incoreectly indented before!!
-       void testfall();
-       protected:
-       void testfall();
-};
-
-class CAbc : public BaseClass1,
-       protected BaseClass2
-{
-};
-
-static struct
-{
-       int a;
-       int b;
-} variable[COUNT] =
-{
-       {
-               123,
-               456
-       },
-       {
-               123,
-               456
-       }
-};
-
-static struct
-{
-       int a;
-       int b;
-} variable[COUNT] =
-{
-       { 123, 456 },
-       { 123, 456 }
-};
-
-void asdf()            /* ind_maxparen may cause trouble here */
-{
-       if ((0
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1
-                               && 1)) break;
-}
-
-foo()
-{
-       a = cond ? foo() : asdf
-               + asdf;
-
-       a = cond ?
-               foo() : asdf
-               + asdf;
-}
-
-int  main(void)
-{
-       if (a)
-               if (b)
-                       2;
-               else 3;
-       next_line_of_code();
-}
-
-barry()
-{
-       Foo::Foo (int one,
-                       int two)
-               : something(4)
-       {}
-}
-
-barry()
-{
-       Foo::Foo (int one, int two)
-               : something(4)
-       {}
-}
-
-Constructor::Constructor(int a,
-               int b 
-               )  : 
-       BaseClass(a,
-                       b,
-                       c),
-       mMember(b)
-{
-}
-int main ()
-{
-       if (lala)
-               do
-                       ++(*lolo);
-               while (lili
-                               && lele);
-       lulu;
-}
-
-int main ()
-{
-       switch (c)
-       {
-               case 'c': if (cond)
-                                 {
-                                 }
-       }
-}
-
-main()
-{
-       (void) MyFancyFuasdfadsfnction(
-                       argument);
-}
-
-main()
-{
-       char    foo[] = "/*";
-       /* as
-          df */
-       hello
-}
-
-/* valid namespaces with normal indent */
-namespace
-{
-       {
-               111111111111;
-       }
-}
-namespace /* test */
-{
-       11111111111111111;
-}
-namespace // test
-{
-       111111111111111111;
-}
-namespace
-{
-       111111111111111111;
-}
-namespace test
-{
-       111111111111111111;
-}
-namespace{
-       111111111111111111;
-}
-namespace test{
-       111111111111111111;
-}
-namespace {
-       111111111111111111;
-}
-namespace test {
-       111111111111111111;
-       namespace test2 {
-               22222222222222222;
-       }
-}
-
-/* invalid namespaces use block indent */
-namespace test test2 {
-       111111111111111111111;
-}
-namespace11111111111 {
-       111111111111;
-}
-namespace() {
-       1111111111111;
-}
-namespace()
-{
-       111111111111111111;
-}
-namespace test test2
-{
-       1111111111111111111;
-}
-namespace111111111
-{
-       111111111111111111;
-}
-
-void getstring() {
-       /* Raw strings */
-       const char* s = R"(
-  test {
-    # comment
-    field: 123
-  }
- )";
-}
-
-void getstring() {
-       const char* s = R"foo(
-  test {
-    # comment
-    field: 123
-  }
-    )foo";
-}
-
-{
-       int a[4] = {
-               [0] = 0,
-               [1] = 1,
-               [2] = 2,
-               [3] = 3,
-       };
-}
-
-{
-       a = b[2]
-               + 3;
-}
-
-{
-       if (1)
-               /* aaaaa
-                * bbbbb
-                */
-               a = 1;
-}
-
-void func()
-{
-       switch (foo)
-       {
-               case (bar):
-                       if (baz())
-                               quux();
-                       break;
-               case (shmoo):
-                       if (!bar)
-                       {
-                       }
-               case (foo1):
-                       switch (bar)
-                       {
-                               case baz:
-                                       baz_f();
-                                       break;
-                       }
-                       break;
-               default:
-                       baz();
-                       baz();
-                       break;
-       }
-}
-
-/* end of AUTO */
-
-
-{
-
-/* this is
- * a real serious
- * about life, the
- * universe, and the
- * rest important big
- * comment
- */
-       /* insert " about life, the universe, and the rest" after "serious" */
-}
-
-
-{
-       /*
-        * Testing for comments, without 'cin' set
-        */
-about life
-
-/*
-* what happens here?
-*/
-there
-
-       /*
-          the end of the comment, try inserting a line below */
-line
-
-               /* how about
-hello
-                               this one */
-}
-
-
-{
-    var = this + that + vec[0] * vec[0]
-                                     + vec[1] * vec[1]
-                                         + vec2[2] * vec[2];
-}
-
-
-{
-               asdf asdflkajds f;
-       if (tes & ting) {
-               asdf asdf asdf ;
-               asdfa sdf asdf;
-               }
-       testing1;
-       if (tes & ting)
-       {
-               asdf asdf asdf ;
-               asdfa sdf asdf;
-               }
-       testing2;
-}
-
-
-main ( int first_par, /*
-                                          * Comment for
-                                          * first par
-                                          */
-          int second_par /*
-                                          * Comment for
-                                          * second par
-                                          */
-        )
-{
-       func( first_par, /*
-                                         * Comment for
-                                         * first par
-                                         */
-                 second_par /*
-                                         * Comment for
-                                         * second par
-                                         */
-               );
-
-}
-
-
-main(void)
-{
-       /* Make sure that cino=X0s is not parsed like cino=Xs. */
-       if (cond)
-               foo();
-       else
-       {
-               bar();
-       }
-}
-
-
-{
-       do
-       {
-               if ()
-               {
-                       if ()
-                               asdf;
-                       else
-                               asdf;
-               }
-       } while ();
-       cmd;            /* this should go under the } */
-}
-
-
-void f()
-{
-       if ( k() ) {
-               l();
-
-       } else { /* Start (two words) end */
-               m();
-       }
-
-       n();
-}
-
-
-void f()
-       {
-       if ( k() )
-               {
-               l();
-               } else { /* Start (two words) end */
-               m();
-               }
-       n();    /* should be under the if () */
-}
-
-
-void bar(void)
-       {
-       static array[2][2] =
-               {
-                       { 1, 2 },
-                       { 3, 4 },
-               }
-
-       while (a)
-               {
-               foo(&a);
-               }
-
-               {
-               int a;
-                       {
-                       a = a + 1;
-                       }
-               }
-       b = a;
-       }
-
-void func(void)
-       {
-       a = 1;
-               {
-               b = 2;
-               }
-       c = 3;
-       d = 4;
-       }
-/* foo */
-
-
-a()
-{
-  do {
-    a = a +
-      a;
-  } while ( a );               /* add text under this line */
-  here
-    if ( a )
-      a;
-}
-
-
-a()
-{
-label1:
-            /* hmm */
-            // comment
-label2: b();
-label3 /* post */:
-/* pre */ label4:
-               f(/*com*/);
-               if (/*com*/)
-                       cmd();
-}
-
-
-/*
- * A simple comment
- */
-
-/*
-** A different comment
-*/
-
-
-void f()
-{
-
-       /*********
-         A comment.
-       *********/
-}
-
-
-void f()
-{
-
-       /*********
-       A comment.
-       *********/
-}
-
-
-void f()
-{
-       c = c1 &&
-               (
-                c2 ||
-                c3
-               ) && c4;
-}
-
-
-void f()
-{
-       c = c1 &&
-               (
-                c2 ||
-                c3
-               ) && c4;
-}
-
-
-void f()
-{
-       c = c1 &&
-               (
-                       c2 ||
-                       c3
-               ) && c4;
-}
-
-
-void f()
-{
-       if (   c1
-                  && (   c2
-                                 || c3))
-               foo;
-}
-
-
-void f()
-{
-       if (   c1
-               && (   c2
-                       || c3))
-               foo;
-}
-
-
-void f()
-{
-       c = c1 && (
-               c2 ||
-               c3
-               ) && c4;
-       if (
-               c1 && c2
-          )
-               foo;
-}
-
-
-void f()
-{
-       c = c1 && (
-               c2 ||
-               c3
-       ) && c4;
-       if (
-               c1 && c2
-       )
-               foo;
-}
-
-
-void f()
-{
-       switch (x)
-       {
-               case 1:
-                       a = b;
-               break;
-               default:
-                       a = 0;
-               break;
-       }
-}
-
-
-void f()
-{
-       invokeme(
-                argu,
-                ment);
-       invokeme(
-                argu,
-                ment
-                );
-       invokeme(argu,
-                        ment
-                       );
-}
-
-
-void f()
-{
-       statement;
-                 // comment 1
-                 // comment 2
-}
-
-
-void f()
-{
-       statement;
-          // comment 1
-          // comment 2
-}
-
-
-class CAbc
-{
-       int Test() { return FALSE; }
-
-public: // comment
-       void testfall();
-protected:
-       void testfall();
-};
-
-
-class Foo : public Bar
-{
-       public:
-               virtual void method1(void) = 0;
-               virtual void method2(int arg1,
-                                                        int arg2,
-                                                        int arg3) = 0;
-};
-
-
-       void
-foo()
-{
-       if (a)
-       {
-       } else
-               asdf;
-}
-
-
-{
-       averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
-                       asdasdf,
-                       func(asdf,
-                                asdfadsf),
-                       asdfasdf
-                       );
-
-       /* those are ugly, but consequent */
-
-       func()->asd(asdasdf,
-                               averylongfunctionname(
-                                               abc,
-                                               dec)->averylongfunctionname(
-                                                               asdfadsf,
-                                                               asdfasdf,
-                                                               asdfasdf,
-                                                               ),
-                               func(asdfadf,
-                                        asdfasdf
-                                       ),
-                               asdasdf
-                          );
-
-       averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
-                                       abc,
-                                       dec)->asdfasdfasdf(
-                                                       asdfadsf,
-                                                       asdfasdf,
-                                                       asdfasdf,
-                                                       ),
-                       func(asdfadf,
-                                asdfasdf),
-                       asdasdf
-                       );
-}
-
-
-int main ()
-{
-       if (cond1 &&
-                       cond2
-                       )
-               foo;
-}
-
-
-void func(int a
-#if defined(FOO)
-                 , int b
-                 , int c
-#endif
-                )
-{
-}
-
-
-       void
-func(int a
-#if defined(FOO)
-        , int b
-        , int c
-#endif
-       )
-{
-}
-
-
-void func(void)
-{
-       if(x==y)
-               if(y==z)
-                       foo=1;
-               else { bar=1;
-                       baz=2;
-               }
-       printf("Foo!\n");
-}
-
-void func1(void)
-{
-       char* tab[] = {"foo", "bar",
-               "baz", "quux",
-               "this line used", "to be indented incorrectly"};
-       foo();
-}
-
-void func2(void)
-{
-       int tab[] =
-       {1, 2,
-               3, 4,
-               5, 6};
-
-       printf("This line used to be indented incorrectly.\n");
-}
-
-int foo[]
-#ifdef BAR
-
-= { 1, 2, 3,
-       4, 5, 6 }
-
-#endif
-       ;
-int baz;
-
-void func3(void)
-{
-       int tab[] = {
-               1, 2,
-               3, 4,
-               5, 6};
-
-       printf("Don't you dare indent this line incorrectly!\n");
-}
-
-       void
-func4(a, b,
-               c)
-       int a;
-       int b;
-       int c;
-{
-}
-
-       void
-func5(
-               int a,
-               int b)
-{
-}
-
-       void
-func6(
-               int a)
-{
-}
-
-
-void func(void)
-{
-       int tab[] =
-       {
-               1, 2, 3,
-               4, 5, 6};
-
-       printf("Indent this line correctly!\n");
-
-       switch (foo)
-       {
-               case bar:
-                       printf("bar");
-                       break;
-               case baz: {
-                       printf("baz");
-                       break;
-               }
-               case quux:
-                       printf("But don't break the indentation of this instruction\n");
-                       break;
-       }
-}
-
-
-void func(void)
-{
-       cout << "a"
-               << "b"
-               << ") :"
-               << "c";
-}
-
-
-void func(void)
-{
-       /*
-        * This is a comment.
-        */
-       foo();
-}
-
-
-void func(void)
-{
-       for (int i = 0; i < 10; ++i)
-               if (i & 1) {
-                       foo(1);
-               } else
-                       foo(0);
-       baz();
-}
-
-
-void func(void)
-{
-       if (condition1
-                       && condition2)
-               action();
-       function(argument1
-                        && argument2);
-
-       if (c1 && (c2 ||
-                               c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3))
-       {
-       }
-
-       if (   c1
-                       && (      c2
-                                         || c3))
-               foo;
-       func( c1
-                 && (     c2
-                                  || c3))
-               foo;
-}
-
-
-void func(void)
-{
-       if (condition1
-                       && condition2)
-               action();
-       function(argument1
-               && argument2);
-
-       if (c1 && (c2 ||
-                               c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3))
-       {
-       }
-
-       if (   c1
-                       && (      c2
-                               || c3))
-               foo;
-       func(   c1
-               && (      c2
-                       || c3))
-               foo;
-}
-
-
-void func(void)
-{
-       if (condition1
-                       && condition2)
-               action();
-       function(argument1
-               && argument2);
-
-       if (c1 && (c2 ||
-                               c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3))
-       {
-       }
-       if (c123456789
-                       && (c22345
-                               || c3))
-               printf("foo\n");
-
-       c = c1 &&
-               (
-                       c2 ||
-                       c3
-               ) && c4;
-}
-
-
-void func(void)
-{
-       if (condition1
-                       && condition2)
-               action();
-       function(argument1
-                        && argument2);
-
-       if (c1 && (c2 ||
-                               c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3))
-       {
-       }
-       if (c123456789
-                       && (c22345
-                               || c3))
-               printf("foo\n");
-
-       if (   c1
-                       && (   c2
-                                  || c3))
-               foo;
-
-       a_long_line(
-               argument,
-               argument);
-       a_short_line(argument,
-                                argument);
-}
-
-
-void func(void)
-{
-       if (condition1
-                       && condition2)
-               action();
-       function(argument1
-                       && argument2);
-
-       if (c1 && (c2 ||
-                         c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3))
-       {
-       }
-       if (c123456789
-                       && (c22345
-                         || c3))
-               printf("foo\n");
-}
-
-
-void func(void)
-{
-       if (condition1
-                       && condition2)
-               action();
-       function(argument1
-                        && argument2);
-
-       if (c1 && (c2 ||
-                               c3))
-               foo;
-       if (c1 &&
-                       (c2 || c3))
-       {
-       }
-       if (c123456789
-                       && (c22345
-                               || c3))
-               printf("foo\n");
-
-       if (   c1
-                       && (      c2
-                               || c3))
-               foo;
-       func(   c1
-                && (      c2
-                        || c3))
-               foo;
-}
-
-
-void func(void)
-{
-       if (condition1
-         && condition2)
-               action();
-       function(argument1
-               && argument2);
-
-       if (c1 && (c2 ||
-                 c3))
-               foo;
-       if (c1 &&
-         (c2 || c3))
-       {
-       }
-}
-
-
-NAMESPACESTART
-/* valid namespaces with normal indent */
-namespace
-{
-{
-       111111111111;
-}
-}
-namespace /* test */
-{
-11111111111111111;
-}
-namespace // test
-{
-111111111111111111;
-}
-namespace
-{
-111111111111111111;
-}
-namespace test
-{
-111111111111111111;
-}
-namespace test::cpp17
-{
-111111111111111111;
-}
-namespace ::incorrectcpp17
-{
-       111111111111111111;
-}
-namespace test::incorrectcpp17::
-{
-       111111111111111111;
-}
-namespace test:incorrectcpp17
-{
-       111111111111111111;
-}
-namespace test:::incorrectcpp17
-{
-       111111111111111111;
-}
-namespace{
-111111111111111111;
-}
-namespace test{
-111111111111111111;
-}
-namespace {
-111111111111111111;
-}
-namespace test {
-111111111111111111;
-namespace test2 {
-22222222222222222;
-}
-}
-
-/* invalid namespaces use block indent */
-namespace test test2 {
-       111111111111111111111;
-}
-namespace11111111111 {
-       111111111111;
-}
-namespace() {
-       1111111111111;
-}
-namespace()
-{
-       111111111111111111;
-}
-namespace test test2
-{
-       1111111111111111111;
-}
-namespace111111111
-{
-       111111111111111111;
-}
-NAMESPACEEND
-
-
-
-JSSTART
-var bar = {
-       foo: {
-               that: this,
-               some: ok,
-       },
-       "bar":{
-               a : 2,
-               b: "123abc",
-               x: 4,
-               "y": 5
-       }
-}
-JSEND
-
-
-JSSTART
-var foo = [
-       1,
-       2,
-       3
-];
-JSEND
-
-
-JSSTART
-function bar() {
-       var foo = [
-               1,
-               2,
-               3
-       ];
-}
-JSEND
-
-
-JSSTART
-(function($){
-
-       if (cond &&
-                       cond) {
-               stmt;
-       }
-       window.something.left =
-               (width - 50 + offset) + "px";
-       var class_name='myclass';
-
-       function private_method() {
-       }
-
-       var public_method={
-               method: function(options,args){
-                       private_method();
-               }
-       }
-
-       function init(options) {
-
-               $(this).data(class_name+'_public',$.extend({},{
-                       foo: 'bar',
-                       bar: 2,
-                       foobar: [
-                               1,
-                               2,
-                               3
-                       ],
-                       callback: function(){
-                               return true;
-                       }
-               }, options||{}));
-       }
-
-       $.fn[class_name]=function() {
-
-               var _arguments=arguments;
-               return this.each(function(){
-
-                       var options=$(this).data(class_name+'_public');
-                       if (!options) {
-                               init.apply(this,_arguments);
-
-                       } else {
-                               var method=public_method[_arguments[0]];
-
-                               if (typeof(method)!='function') {
-                                       console.log(class_name+' has no method "'+_arguments[0]+'"');
-                                       return false;
-                               }
-                               _arguments[0]=options;
-                               method.apply(this,_arguments);
-                       }
-               });
-       }
-
-})(jQuery);
-JSEND
-
-
-JSSTART
-function init(options) {
-       $(this).data(class_name+'_public',$.extend({},{
-               foo: 'bar',
-               bar: 2,
-               foobar: [
-                       1,
-                       2,
-                       3
-               ],
-               callback: function(){
-                       return true;
-               }
-       }, options||{}));
-}
-JSEND
-
-
-JSSTART
-(function($){
-       function init(options) {
-               $(this).data(class_name+'_public',$.extend({},{
-                       foo: 'bar',
-                       bar: 2,
-                       foobar: [
-                               1,
-                               2,
-                               3
-                       ],
-                       callback: function(){
-                               return true;
-                       }
-               }, options||{}));
-       }
-})(jQuery);
-JSEND
-
-
-JSSTART
-// Results of JavaScript indent
-// 1
-(function(){
-       var a = [
-         'a',
-         'b',
-         'c',
-         'd',
-         'e',
-         'f',
-         'g',
-         'h',
-         'i'
-       ];
-}())
-
-// 2
-(function(){
-       var a = [
-         0 +
-               5 *
-               9 *
-               'a',
-         'b',
-         0 +
-               5 *
-               9 *
-               'c',
-         'd',
-         'e',
-         'f',
-         'g',
-         'h',
-         'i'
-       ];
-}())
-
-// 3
-(function(){
-       var a = [
-         0 +
-               // comment 1
-               5 *
-               /* comment 2 */
-               9 *
-               'a',
-         'b',
-         0 +
-               5 *
-               9 *
-               'c',
-         'd',
-         'e',
-         'f',
-         'g',
-         'h',
-         'i'
-       ];
-}())
-
-// 4
-{
-       var a = [
-         0,
-         1
-       ];
-       var b;
-       var c;
-}
-
-// 5
-{
-       var a = [
-         [
-               0
-         ],
-         2,
-         3
-       ];
-}
-
-// 6
-{
-       var a = [
-         [
-               0,
-               1
-         ],
-         2,
-         3
-       ];
-}
-
-// 7
-{
-       var a = [
-         // [
-         0,
-         // 1
-         // ],
-         2,
-         3
-       ];
-}
-
-// 8
-var x = [
-  (function(){
-         var a,
-         b,
-         c,
-         d,
-         e,
-         f,
-         g,
-         h,
-         i;
-  })
-];
-
-// 9
-var a = [
-  0 +
-  5 *
-  9 *
-  'a',
-  'b',
-  0 +
-  5 *
-  9 *
-  'c',
-  'd',
-  'e',
-  'f',
-  'g',
-  'h',
-  'i'
-];
-
-// 10
-var a,
-       b,
-       c,
-       d,
-       e,
-       f,
-       g,
-       h,
-       i;
-JSEND
-
-
-/* start of define */
-{
-}
-#define AAA \
-       BBB\
-       CCC
-
-#define CNT \
-       1 + \
-       2 + \
-       4
-/* end of define */
-
-
-{
-       a = second/*bug*/*line;
-       x
-}
-
index 4b1198a2061eebbd7b9a9fde5ccc6c8e000136d6..a813c6cbecb240ab6d3f34dbf108a7bfb42d5e5b 100644 (file)
@@ -1,6 +1,5 @@
 " Test for cinoptions and cindent
 "
-" TODO: rewrite test3.in into this new style test
 
 func Test_cino_hash()
   " Test that curbuf->b_ind_hash_comment is correctly reset
@@ -128,4 +127,5128 @@ func Test_cindent_func()
   bwipe!
 endfunc
 
+func Test_cindent_1()
+  new
+  setl cindent ts=4 sw=4
+  setl cino& sts&
+
+  let code =<< trim [CODE]
+  /* start of AUTO matically checked vim: set ts=4 : */
+  {
+       if (test)
+               cmd1;
+       cmd2;
+  }
+
+  {
+       if (test)
+               cmd1;
+       else
+               cmd2;
+  }
+
+  {
+       if (test)
+       {
+               cmd1;
+               cmd2;
+       }
+  }
+
+  {
+       if (test)
+       {
+               cmd1;
+               else
+       }
+  }
+
+  {
+       while (this)
+               if (test)
+                       cmd1;
+       cmd2;
+  }
+
+  {
+       while (this)
+               if (test)
+                       cmd1;
+               else
+                       cmd2;
+  }
+
+  {
+       if (test)
+       {
+               cmd;
+       }
+
+       if (test)
+               cmd;
+  }
+
+  {
+       if (test) {
+               cmd;
+       }
+
+       if (test) cmd;
+  }
+
+  {
+       cmd1;
+       for (blah)
+               while (this)
+                       if (test)
+                               cmd2;
+       cmd3;
+  }
+
+  {
+       cmd1;
+       for (blah)
+               while (this)
+                       if (test)
+                               cmd2;
+       cmd3;
+
+       if (test)
+       {
+               cmd1;
+               cmd2;
+               cmd3;
+       }
+  }
+
+
+  /* Test for 'cindent' do/while mixed with if/else: */
+
+  {
+       do
+               if (asdf)
+                       asdfasd;
+       while (cond);
+
+       do
+               if (asdf)
+                       while (asdf)
+                               asdf;
+       while (asdf);
+  }
+
+  /* Test for 'cindent' with two ) on a continuation line */
+  {
+       if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
+                       aal;sdkjf  ( ;asldfkja;sldfk
+                                       al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
+               line up here;
+  }
+
+
+  /* C++ tests: */
+
+  // foo()             these three lines should remain in column 0
+  // {
+  // }
+
+  /* Test for continuation and unterminated lines: */
+  {
+       i = 99 + 14325 +
+               21345 +
+               21345 +
+               21345 + ( 21345 +
+                               21345) +
+               2345 +
+               1234;
+       c = 1;
+  }
+
+  /*
+     testje for indent with empty line
+
+     here */
+
+  {
+       if (testing &&
+                       not a joke ||
+                       line up here)
+               hay;
+       if (testing &&
+                       (not a joke || testing
+                       )line up here)
+               hay;
+       if (testing &&
+                       (not a joke || testing
+                        line up here))
+               hay;
+  }
+
+
+  {
+       switch (c)
+       {
+               case xx:
+                       do
+                               if (asdf)
+                                       do
+                                               asdfasdf;
+                                       while (asdf);
+                               else
+                                       asdfasdf;
+                       while (cond);
+               case yy:
+               case xx:
+               case zz:
+                       testing;
+       }
+  }
+
+  {
+       if (cond) {
+               foo;
+       }
+       else
+       {
+               bar;
+       }
+  }
+
+  {
+       if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
+                       alsdkfj (asldk;fj
+                                       awith cino=(0 ;lf this one goes to below the paren with ==
+                                                       ;laksjfd ;lsakdjf ;alskdf asd)
+                                       asdfasdf;)))
+               asdfasdf;
+  }
+
+       int
+  func(a, b)
+       int a;
+       int c;
+  {
+       if (c1 && (c2 ||
+                       c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3)
+          )
+  }
+
+  {
+       while (asd)
+       {
+               if (asdf)
+                       if (test)
+                               if (that)
+                               {
+                                       if (asdf)
+                                               do
+                                                       cdasd;
+                                               while (as
+                                                               df);
+                               }
+                               else
+                                       if (asdf)
+                                               asdf;
+                                       else
+                                               asdf;
+               asdf;
+       }
+  }
+
+  {
+       s = "/*"; b = ';'
+               s = "/*"; b = ';';
+       a = b;
+  }
+
+  {
+       switch (a)
+       {
+               case a:
+                       switch (t)
+                       {
+                               case 1:
+                                       cmd;
+                                       break;
+                               case 2:
+                                       cmd;
+                                       break;
+                       }
+                       cmd;
+                       break;
+               case b:
+                       {
+                               int i;
+                               cmd;
+                       }
+                       break;
+               case c: {
+                                       int i;
+                                       cmd;
+                               }
+               case d: if (cond &&
+                                               test) {         /* this line doesn't work right */
+                                       int i;
+                                       cmd;
+                               }
+                               break;
+       }
+  }
+
+  {
+       if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
+                       (bp_to->b_p_initialized ||
+                        (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
+               return;
+  label :
+       asdf = asdf ?
+               asdf : asdf;
+       asdf = asdf ?
+               asdf: asdf;
+  }
+
+  /* Special Comments  : This function has the added complexity (compared  */
+  /*                                   : to addtolist) of having to check for a detail     */
+  /*                                   : texture and add that to the list first.                   */
+
+  char *(array[100]) = {
+       "testje",
+       "foo",
+       "bar",
+  }
+
+  enum soppie
+  {
+  yes = 0,
+  no,
+  maybe
+  };
+
+  typedef enum soppie
+  {
+  yes = 0,
+  no,
+  maybe
+  };
+
+  static enum
+  {
+  yes = 0,
+  no,
+  maybe
+  } soppie;
+
+  public static enum
+  {
+  yes = 0,
+  no,
+  maybe
+  } soppie;
+
+  static private enum
+  {
+  yes = 0,
+  no,
+  maybe
+  } soppie;
+
+  {
+       int a,
+               b;
+  }
+
+  {
+       struct Type
+       {
+               int i;
+               char *str;
+       } var[] =
+       {
+               0, "zero",
+               1, "one",
+               2, "two",
+               3, "three"
+       };
+
+       float matrix[3][3] =
+       {
+               {
+                       0,
+                       1,
+                       2
+               },
+               {
+                       3,
+                       4,
+                       5
+               },
+               {
+                       6,
+                       7,
+                       8
+               }
+       };
+  }
+
+  {
+       /* blah ( blah */
+       /* where does this go? */
+
+       /* blah ( blah */
+       cmd;
+
+       func(arg1,
+                       /* comment */
+                       arg2);
+       a;
+       {
+               b;
+               {
+                       c; /* Hey, NOW it indents?! */
+               }
+       }
+
+       {
+               func(arg1,
+                               arg2,
+                               arg3);
+               /* Hey, what am I doing here?  Is this coz of the ","? */
+       }
+  }
+
+  main ()
+  {
+       if (cond)
+       {
+               a = b;
+       }
+       if (cond) {
+               a = c;
+       }
+       if (cond)
+               a = d;
+       return;
+  }
+
+  {
+       case 2: if (asdf &&
+                                       asdfasdf)
+                               aasdf;
+                       a = 9;
+       case 3: if (asdf)
+                               aasdf;
+                       a = 9;
+       case 4:    x = 1;
+                          y = 2;
+
+  label:       if (asdf)
+                       here;
+
+  label:  if (asdf &&
+                               asdfasdf)
+               {
+               }
+
+  label:  if (asdf &&
+                               asdfasdf) {
+                       there;
+               }
+
+  label:  if (asdf &&
+                               asdfasdf)
+                       there;
+  }
+
+  {
+       /*
+          hello with ":set comments= cino=c5"
+        */
+
+       /*
+          hello with ":set comments= cino="
+        */
+  }
+
+
+  {
+       if (a < b) {
+               a = a + 1;
+       } else
+               a = a + 2;
+
+       if (a)
+               do {
+                       testing;
+               } while (asdfasdf);
+       a = b + 1;
+       asdfasdf
+  }
+
+  {
+  for ( int i = 0;
+       i < 10; i++ )
+  {
+  }
+       i = 0;
+  }
+
+  class bob
+  {
+       int foo() {return 1;}
+               int bar;
+  }
+
+  main()
+  {
+  while(1)
+  if (foo)
+  {
+  bar;
+  }
+  else {
+  asdf;
+  }
+  misplacedline;
+  }
+
+  {
+       if (clipboard.state == SELECT_DONE
+       && ((row == clipboard.start.lnum
+       && col >= clipboard.start.col)
+       || row > clipboard.start.lnum))
+  }
+
+  {
+  if (1) {i += 4;}
+  where_am_i;
+  return 0;
+  }
+
+  {
+  {
+  } // sdf(asdf
+  if (asdf)
+  asd;
+  }
+
+  {
+  label1:
+  label2:
+  }
+
+  {
+  int fooRet = foo(pBar1, false /*fKB*/,
+       true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
+  f() {
+  for ( i = 0;
+       i < m;
+       /* c */ i++ ) {
+  a = b;
+  }
+  }
+  }
+
+  {
+       f1(/*comment*/);
+       f2();
+  }
+
+  {
+  do {
+  if (foo) {
+  } else
+  ;
+  } while (foo);
+  foo();       // was wrong
+  }
+
+  int x;           // no extra indent because of the ;
+  void func()
+  {
+  }
+
+  char *tab[] = {"aaa",
+       "};", /* }; */ NULL}
+       int indented;
+  {}
+
+  char *a[] = {"aaa", "bbb",
+       "ccc", NULL};
+  // here
+
+  char *tab[] = {"aaa",
+       "xx", /* xx */};    /* asdf */
+  int not_indented;
+
+  {
+       do {
+               switch (bla)
+               {
+                       case 1: if (foo)
+                                               bar;
+               }
+       } while (boo);
+                                       wrong;
+  }
+
+  int  foo,
+       bar;
+  int foo;
+
+  #if defined(foo) \
+       && defined(bar)
+  char * xx = "asdf\
+       foo\
+       bor";
+  int x;
+
+  char    *foo = "asdf\
+       asdf\
+       asdf",
+       *bar;
+
+  void f()
+  {
+  #if defined(foo) \
+       && defined(bar)
+  char    *foo = "asdf\
+       asdf\
+       asdf",
+       *bar;
+       {
+       int i;
+  char    *foo = "asdf\
+       asdf\
+       asdf",
+       *bar;
+       }
+  #endif
+  }
+  #endif
+
+  int y;               // comment
+               // comment
+
+       // comment
+
+  {
+       Constructor(int a,
+                       int b )  : BaseClass(a)
+       {
+       }
+  }
+
+  void foo()
+  {
+       char one,
+       two;
+       struct bla piet,
+       jan;
+       enum foo kees,
+       jannie;
+       static unsigned sdf,
+       krap;
+       unsigned int piet,
+       jan;
+       int
+       kees,
+       jan;
+  }
+
+  {
+       t(int f,
+                       int d);         // )
+       d();
+  }
+
+  Constructor::Constructor(int a,
+                           int b 
+                          )  : 
+     BaseClass(a,
+               b,
+               c),
+     mMember(b),
+  {
+  }
+
+  Constructor::Constructor(int a,
+                           int b )  : 
+     BaseClass(a)
+  {
+  }
+
+  Constructor::Constructor(int a,
+                           int b ) /*x*/ : /*x*/ BaseClass(a),
+                                                 member(b)
+  {
+  }
+
+  A::A(int a, int b)
+  : aa(a),
+  bb(b),
+  cc(c)
+  {
+  }
+
+  class CAbc :
+     public BaseClass1,
+     protected BaseClass2
+  {
+     int Test() { return FALSE; }
+     int Test1() { return TRUE; }
+
+     CAbc(int a, int b )  : 
+        BaseClass(a)
+     { 
+        switch(xxx)
+        {
+           case abc:
+              asdf();
+              break;
+
+           case 999:
+              baer();
+              break;
+        }
+     }
+
+  public: // <-- this was incoreectly indented before!!
+     void testfall();
+  protected:
+     void testfall();
+  };
+
+  class CAbc : public BaseClass1,
+               protected BaseClass2
+  {
+  };
+
+  static struct
+  {
+      int a;
+      int b;
+  } variable[COUNT] =
+  {
+      {
+          123,
+          456
+      },
+       {
+          123,
+          456
+      }
+  };
+
+  static struct
+  {
+      int a;
+      int b;
+  } variable[COUNT] =
+  {
+      { 123, 456 },
+       { 123, 456 }
+  };
+
+  void asdf()          /* ind_maxparen may cause trouble here */
+  {
+       if ((0
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1)) break;
+  }
+
+  foo()
+  {
+       a = cond ? foo() : asdf
+                                          + asdf;
+
+       a = cond ?
+               foo() : asdf
+                               + asdf;
+  }
+
+  int  main(void)
+  {
+       if (a)
+               if (b)
+                       2;
+               else 3;
+       next_line_of_code();
+  }
+
+  barry()
+  {
+       Foo::Foo (int one,
+                       int two)
+               : something(4)
+       {}
+  }
+
+  barry()
+  {
+       Foo::Foo (int one, int two)
+               : something(4)
+       {}
+  }
+
+  Constructor::Constructor(int a,
+               int b 
+               )  : 
+       BaseClass(a,
+                       b,
+                       c),
+       mMember(b)
+  {
+  }
+         int main ()
+         {
+        if (lala)
+          do
+            ++(*lolo);
+          while (lili
+                 && lele);
+          lulu;
+         }
+
+  int main ()
+  {
+  switch (c)
+  {
+  case 'c': if (cond)
+  {
+  }
+  }
+  }
+
+  main()
+  {
+       (void) MyFancyFuasdfadsfnction(
+                       argument);
+  }
+
+  main()
+  {
+       char    foo[] = "/*";
+       /* as
+       df */
+               hello
+  }
+
+  /* valid namespaces with normal indent */
+  namespace
+  {
+  {
+    111111111111;
+  }
+  }
+  namespace /* test */
+  {
+    11111111111111111;
+  }
+  namespace // test
+  {
+    111111111111111111;
+  }
+  namespace
+  {
+    111111111111111111;
+  }
+  namespace test
+  {
+    111111111111111111;
+  }
+  namespace{
+    111111111111111111;
+  }
+  namespace test{
+    111111111111111111;
+  }
+  namespace {
+    111111111111111111;
+  }
+  namespace test {
+    111111111111111111;
+  namespace test2 {
+    22222222222222222;
+  }
+  }
+
+  /* invalid namespaces use block indent */
+  namespace test test2 {
+    111111111111111111111;
+  }
+  namespace11111111111 {
+    111111111111;
+  }
+  namespace() {
+    1111111111111;
+  }
+  namespace()
+  {
+    111111111111111111;
+  }
+  namespace test test2
+  {
+    1111111111111111111;
+  }
+  namespace111111111
+  {
+    111111111111111111;
+  }
+
+  void getstring() {
+  /* Raw strings */
+  const char* s = R"(
+    test {
+      # comment
+      field: 123
+    }
+   )";
+       }
+
+  void getstring() {
+  const char* s = R"foo(
+    test {
+      # comment
+      field: 123
+    }
+      )foo";
+       }
+
+  {
+  int a[4] = {
+  [0] = 0,
+  [1] = 1,
+  [2] = 2,
+  [3] = 3,
+  };
+  }
+
+  {
+  a = b[2]
+  + 3;
+  }
+
+  {
+  if (1)
+  /* aaaaa
+  * bbbbb
+  */
+  a = 1;
+  }
+
+  void func()
+  {
+  switch (foo)
+  {
+  case (bar):
+  if (baz())
+  quux();
+  break;
+  case (shmoo):
+  if (!bar)
+  {
+  }
+  case (foo1):
+  switch (bar)
+  {
+  case baz:
+  baz_f();
+  break;
+  }
+  break;
+  default:
+  baz();
+  baz();
+  break;
+  }
+  }
+
+  /* end of AUTO */
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('start of AUTO')
+  exe "normal =/end of AUTO\<CR>"
+
+  let expected =<< trim [CODE]
+  /* start of AUTO matically checked vim: set ts=4 : */
+  {
+       if (test)
+               cmd1;
+       cmd2;
+  }
+
+  {
+       if (test)
+               cmd1;
+       else
+               cmd2;
+  }
+
+  {
+       if (test)
+       {
+               cmd1;
+               cmd2;
+       }
+  }
+
+  {
+       if (test)
+       {
+               cmd1;
+               else
+       }
+  }
+
+  {
+       while (this)
+               if (test)
+                       cmd1;
+       cmd2;
+  }
+
+  {
+       while (this)
+               if (test)
+                       cmd1;
+               else
+                       cmd2;
+  }
+
+  {
+       if (test)
+       {
+               cmd;
+       }
+
+       if (test)
+               cmd;
+  }
+
+  {
+       if (test) {
+               cmd;
+       }
+
+       if (test) cmd;
+  }
+
+  {
+       cmd1;
+       for (blah)
+               while (this)
+                       if (test)
+                               cmd2;
+       cmd3;
+  }
+
+  {
+       cmd1;
+       for (blah)
+               while (this)
+                       if (test)
+                               cmd2;
+       cmd3;
+
+       if (test)
+       {
+               cmd1;
+               cmd2;
+               cmd3;
+       }
+  }
+
+
+  /* Test for 'cindent' do/while mixed with if/else: */
+
+  {
+       do
+               if (asdf)
+                       asdfasd;
+       while (cond);
+
+       do
+               if (asdf)
+                       while (asdf)
+                               asdf;
+       while (asdf);
+  }
+
+  /* Test for 'cindent' with two ) on a continuation line */
+  {
+       if (asdfasdf;asldkfj asdlkfj as;ldkfj sal;d
+                       aal;sdkjf  ( ;asldfkja;sldfk
+                               al;sdjfka ;slkdf ) sa;ldkjfsa dlk;)
+               line up here;
+  }
+
+
+  /* C++ tests: */
+
+  // foo()             these three lines should remain in column 0
+  // {
+  // }
+
+  /* Test for continuation and unterminated lines: */
+  {
+       i = 99 + 14325 +
+               21345 +
+               21345 +
+               21345 + ( 21345 +
+                               21345) +
+               2345 +
+               1234;
+       c = 1;
+  }
+
+  /*
+     testje for indent with empty line
+
+     here */
+
+  {
+       if (testing &&
+                       not a joke ||
+                       line up here)
+               hay;
+       if (testing &&
+                       (not a joke || testing
+                       )line up here)
+               hay;
+       if (testing &&
+                       (not a joke || testing
+                        line up here))
+               hay;
+  }
+
+
+  {
+       switch (c)
+       {
+               case xx:
+                       do
+                               if (asdf)
+                                       do
+                                               asdfasdf;
+                                       while (asdf);
+                               else
+                                       asdfasdf;
+                       while (cond);
+               case yy:
+               case xx:
+               case zz:
+                       testing;
+       }
+  }
+
+  {
+       if (cond) {
+               foo;
+       }
+       else
+       {
+               bar;
+       }
+  }
+
+  {
+       if (alskdfj ;alsdkfjal;skdjf (;sadlkfsa ;dlkf j;alksdfj ;alskdjf
+                               alsdkfj (asldk;fj
+                                       awith cino=(0 ;lf this one goes to below the paren with ==
+                                               ;laksjfd ;lsakdjf ;alskdf asd)
+                                       asdfasdf;)))
+               asdfasdf;
+  }
+
+       int
+  func(a, b)
+       int a;
+       int c;
+  {
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3)
+          )
+  }
+
+  {
+       while (asd)
+       {
+               if (asdf)
+                       if (test)
+                               if (that)
+                               {
+                                       if (asdf)
+                                               do
+                                                       cdasd;
+                                               while (as
+                                                               df);
+                               }
+                               else
+                                       if (asdf)
+                                               asdf;
+                                       else
+                                               asdf;
+               asdf;
+       }
+  }
+
+  {
+       s = "/*"; b = ';'
+               s = "/*"; b = ';';
+       a = b;
+  }
+
+  {
+       switch (a)
+       {
+               case a:
+                       switch (t)
+                       {
+                               case 1:
+                                       cmd;
+                                       break;
+                               case 2:
+                                       cmd;
+                                       break;
+                       }
+                       cmd;
+                       break;
+               case b:
+                       {
+                               int i;
+                               cmd;
+                       }
+                       break;
+               case c: {
+                                       int i;
+                                       cmd;
+                               }
+               case d: if (cond &&
+                                               test) {         /* this line doesn't work right */
+                                       int i;
+                                       cmd;
+                               }
+                               break;
+       }
+  }
+
+  {
+       if (!(vim_strchr(p_cpo, CPO_BUFOPTGLOB) != NULL && entering) &&
+                       (bp_to->b_p_initialized ||
+                        (!entering && vim_strchr(p_cpo, CPO_BUFOPT) != NULL)))
+               return;
+  label :
+       asdf = asdf ?
+               asdf : asdf;
+       asdf = asdf ?
+               asdf: asdf;
+  }
+
+  /* Special Comments  : This function has the added complexity (compared  */
+  /*                                   : to addtolist) of having to check for a detail     */
+  /*                                   : texture and add that to the list first.                   */
+
+  char *(array[100]) = {
+       "testje",
+       "foo",
+       "bar",
+  }
+
+  enum soppie
+  {
+       yes = 0,
+       no,
+       maybe
+  };
+
+  typedef enum soppie
+  {
+       yes = 0,
+       no,
+       maybe
+  };
+
+  static enum
+  {
+       yes = 0,
+       no,
+       maybe
+  } soppie;
+
+  public static enum
+  {
+       yes = 0,
+       no,
+       maybe
+  } soppie;
+
+  static private enum
+  {
+       yes = 0,
+       no,
+       maybe
+  } soppie;
+
+  {
+       int a,
+               b;
+  }
+
+  {
+       struct Type
+       {
+               int i;
+               char *str;
+       } var[] =
+       {
+               0, "zero",
+               1, "one",
+               2, "two",
+               3, "three"
+       };
+
+       float matrix[3][3] =
+       {
+               {
+                       0,
+                       1,
+                       2
+               },
+               {
+                       3,
+                       4,
+                       5
+               },
+               {
+                       6,
+                       7,
+                       8
+               }
+       };
+  }
+
+  {
+       /* blah ( blah */
+       /* where does this go? */
+
+       /* blah ( blah */
+       cmd;
+
+       func(arg1,
+                       /* comment */
+                       arg2);
+       a;
+       {
+               b;
+               {
+                       c; /* Hey, NOW it indents?! */
+               }
+       }
+
+       {
+               func(arg1,
+                               arg2,
+                               arg3);
+               /* Hey, what am I doing here?  Is this coz of the ","? */
+       }
+  }
+
+  main ()
+  {
+       if (cond)
+       {
+               a = b;
+       }
+       if (cond) {
+               a = c;
+       }
+       if (cond)
+               a = d;
+       return;
+  }
+
+  {
+       case 2: if (asdf &&
+                                       asdfasdf)
+                               aasdf;
+                       a = 9;
+       case 3: if (asdf)
+                               aasdf;
+                       a = 9;
+       case 4:    x = 1;
+                          y = 2;
+
+  label:       if (asdf)
+                       here;
+
+  label:  if (asdf &&
+                               asdfasdf)
+               {
+               }
+
+  label:  if (asdf &&
+                               asdfasdf) {
+                       there;
+               }
+
+  label:  if (asdf &&
+                               asdfasdf)
+                       there;
+  }
+
+  {
+       /*
+          hello with ":set comments= cino=c5"
+        */
+
+       /*
+          hello with ":set comments= cino="
+        */
+  }
+
+
+  {
+       if (a < b) {
+               a = a + 1;
+       } else
+               a = a + 2;
+
+       if (a)
+               do {
+                       testing;
+               } while (asdfasdf);
+       a = b + 1;
+       asdfasdf
+  }
+
+  {
+       for ( int i = 0;
+                       i < 10; i++ )
+       {
+       }
+       i = 0;
+  }
+
+  class bob
+  {
+       int foo() {return 1;}
+       int bar;
+  }
+
+  main()
+  {
+       while(1)
+               if (foo)
+               {
+                       bar;
+               }
+               else {
+                       asdf;
+               }
+       misplacedline;
+  }
+
+  {
+       if (clipboard.state == SELECT_DONE
+                       && ((row == clipboard.start.lnum
+                                       && col >= clipboard.start.col)
+                               || row > clipboard.start.lnum))
+  }
+
+  {
+       if (1) {i += 4;}
+       where_am_i;
+       return 0;
+  }
+
+  {
+       {
+       } // sdf(asdf
+       if (asdf)
+               asd;
+  }
+
+  {
+  label1:
+  label2:
+  }
+
+  {
+       int fooRet = foo(pBar1, false /*fKB*/,
+                       true /*fPTB*/, 3 /*nT*/, false /*fDF*/);
+       f() {
+               for ( i = 0;
+                               i < m;
+                               /* c */ i++ ) {
+                       a = b;
+               }
+       }
+  }
+
+  {
+       f1(/*comment*/);
+       f2();
+  }
+
+  {
+       do {
+               if (foo) {
+               } else
+                       ;
+       } while (foo);
+       foo();  // was wrong
+  }
+
+  int x;           // no extra indent because of the ;
+  void func()
+  {
+  }
+
+  char *tab[] = {"aaa",
+       "};", /* }; */ NULL}
+       int indented;
+  {}
+
+  char *a[] = {"aaa", "bbb",
+       "ccc", NULL};
+  // here
+
+  char *tab[] = {"aaa",
+       "xx", /* xx */};    /* asdf */
+  int not_indented;
+
+  {
+       do {
+               switch (bla)
+               {
+                       case 1: if (foo)
+                                               bar;
+               }
+       } while (boo);
+       wrong;
+  }
+
+  int  foo,
+       bar;
+  int foo;
+
+  #if defined(foo) \
+       && defined(bar)
+  char * xx = "asdf\
+                        foo\
+                        bor";
+  int x;
+
+  char    *foo = "asdf\
+                               asdf\
+                               asdf",
+               *bar;
+
+  void f()
+  {
+  #if defined(foo) \
+       && defined(bar)
+       char    *foo = "asdf\
+                                       asdf\
+                                       asdf",
+                       *bar;
+       {
+               int i;
+               char    *foo = "asdf\
+                                               asdf\
+                                               asdf",
+                               *bar;
+       }
+  #endif
+  }
+  #endif
+
+  int y;               // comment
+  // comment
+
+  // comment
+
+  {
+       Constructor(int a,
+                       int b )  : BaseClass(a)
+       {
+       }
+  }
+
+  void foo()
+  {
+       char one,
+                two;
+       struct bla piet,
+                          jan;
+       enum foo kees,
+                        jannie;
+       static unsigned sdf,
+                                       krap;
+       unsigned int piet,
+                                jan;
+       int
+               kees,
+               jan;
+  }
+
+  {
+       t(int f,
+                       int d);         // )
+       d();
+  }
+
+  Constructor::Constructor(int a,
+               int b 
+               )  : 
+       BaseClass(a,
+                       b,
+                       c),
+       mMember(b),
+  {
+  }
+
+  Constructor::Constructor(int a,
+               int b )  : 
+       BaseClass(a)
+  {
+  }
+
+  Constructor::Constructor(int a,
+               int b ) /*x*/ : /*x*/ BaseClass(a),
+       member(b)
+  {
+  }
+
+  A::A(int a, int b)
+       : aa(a),
+       bb(b),
+       cc(c)
+  {
+  }
+
+  class CAbc :
+       public BaseClass1,
+       protected BaseClass2
+  {
+       int Test() { return FALSE; }
+       int Test1() { return TRUE; }
+
+       CAbc(int a, int b )  : 
+               BaseClass(a)
+       { 
+               switch(xxx)
+               {
+                       case abc:
+                               asdf();
+                               break;
+
+                       case 999:
+                               baer();
+                               break;
+               }
+       }
+
+       public: // <-- this was incoreectly indented before!!
+       void testfall();
+       protected:
+       void testfall();
+  };
+
+  class CAbc : public BaseClass1,
+       protected BaseClass2
+  {
+  };
+
+  static struct
+  {
+       int a;
+       int b;
+  } variable[COUNT] =
+  {
+       {
+               123,
+               456
+       },
+       {
+               123,
+               456
+       }
+  };
+
+  static struct
+  {
+       int a;
+       int b;
+  } variable[COUNT] =
+  {
+       { 123, 456 },
+       { 123, 456 }
+  };
+
+  void asdf()          /* ind_maxparen may cause trouble here */
+  {
+       if ((0
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1
+                               && 1)) break;
+  }
+
+  foo()
+  {
+       a = cond ? foo() : asdf
+               + asdf;
+
+       a = cond ?
+               foo() : asdf
+               + asdf;
+  }
+
+  int  main(void)
+  {
+       if (a)
+               if (b)
+                       2;
+               else 3;
+       next_line_of_code();
+  }
+
+  barry()
+  {
+       Foo::Foo (int one,
+                       int two)
+               : something(4)
+       {}
+  }
+
+  barry()
+  {
+       Foo::Foo (int one, int two)
+               : something(4)
+       {}
+  }
+
+  Constructor::Constructor(int a,
+               int b 
+               )  : 
+       BaseClass(a,
+                       b,
+                       c),
+       mMember(b)
+  {
+  }
+  int main ()
+  {
+       if (lala)
+               do
+                       ++(*lolo);
+               while (lili
+                               && lele);
+       lulu;
+  }
+
+  int main ()
+  {
+       switch (c)
+       {
+               case 'c': if (cond)
+                                 {
+                                 }
+       }
+  }
+
+  main()
+  {
+       (void) MyFancyFuasdfadsfnction(
+                       argument);
+  }
+
+  main()
+  {
+       char    foo[] = "/*";
+       /* as
+          df */
+       hello
+  }
+
+  /* valid namespaces with normal indent */
+  namespace
+  {
+       {
+               111111111111;
+       }
+  }
+  namespace /* test */
+  {
+       11111111111111111;
+  }
+  namespace // test
+  {
+       111111111111111111;
+  }
+  namespace
+  {
+       111111111111111111;
+  }
+  namespace test
+  {
+       111111111111111111;
+  }
+  namespace{
+       111111111111111111;
+  }
+  namespace test{
+       111111111111111111;
+  }
+  namespace {
+       111111111111111111;
+  }
+  namespace test {
+       111111111111111111;
+       namespace test2 {
+               22222222222222222;
+       }
+  }
+
+  /* invalid namespaces use block indent */
+  namespace test test2 {
+       111111111111111111111;
+  }
+  namespace11111111111 {
+       111111111111;
+  }
+  namespace() {
+       1111111111111;
+  }
+  namespace()
+  {
+       111111111111111111;
+  }
+  namespace test test2
+  {
+       1111111111111111111;
+  }
+  namespace111111111
+  {
+       111111111111111111;
+  }
+
+  void getstring() {
+       /* Raw strings */
+       const char* s = R"(
+    test {
+      # comment
+      field: 123
+    }
+   )";
+  }
+
+  void getstring() {
+       const char* s = R"foo(
+    test {
+      # comment
+      field: 123
+    }
+      )foo";
+  }
+
+  {
+       int a[4] = {
+               [0] = 0,
+               [1] = 1,
+               [2] = 2,
+               [3] = 3,
+       };
+  }
+
+  {
+       a = b[2]
+               + 3;
+  }
+
+  {
+       if (1)
+               /* aaaaa
+                * bbbbb
+                */
+               a = 1;
+  }
+
+  void func()
+  {
+       switch (foo)
+       {
+               case (bar):
+                       if (baz())
+                               quux();
+                       break;
+               case (shmoo):
+                       if (!bar)
+                       {
+                       }
+               case (foo1):
+                       switch (bar)
+                       {
+                               case baz:
+                                       baz_f();
+                                       break;
+                       }
+                       break;
+               default:
+                       baz();
+                       baz();
+                       break;
+       }
+  }
+
+  /* end of AUTO */
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_2()
+  new
+  setl cindent ts=4 sw=4
+  setl tw=0 noai fo=croq
+  let &wm = &columns - 20
+
+  let code =<< trim [CODE]
+  {
+
+  /* this is
+   * a real serious important big
+   * comment
+   */
+       /* insert " about life, the universe, and the rest" after "serious" */
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('serious', 'e')
+  normal a about life, the universe, and the rest
+
+  let expected =<< trim [CODE]
+  {
+
+  /* this is
+   * a real serious
+   * about life, the
+   * universe, and the
+   * rest important big
+   * comment
+   */
+       /* insert " about life, the universe, and the rest" after "serious" */
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  set wm&
+  enew! | close
+endfunc
+
+func Test_cindent_3()
+  new
+  setl nocindent ts=4 sw=4
+
+  let code =<< trim [CODE]
+  {
+       /*
+        * Testing for comments, without 'cin' set
+        */
+
+  /*
+  * what happens here?
+  */
+
+       /*
+          the end of the comment, try inserting a line below */
+
+               /* how about
+                               this one */
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('comments')
+  normal joabout life
+  call search('happens')
+  normal jothere
+  call search('below')
+  normal oline
+  call search('this')
+  normal Ohello
+
+  let expected =<< trim [CODE]
+  {
+       /*
+        * Testing for comments, without 'cin' set
+        */
+  about life
+
+  /*
+  * what happens here?
+  */
+  there
+
+       /*
+          the end of the comment, try inserting a line below */
+  line
+
+               /* how about
+  hello
+                               this one */
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_4()
+  new
+  setl cindent ts=4 sw=4
+
+  let code =<< trim [CODE]
+  {
+      var = this + that + vec[0] * vec[0]
+                                     + vec[1] * vec[1]
+                                         + vec2[2] * vec[2];
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('vec2')
+  normal ==
+
+  let expected =<< trim [CODE]
+  {
+      var = this + that + vec[0] * vec[0]
+                                     + vec[1] * vec[1]
+                                         + vec2[2] * vec[2];
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_5()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=}4
+
+  let code =<< trim [CODE]
+  {
+               asdf asdflkajds f;
+       if (tes & ting) {
+               asdf asdf asdf ;
+               asdfa sdf asdf;
+               }
+       testing1;
+       if (tes & ting)
+       {
+               asdf asdf asdf ;
+               asdfa sdf asdf;
+               }
+       testing2;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('testing1')
+  exe "normal k2==/testing2\<CR>"
+  normal k2==
+
+  let expected =<< trim [CODE]
+  {
+               asdf asdflkajds f;
+       if (tes & ting) {
+               asdf asdf asdf ;
+               asdfa sdf asdf;
+               }
+       testing1;
+       if (tes & ting)
+       {
+               asdf asdf asdf ;
+               asdfa sdf asdf;
+               }
+       testing2;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_6()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0,)20
+
+  let code =<< trim [CODE]
+  main ( int first_par, /*
+                         * Comment for
+                         * first par
+                         */
+            int second_par /*
+                         * Comment for
+                         * second par
+                         */
+       )
+  {
+       func( first_par, /*
+                        * Comment for
+                        * first par
+                        */
+      second_par /*
+                        * Comment for
+                        * second par
+                        */
+          );
+
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('main')
+  normal =][
+
+  let expected =<< trim [CODE]
+  main ( int first_par, /*
+                                          * Comment for
+                                          * first par
+                                          */
+          int second_par /*
+                                          * Comment for
+                                          * second par
+                                          */
+        )
+  {
+       func( first_par, /*
+                                         * Comment for
+                                         * first par
+                                         */
+                 second_par /*
+                                         * Comment for
+                                         * second par
+                                         */
+               );
+
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_7()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=es,n0s
+
+  let code =<< trim [CODE]
+  main(void)
+  {
+       /* Make sure that cino=X0s is not parsed like cino=Xs. */
+       if (cond)
+               foo();
+       else
+       {
+               bar();
+       }
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('main')
+  normal =][
+
+  let expected =<< trim [CODE]
+  main(void)
+  {
+       /* Make sure that cino=X0s is not parsed like cino=Xs. */
+       if (cond)
+               foo();
+       else
+       {
+               bar();
+       }
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_8()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=
+
+  let code =<< trim [CODE]
+
+  {
+       do
+       {
+               if ()
+               {
+                       if ()
+                               asdf;
+                       else
+                               asdf;
+               }
+       } while ();
+                       cmd;            /* this should go under the } */
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+
+  {
+       do
+       {
+               if ()
+               {
+                       if ()
+                               asdf;
+                       else
+                               asdf;
+               }
+       } while ();
+       cmd;            /* this should go under the } */
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_9()
+  new
+  setl cindent ts=4 sw=4
+
+  let code =<< trim [CODE]
+
+  void f()
+  {
+      if ( k() ) {
+          l();
+
+      } else { /* Start (two words) end */
+          m();
+      }
+
+      n();
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+
+  void f()
+  {
+       if ( k() ) {
+               l();
+
+       } else { /* Start (two words) end */
+               m();
+       }
+
+       n();
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_10()
+  new
+  setl cindent ts=4 sw=4
+  setl cino={s,e-s
+
+  let code =<< trim [CODE]
+
+  void f()
+  {
+      if ( k() )
+       {
+          l();
+      } else { /* Start (two words) end */
+          m();
+      }
+               n();    /* should be under the if () */
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+
+  void f()
+  {
+       if ( k() )
+               {
+               l();
+               } else { /* Start (two words) end */
+               m();
+               }
+       n();    /* should be under the if () */
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_11()
+  new
+  setl cindent ts=4 sw=4
+  setl cino={s,fs
+
+  let code =<< trim [CODE]
+  void bar(void)
+  {
+       static array[2][2] =
+       {
+               { 1, 2 },
+               { 3, 4 },
+       }
+
+       while (a)
+       {
+               foo(&a);
+       }
+
+       {
+               int a;
+               {
+                       a = a + 1;
+               }
+       }
+       b = a;
+       }
+
+  void func(void)
+       {
+       a = 1;
+       {
+               b = 2;
+       }
+       c = 3;
+       d = 4;
+       }
+  /* foo */
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  exe "normal ]]=/ foo\<CR>"
+
+  let expected =<< trim [CODE]
+  void bar(void)
+       {
+       static array[2][2] =
+               {
+                       { 1, 2 },
+                       { 3, 4 },
+               }
+
+       while (a)
+               {
+               foo(&a);
+               }
+
+               {
+               int a;
+                       {
+                       a = a + 1;
+                       }
+               }
+       b = a;
+       }
+
+  void func(void)
+       {
+       a = 1;
+               {
+               b = 2;
+               }
+       c = 3;
+       d = 4;
+       }
+  /* foo */
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_12()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=
+
+  let code =<< trim [CODE]
+  a()
+  {
+    do {
+      a = a +
+        a;
+    } while ( a );             /* add text under this line */
+      if ( a )
+        a;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('while')
+  normal ohere
+
+  let expected =<< trim [CODE]
+  a()
+  {
+    do {
+      a = a +
+        a;
+    } while ( a );             /* add text under this line */
+    here
+      if ( a )
+        a;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_13()
+  new
+  setl cindent ts=4 sw=4
+  setl cino= com=
+
+  let code =<< trim [CODE]
+  a()
+  {
+  label1:
+              /* hmm */
+              // comment
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('comment')
+  exe "normal olabel2: b();\rlabel3 /* post */:\r/* pre */ label4:\r" .
+        \ "f(/*com*/);\rif (/*com*/)\rcmd();"
+
+  let expected =<< trim [CODE]
+  a()
+  {
+  label1:
+              /* hmm */
+              // comment
+  label2: b();
+  label3 /* post */:
+  /* pre */ label4:
+               f(/*com*/);
+               if (/*com*/)
+                       cmd();
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_14()
+  new
+  setl cindent ts=4 sw=4
+  setl comments& comments^=s:/*,m:**,ex:*/
+
+  let code =<< trim [CODE]
+  /*
+    * A simple comment
+     */
+
+  /*
+    ** A different comment
+     */
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('simple')
+  normal =5j
+
+  let expected =<< trim [CODE]
+  /*
+   * A simple comment
+   */
+
+  /*
+  ** A different comment
+  */
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_15()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=c0
+  setl comments& comments-=s1:/* comments^=s0:/*
+
+  let code =<< trim [CODE]
+  void f()
+  {
+
+       /*********
+    A comment.
+  *********/
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+
+       /*********
+         A comment.
+       *********/
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_16()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=c0,C1
+  setl comments& comments-=s1:/* comments^=s0:/*
+
+  let code =<< trim [CODE]
+  void f()
+  {
+
+       /*********
+    A comment.
+  *********/
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+
+       /*********
+       A comment.
+       *********/
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_17()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       c = c1 &&
+       (
+       c2 ||
+       c3
+       ) && c4;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       c = c1 &&
+               (
+                c2 ||
+                c3
+               ) && c4;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_18()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(s
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       c = c1 &&
+       (
+       c2 ||
+       c3
+       ) && c4;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       c = c1 &&
+               (
+                c2 ||
+                c3
+               ) && c4;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_19()
+  new
+  setl cindent ts=4 sw=4
+  set cino=(s,U1
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       c = c1 &&
+       (
+       c2 ||
+       c3
+       ) && c4;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       c = c1 &&
+               (
+                       c2 ||
+                       c3
+               ) && c4;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_20()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       if (   c1
+       && (   c2
+       || c3))
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       if (   c1
+                  && (   c2
+                                 || c3))
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_21()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0,w1
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       if (   c1
+       && (   c2
+       || c3))
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       if (   c1
+               && (   c2
+                       || c3))
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_22()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(s
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       c = c1 && (
+       c2 ||
+       c3
+       ) && c4;
+       if (
+       c1 && c2
+       )
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       c = c1 && (
+               c2 ||
+               c3
+               ) && c4;
+       if (
+               c1 && c2
+          )
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_23()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(s,m1
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       c = c1 && (
+       c2 ||
+       c3
+       ) && c4;
+       if (
+       c1 && c2
+       )
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       c = c1 && (
+               c2 ||
+               c3
+       ) && c4;
+       if (
+               c1 && c2
+       )
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_24()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=b1
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       switch (x)
+       {
+               case 1:
+                       a = b;
+                       break;
+               default:
+                       a = 0;
+                       break;
+       }
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       switch (x)
+       {
+               case 1:
+                       a = b;
+               break;
+               default:
+                       a = 0;
+               break;
+       }
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_25()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0,W5
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       invokeme(
+       argu,
+       ment);
+       invokeme(
+       argu,
+       ment
+       );
+       invokeme(argu,
+       ment
+       );
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       invokeme(
+                argu,
+                ment);
+       invokeme(
+                argu,
+                ment
+                );
+       invokeme(argu,
+                        ment
+                       );
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_26()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=/6
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       statement;
+               // comment 1
+       // comment 2
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       statement;
+                 // comment 1
+                 // comment 2
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_27()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=
+
+  let code =<< trim [CODE]
+  void f()
+  {
+       statement;
+          // comment 1
+       // comment 2
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  exe "normal ]]/comment 1/+1\<CR>=="
+
+  let expected =<< trim [CODE]
+  void f()
+  {
+       statement;
+          // comment 1
+          // comment 2
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_28()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=g0
+
+  let code =<< trim [CODE]
+  class CAbc
+  {
+     int Test() { return FALSE; }
+
+  public: // comment
+     void testfall();
+  protected:
+     void testfall();
+  };
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  class CAbc
+  {
+       int Test() { return FALSE; }
+
+  public: // comment
+       void testfall();
+  protected:
+       void testfall();
+  };
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_29()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0,gs,hs
+
+  let code =<< trim [CODE]
+  class Foo : public Bar
+  {
+  public:
+  virtual void method1(void) = 0;
+  virtual void method2(int arg1,
+  int arg2,
+  int arg3) = 0;
+  };
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  class Foo : public Bar
+  {
+       public:
+               virtual void method1(void) = 0;
+               virtual void method2(int arg1,
+                                                        int arg2,
+                                                        int arg3) = 0;
+  };
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_30()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=+20
+
+  let code =<< trim [CODE]
+       void
+  foo()
+  {
+       if (a)
+       {
+       } else
+               asdf;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+       void
+  foo()
+  {
+       if (a)
+       {
+       } else
+               asdf;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_31()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0,W2s
+
+  let code =<< trim [CODE]
+
+  {
+     averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
+           asdasdf,
+           func(asdf,
+                asdfadsf),
+           asdfasdf
+           );
+
+     /* those are ugly, but consequent */
+
+     func()->asd(asdasdf,
+                 averylongfunctionname(
+                       abc,
+                       dec)->averylongfunctionname(
+                             asdfadsf,
+                             asdfasdf,
+                             asdfasdf,
+                             ),
+                 func(asdfadf,
+                      asdfasdf
+                     ),
+                 asdasdf
+                );
+
+     averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
+                 abc,
+                 dec)->asdfasdfasdf(
+                       asdfadsf,
+                       asdfasdf,
+                       asdfasdf,
+                       ),
+           func(asdfadf,
+                asdfasdf),
+           asdasdf
+           );
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+
+  {
+       averylongfunctionnamelongfunctionnameaverylongfunctionname()->asd(
+                       asdasdf,
+                       func(asdf,
+                                asdfadsf),
+                       asdfasdf
+                       );
+
+       /* those are ugly, but consequent */
+
+       func()->asd(asdasdf,
+                               averylongfunctionname(
+                                               abc,
+                                               dec)->averylongfunctionname(
+                                                               asdfadsf,
+                                                               asdfasdf,
+                                                               asdfasdf,
+                                                               ),
+                               func(asdfadf,
+                                        asdfasdf
+                                       ),
+                               asdasdf
+                          );
+
+       averylongfunctionnameaverylongfunctionnameavery()->asd(fasdf(
+                                       abc,
+                                       dec)->asdfasdfasdf(
+                                                       asdfadsf,
+                                                       asdfasdf,
+                                                       asdfasdf,
+                                                       ),
+                       func(asdfadf,
+                                asdfasdf),
+                       asdasdf
+                       );
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_32()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=M1
+
+  let code =<< trim [CODE]
+  int main ()
+  {
+       if (cond1 &&
+                       cond2
+                       )
+               foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  int main ()
+  {
+       if (cond1 &&
+                       cond2
+                       )
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_33()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0,ts
+
+  let code =<< trim [CODE]
+  void func(int a
+  #if defined(FOO)
+                 , int b
+                 , int c
+  #endif
+                )
+  {
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal 2j=][
+
+  let expected =<< trim [CODE]
+  void func(int a
+  #if defined(FOO)
+                 , int b
+                 , int c
+  #endif
+                )
+  {
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_34()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=(0
+
+  let code =<< trim [CODE]
+
+  void
+  func(int a
+  #if defined(FOO)
+                 , int b
+                 , int c
+  #endif
+                )
+  {
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal =][
+
+  let expected =<< trim [CODE]
+
+       void
+  func(int a
+  #if defined(FOO)
+        , int b
+        , int c
+  #endif
+       )
+  {
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_35()
+  new
+  setl cindent ts=4 sw=4
+  setl cino&
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if(x==y)
+               if(y==z)
+                       foo=1;
+               else { bar=1;
+                       baz=2;
+               }
+       printf("Foo!\n");
+  }
+
+  void func1(void)
+  {
+       char* tab[] = {"foo", "bar",
+               "baz", "quux",
+                       "this line used", "to be indented incorrectly"};
+       foo();
+  }
+
+  void func2(void)
+  {
+       int tab[] =
+       {1, 2,
+               3, 4,
+               5, 6};
+
+               printf("This line used to be indented incorrectly.\n");
+  }
+
+  int foo[]
+  #ifdef BAR
+
+  = { 1, 2, 3,
+       4, 5, 6 }
+
+  #endif
+  ;
+       int baz;
+
+  void func3(void)
+  {
+       int tab[] = {
+       1, 2,
+       3, 4,
+       5, 6};
+
+  printf("Don't you dare indent this line incorrectly!\n");
+  }
+
+  void
+  func4(a, b,
+               c)
+  int a;
+  int b;
+  int c;
+  {
+  }
+
+  void
+  func5(
+               int a,
+               int b)
+  {
+  }
+
+  void
+  func6(
+               int a)
+  {
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=7][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if(x==y)
+               if(y==z)
+                       foo=1;
+               else { bar=1;
+                       baz=2;
+               }
+       printf("Foo!\n");
+  }
+
+  void func1(void)
+  {
+       char* tab[] = {"foo", "bar",
+               "baz", "quux",
+               "this line used", "to be indented incorrectly"};
+       foo();
+  }
+
+  void func2(void)
+  {
+       int tab[] =
+       {1, 2,
+               3, 4,
+               5, 6};
+
+       printf("This line used to be indented incorrectly.\n");
+  }
+
+  int foo[]
+  #ifdef BAR
+
+  = { 1, 2, 3,
+       4, 5, 6 }
+
+  #endif
+       ;
+  int baz;
+
+  void func3(void)
+  {
+       int tab[] = {
+               1, 2,
+               3, 4,
+               5, 6};
+
+       printf("Don't you dare indent this line incorrectly!\n");
+  }
+
+       void
+  func4(a, b,
+               c)
+       int a;
+       int b;
+       int c;
+  {
+  }
+
+       void
+  func5(
+               int a,
+               int b)
+  {
+  }
+
+       void
+  func6(
+               int a)
+  {
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_36()
+  new
+  setl cindent ts=4 sw=4
+  setl cino&
+  setl cino+=l1
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       int tab[] =
+       {
+               1, 2, 3,
+               4, 5, 6};
+
+       printf("Indent this line correctly!\n");
+
+       switch (foo)
+       {
+               case bar:
+                       printf("bar");
+                       break;
+               case baz: {
+                       printf("baz");
+                       break;
+               }
+               case quux:
+  printf("But don't break the indentation of this instruction\n");
+  break;
+       }
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       int tab[] =
+       {
+               1, 2, 3,
+               4, 5, 6};
+
+       printf("Indent this line correctly!\n");
+
+       switch (foo)
+       {
+               case bar:
+                       printf("bar");
+                       break;
+               case baz: {
+                       printf("baz");
+                       break;
+               }
+               case quux:
+                       printf("But don't break the indentation of this instruction\n");
+                       break;
+       }
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_37()
+  new
+  setl cindent ts=4 sw=4
+  setl cino&
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       cout << "a"
+       << "b"
+       << ") :"
+       << "c";
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       cout << "a"
+               << "b"
+               << ") :"
+               << "c";
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_38()
+  new
+  setl cindent ts=4 sw=4
+  setl com=s1:/*,m:*,ex:*/
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       /*
+        * This is a comment.
+        */
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]3jofoo();
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       /*
+        * This is a comment.
+        */
+       foo();
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_39()
+  new
+  setl cindent ts=4 sw=4
+  setl cino&
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       for (int i = 0; i < 10; ++i)
+               if (i & 1) {
+                       foo(1);
+               } else
+                       foo(0);
+  baz();
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       for (int i = 0; i < 10; ++i)
+               if (i & 1) {
+                       foo(1);
+               } else
+                       foo(0);
+       baz();
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_40()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2s,(0
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+
+       if (   c1
+       && (      c2
+       || c3))
+       foo;
+       func( c1
+       && (     c2
+       || c3))
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                        && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+
+       if (   c1
+                       && (      c2
+                                         || c3))
+               foo;
+       func( c1
+                 && (     c2
+                                  || c3))
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_41()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2s,(s
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+
+       if (   c1
+       && (      c2
+       || c3))
+       foo;
+       func(   c1
+       && (      c2
+       || c3))
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+
+       if (   c1
+                       && (      c2
+                               || c3))
+               foo;
+       func(   c1
+               && (      c2
+                       || c3))
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_42()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2s,(s,U1
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+
+       c = c1 &&
+       (
+       c2 ||
+       c3
+       ) && c4;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                               || c3))
+               printf("foo\n");
+
+       c = c1 &&
+               (
+                       c2 ||
+                       c3
+               ) && c4;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_43()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2s,(0,W4
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+
+       if (   c1
+       && (   c2
+       || c3))
+       foo;
+
+       a_long_line(
+       argument,
+       argument);
+       a_short_line(argument,
+       argument);
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                        && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                               || c3))
+               printf("foo\n");
+
+       if (   c1
+                       && (   c2
+                                  || c3))
+               foo;
+
+       a_long_line(
+               argument,
+               argument);
+       a_short_line(argument,
+                                argument);
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_44()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2s,u2
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                       && argument2);
+
+       if (c1 && (c2 ||
+                         c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                         || c3))
+               printf("foo\n");
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_45()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2s,(0,w1
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+
+       if (   c1
+       && (      c2
+       || c3))
+       foo;
+       func(   c1
+       && (      c2
+       || c3))
+       foo;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                        && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                               || c3))
+               printf("foo\n");
+
+       if (   c1
+                       && (      c2
+                               || c3))
+               foo;
+       func(   c1
+                && (      c2
+                        || c3))
+               foo;
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_46()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=k2,(s
+
+  let code =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+         && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                 c3))
+               foo;
+       if (c1 &&
+         (c2 || c3))
+       {
+       }
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  normal ]]=][
+
+  let expected =<< trim [CODE]
+  void func(void)
+  {
+       if (condition1
+         && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                 c3))
+               foo;
+       if (c1 &&
+         (c2 || c3))
+       {
+       }
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_47()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=N-s
+
+  let code =<< trim [CODE]
+  NAMESPACESTART
+  /* valid namespaces with normal indent */
+  namespace
+  {
+     {
+       111111111111;
+  }
+  }
+  namespace /* test */
+  {
+    11111111111111111;
+  }
+  namespace // test
+  {
+    111111111111111111;
+  }
+  namespace
+  {
+    111111111111111111;
+  }
+  namespace test
+  {
+    111111111111111111;
+  }
+  namespace test::cpp17
+  {
+    111111111111111111;
+  }
+  namespace ::incorrectcpp17
+  {
+    111111111111111111;
+  }
+  namespace test::incorrectcpp17::
+  {
+    111111111111111111;
+  }
+  namespace test:incorrectcpp17
+  {
+    111111111111111111;
+  }
+  namespace test:::incorrectcpp17
+  {
+    111111111111111111;
+  }
+  namespace{
+    111111111111111111;
+  }
+  namespace test{
+    111111111111111111;
+  }
+  namespace {
+    111111111111111111;
+  }
+  namespace test {
+    111111111111111111;
+  namespace test2 {
+    22222222222222222;
+  }
+  }
+
+  /* invalid namespaces use block indent */
+  namespace test test2 {
+    111111111111111111111;
+  }
+  namespace11111111111 {
+    111111111111;
+  }
+  namespace() {
+    1111111111111;
+  }
+  namespace()
+  {
+    111111111111111111;
+  }
+  namespace test test2
+  {
+    1111111111111111111;
+  }
+  namespace111111111
+  {
+    111111111111111111;
+  }
+  NAMESPACEEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^NAMESPACESTART')
+  exe "normal =/^NAMESPACEEND\n"
+
+  let expected =<< trim [CODE]
+  NAMESPACESTART
+  /* valid namespaces with normal indent */
+  namespace
+  {
+  {
+       111111111111;
+  }
+  }
+  namespace /* test */
+  {
+  11111111111111111;
+  }
+  namespace // test
+  {
+  111111111111111111;
+  }
+  namespace
+  {
+  111111111111111111;
+  }
+  namespace test
+  {
+  111111111111111111;
+  }
+  namespace test::cpp17
+  {
+  111111111111111111;
+  }
+  namespace ::incorrectcpp17
+  {
+       111111111111111111;
+  }
+  namespace test::incorrectcpp17::
+  {
+       111111111111111111;
+  }
+  namespace test:incorrectcpp17
+  {
+       111111111111111111;
+  }
+  namespace test:::incorrectcpp17
+  {
+       111111111111111111;
+  }
+  namespace{
+  111111111111111111;
+  }
+  namespace test{
+  111111111111111111;
+  }
+  namespace {
+  111111111111111111;
+  }
+  namespace test {
+  111111111111111111;
+  namespace test2 {
+  22222222222222222;
+  }
+  }
+
+  /* invalid namespaces use block indent */
+  namespace test test2 {
+       111111111111111111111;
+  }
+  namespace11111111111 {
+       111111111111;
+  }
+  namespace() {
+       1111111111111;
+  }
+  namespace()
+  {
+       111111111111111111;
+  }
+  namespace test test2
+  {
+       1111111111111111111;
+  }
+  namespace111111111
+  {
+       111111111111111111;
+  }
+  NAMESPACEEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_48()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1
+
+  let code =<< trim [CODE]
+  JSSTART
+  var bar = {
+  foo: {
+  that: this,
+  some: ok,
+  },
+  "bar":{
+  a : 2,
+  b: "123abc",
+  x: 4,
+  "y": 5
+  }
+  }
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  var bar = {
+       foo: {
+               that: this,
+               some: ok,
+       },
+       "bar":{
+               a : 2,
+               b: "123abc",
+               x: 4,
+               "y": 5
+       }
+  }
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_49()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1
+
+  let code =<< trim [CODE]
+  JSSTART
+  var foo = [
+  1,
+  2,
+  3
+  ];
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  var foo = [
+       1,
+       2,
+       3
+  ];
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_50()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1
+
+  let code =<< trim [CODE]
+  JSSTART
+  function bar() {
+  var foo = [
+  1,
+  2,
+  3
+  ];
+  }
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  function bar() {
+       var foo = [
+               1,
+               2,
+               3
+       ];
+  }
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_51()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1
+
+  let code =<< trim [CODE]
+  JSSTART
+  (function($){
+
+  if (cond &&
+  cond) {
+  stmt;
+  }
+  window.something.left =
+  (width - 50 + offset) + "px";
+  var class_name='myclass';
+
+  function private_method() {
+  }
+
+  var public_method={
+  method: function(options,args){
+  private_method();
+  }
+  }
+
+  function init(options) {
+
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+  bar: 2,
+  foobar: [
+  1,
+  2,
+  3
+  ],
+  callback: function(){
+  return true;
+  }
+  }, options||{}));
+  }
+
+  $.fn[class_name]=function() {
+
+  var _arguments=arguments;
+  return this.each(function(){
+
+  var options=$(this).data(class_name+'_public');
+  if (!options) {
+  init.apply(this,_arguments);
+
+  } else {
+  var method=public_method[_arguments[0]];
+
+  if (typeof(method)!='function') {
+  console.log(class_name+' has no method "'+_arguments[0]+'"');
+  return false;
+  }
+  _arguments[0]=options;
+  method.apply(this,_arguments);
+  }
+  });
+  }
+
+  })(jQuery);
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  (function($){
+
+       if (cond &&
+                       cond) {
+               stmt;
+       }
+       window.something.left =
+               (width - 50 + offset) + "px";
+       var class_name='myclass';
+
+       function private_method() {
+       }
+
+       var public_method={
+               method: function(options,args){
+                       private_method();
+               }
+       }
+
+       function init(options) {
+
+               $(this).data(class_name+'_public',$.extend({},{
+                       foo: 'bar',
+                       bar: 2,
+                       foobar: [
+                               1,
+                               2,
+                               3
+                       ],
+                       callback: function(){
+                               return true;
+                       }
+               }, options||{}));
+       }
+
+       $.fn[class_name]=function() {
+
+               var _arguments=arguments;
+               return this.each(function(){
+
+                       var options=$(this).data(class_name+'_public');
+                       if (!options) {
+                               init.apply(this,_arguments);
+
+                       } else {
+                               var method=public_method[_arguments[0]];
+
+                               if (typeof(method)!='function') {
+                                       console.log(class_name+' has no method "'+_arguments[0]+'"');
+                                       return false;
+                               }
+                               _arguments[0]=options;
+                               method.apply(this,_arguments);
+                       }
+               });
+       }
+
+  })(jQuery);
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_52()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1
+
+  let code =<< trim [CODE]
+  JSSTART
+  function init(options) {
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+  bar: 2,
+  foobar: [
+  1,
+  2,
+  3
+  ],
+  callback: function(){
+  return true;
+  }
+  }, options||{}));
+  }
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  function init(options) {
+       $(this).data(class_name+'_public',$.extend({},{
+               foo: 'bar',
+               bar: 2,
+               foobar: [
+                       1,
+                       2,
+                       3
+               ],
+               callback: function(){
+                       return true;
+               }
+       }, options||{}));
+  }
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_53()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1
+
+  let code =<< trim [CODE]
+  JSSTART
+  (function($){
+  function init(options) {
+  $(this).data(class_name+'_public',$.extend({},{
+  foo: 'bar',
+  bar: 2,
+  foobar: [
+  1,
+  2,
+  3
+  ],
+  callback: function(){
+  return true;
+  }
+  }, options||{}));
+  }
+  })(jQuery);
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  (function($){
+       function init(options) {
+               $(this).data(class_name+'_public',$.extend({},{
+                       foo: 'bar',
+                       bar: 2,
+                       foobar: [
+                               1,
+                               2,
+                               3
+                       ],
+                       callback: function(){
+                               return true;
+                       }
+               }, options||{}));
+       }
+  })(jQuery);
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_54()
+  new
+  setl cindent ts=4 sw=4
+  setl cino=j1,J1,+2
+
+  let code =<< trim [CODE]
+  JSSTART
+  // Results of JavaScript indent
+  // 1
+  (function(){
+  var a = [
+  'a',
+  'b',
+  'c',
+  'd',
+  'e',
+  'f',
+  'g',
+  'h',
+  'i'
+  ];
+  }())
+
+  // 2
+  (function(){
+  var a = [
+  0 +
+  5 *
+  9 *
+  'a',
+  'b',
+  0 +
+  5 *
+  9 *
+  'c',
+  'd',
+  'e',
+  'f',
+  'g',
+  'h',
+  'i'
+  ];
+  }())
+
+  // 3
+  (function(){
+  var a = [
+  0 +
+  // comment 1
+  5 *
+  /* comment 2 */
+  9 *
+  'a',
+  'b',
+  0 +
+  5 *
+  9 *
+  'c',
+  'd',
+  'e',
+  'f',
+  'g',
+  'h',
+  'i'
+  ];
+  }())
+
+  // 4
+  {
+  var a = [
+  0,
+  1
+  ];
+  var b;
+  var c;
+  }
+
+  // 5
+  {
+  var a = [
+  [
+  0
+  ],
+  2,
+  3
+  ];
+  }
+
+  // 6
+  {
+  var a = [
+  [
+  0,
+  1
+  ],
+  2,
+  3
+  ];
+  }
+
+  // 7
+  {
+  var a = [
+  // [
+  0,
+  // 1
+  // ],
+  2,
+  3
+  ];
+  }
+
+  // 8
+  var x = [
+  (function(){
+  var a,
+  b,
+  c,
+  d,
+  e,
+  f,
+  g,
+  h,
+  i;
+  })
+  ];
+
+  // 9
+  var a = [
+  0 +
+  5 *
+  9 *
+  'a',
+  'b',
+  0 +
+  5 *
+  9 *
+  'c',
+  'd',
+  'e',
+  'f',
+  'g',
+  'h',
+  'i'
+  ];
+
+  // 10
+  var a,
+  b,
+  c,
+  d,
+  e,
+  f,
+  g,
+  h,
+  i;
+  JSEND
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('^JSSTART')
+  exe "normal =/^JSEND\n"
+
+  let expected =<< trim [CODE]
+  JSSTART
+  // Results of JavaScript indent
+  // 1
+  (function(){
+       var a = [
+         'a',
+         'b',
+         'c',
+         'd',
+         'e',
+         'f',
+         'g',
+         'h',
+         'i'
+       ];
+  }())
+
+  // 2
+  (function(){
+       var a = [
+         0 +
+               5 *
+               9 *
+               'a',
+         'b',
+         0 +
+               5 *
+               9 *
+               'c',
+         'd',
+         'e',
+         'f',
+         'g',
+         'h',
+         'i'
+       ];
+  }())
+
+  // 3
+  (function(){
+       var a = [
+         0 +
+               // comment 1
+               5 *
+               /* comment 2 */
+               9 *
+               'a',
+         'b',
+         0 +
+               5 *
+               9 *
+               'c',
+         'd',
+         'e',
+         'f',
+         'g',
+         'h',
+         'i'
+       ];
+  }())
+
+  // 4
+  {
+       var a = [
+         0,
+         1
+       ];
+       var b;
+       var c;
+  }
+
+  // 5
+  {
+       var a = [
+         [
+               0
+         ],
+         2,
+         3
+       ];
+  }
+
+  // 6
+  {
+       var a = [
+         [
+               0,
+               1
+         ],
+         2,
+         3
+       ];
+  }
+
+  // 7
+  {
+       var a = [
+         // [
+         0,
+         // 1
+         // ],
+         2,
+         3
+       ];
+  }
+
+  // 8
+  var x = [
+    (function(){
+         var a,
+         b,
+         c,
+         d,
+         e,
+         f,
+         g,
+         h,
+         i;
+    })
+  ];
+
+  // 9
+  var a = [
+    0 +
+    5 *
+    9 *
+    'a',
+    'b',
+    0 +
+    5 *
+    9 *
+    'c',
+    'd',
+    'e',
+    'f',
+    'g',
+    'h',
+    'i'
+  ];
+
+  // 10
+  var a,
+       b,
+       c,
+       d,
+       e,
+       f,
+       g,
+       h,
+       i;
+  JSEND
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_55()
+  new
+  setl cindent ts=4 sw=4
+  setl cino&
+
+  let code =<< trim [CODE]
+  /* start of define */
+  {
+  }
+  #define AAA \
+  BBB\
+  CCC
+
+  #define CNT \
+  1 + \
+  2 + \
+  4
+  /* end of define */
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('start of define')
+  exe "normal =/end of define\n"
+
+  let expected =<< trim [CODE]
+  /* start of define */
+  {
+  }
+  #define AAA \
+       BBB\
+       CCC
+
+  #define CNT \
+       1 + \
+       2 + \
+       4
+  /* end of define */
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
+func Test_cindent_56()
+  new
+  setl cindent ts=4 sw=4
+  setl cino&
+
+  let code =<< trim [CODE]
+  {
+       a = second/*bug*/*line;
+  }
+  [CODE]
+
+  call append(0, code)
+  normal gg
+  call search('a = second')
+  normal ox
+
+  let expected =<< trim [CODE]
+  {
+       a = second/*bug*/*line;
+       x
+  }
+
+  [CODE]
+
+  call assert_equal(expected, getline(1, '$'))
+  enew! | close
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index b3f7ee95042583275a29aaa840aa809107e24371..03ee6327c6c30a898286262b3f888a12c82a017c 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1434,
 /**/
     1433,
 /**/