aboutsummaryrefslogtreecommitdiff
path: root/unittests/Format/FormatTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/Format/FormatTest.cpp')
-rw-r--r--unittests/Format/FormatTest.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index f8a81b5982..e9fa666f90 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -1290,8 +1290,37 @@ TEST_F(FormatTest, PullTrivialFunctionDefinitionsIntoSingleLine) {
"}");
}
-TEST_F(FormatTest, BracedInitListWithElaboratedTypeSpecifier) {
+TEST_F(FormatTest, UnderstandContextOfRecordTypeKeywords) {
+ // Elaborate type variable declarations.
verifyFormat("struct foo a = { bar };\nint n;");
+ verifyFormat("class foo a = { bar };\nint n;");
+ verifyFormat("union foo a = { bar };\nint n;");
+
+ // Elaborate types inside function definitions.
+ verifyFormat("struct foo f() {}\nint n;");
+ verifyFormat("class foo f() {}\nint n;");
+ verifyFormat("union foo f() {}\nint n;");
+
+ // Templates.
+ verifyFormat("template <class X> void f() {}\nint n;");
+ verifyFormat("template <struct X> void f() {}\nint n;");
+ verifyFormat("template <union X> void f() {}\nint n;");
+
+ // Actual definitions...
+ verifyFormat("struct {} n;");
+ verifyFormat("template <template <class T, class Y>, class Z > class X {} n;");
+ verifyFormat("union Z {\n int n;\n} x;");
+ verifyFormat("class MACRO Z {} n;");
+ verifyFormat("class MACRO(X) Z {} n;");
+ verifyFormat("class __attribute__(X) Z {} n;");
+ verifyFormat("class __declspec(X) Z {} n;");
+
+ // Elaborate types where incorrectly parsing the structural element would
+ // break the indent.
+ verifyFormat("if (true)\n"
+ " class X x;\n"
+ "else\n"
+ " f();\n");
}
// FIXME: This breaks the order of the unwrapped lines: