Error recovery part 2

Summary: Adds recovery for structural errors in clang-format.

Reviewers: djasper

Reviewed By: djasper

CC: cfe-commits, silvas

Differential Revision: http://llvm-reviews.chandlerc.com/D164

llvm-svn: 169286
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 5c1b603..745ecec 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -381,5 +381,23 @@
                "};");
 }
 
+TEST_F(FormatTest, IncorrectCodeErrorDetection) {
+  EXPECT_EQ("{\n{\n}\n", format("{\n{\n}\n"));
+  EXPECT_EQ("{\n  {\n}\n", format("{\n  {\n}\n"));
+  EXPECT_EQ("{\n  {\n  }\n", format("{\n  {\n  }\n"));
+
+  FormatStyle Style = getLLVMStyle();
+  Style.ColumnLimit = 10;
+  EXPECT_EQ("{\n"
+            "    {\n"
+            " breakme(\n"
+            "     qwe);\n"
+            "}\n", format("{\n"
+                          "    {\n"
+                          " breakme(qwe);\n"
+                          "}\n", Style));
+
+}
+
 }  // end namespace tooling
 }  // end namespace clang