summaryrefslogtreecommitdiffstats
path: root/clang/unittests/Format/FormatTestCSharp.cpp
diff options
context:
space:
mode:
authorPaul Hoad <mydeveloperday@gmail.com>2019-10-04 07:56:49 +0000
committerPaul Hoad <mydeveloperday@gmail.com>2019-10-04 07:56:49 +0000
commita2f963bb61e3e83287ea9eecd39198051b0c1cef (patch)
tree6cd41cf136607d9d12d7eb6f1fa1147970da2bc0 /clang/unittests/Format/FormatTestCSharp.cpp
parent03b216d85472c45d3359e9e1593f5ea49f2633f7 (diff)
downloadbcm5719-llvm-a2f963bb61e3e83287ea9eecd39198051b0c1cef.tar.gz
bcm5719-llvm-a2f963bb61e3e83287ea9eecd39198051b0c1cef.zip
[clang-format] [PR43333] Fix C# breaking before function name when using Attributes
Summary: This is a fix for https://bugs.llvm.org/show_bug.cgi?id=43333 This comes with 3 main parts - C# attributes cause function names on a new line even when AlwaysBreakAfterReturnType is set to None - Add AlwaysBreakAfterReturnType to None by default in the Microsoft style, - C# unit tests are not using Microsoft style (which we created to define the default C# style to match a vanilla C# project). Reviewers: owenpan, klimek, russellmcc, mitchell-stellar Reviewed By: mitchell-stellar Subscribers: cfe-commits Tags: #clang-tools-extra, #clang, #clang-format Differential Revision: https://reviews.llvm.org/D67629 llvm-svn: 373707
Diffstat (limited to 'clang/unittests/Format/FormatTestCSharp.cpp')
-rw-r--r--clang/unittests/Format/FormatTestCSharp.cpp171
1 files changed, 138 insertions, 33 deletions
diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp
index 7fda9566dc8..031de143389 100644
--- a/clang/unittests/Format/FormatTestCSharp.cpp
+++ b/clang/unittests/Format/FormatTestCSharp.cpp
@@ -32,48 +32,76 @@ protected:
static std::string
format(llvm::StringRef Code,
- const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_CSharp)) {
+ const FormatStyle &Style = getMicrosoftStyle(FormatStyle::LK_CSharp)) {
return format(Code, 0, Code.size(), Style);
}
static FormatStyle getStyleWithColumns(unsigned ColumnLimit) {
- FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp);
+ FormatStyle Style = getMicrosoftStyle(FormatStyle::LK_CSharp);
Style.ColumnLimit = ColumnLimit;
return Style;
}
static void verifyFormat(
llvm::StringRef Code,
- const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_CSharp)) {
+ const FormatStyle &Style = getMicrosoftStyle(FormatStyle::LK_CSharp)) {
EXPECT_EQ(Code.str(), format(Code, Style)) << "Expected code is not stable";
EXPECT_EQ(Code.str(), format(test::messUp(Code), Style));
}
};
TEST_F(FormatTestCSharp, CSharpClass) {
- verifyFormat("public class SomeClass {\n"
- " void f() {}\n"
- " int g() { return 0; }\n"
- " void h() {\n"
- " while (true) f();\n"
- " for (;;) f();\n"
- " if (true) f();\n"
- " }\n"
+ verifyFormat("public class SomeClass\n"
+ "{\n"
+ " void f()\n"
+ " {\n"
+ " }\n"
+ " int g()\n"
+ " {\n"
+ " return 0;\n"
+ " }\n"
+ " void h()\n"
+ " {\n"
+ " while (true)\n"
+ " f();\n"
+ " for (;;)\n"
+ " f();\n"
+ " if (true)\n"
+ " f();\n"
+ " }\n"
"}");
}
TEST_F(FormatTestCSharp, AccessModifiers) {
- verifyFormat("public String toString() {}");
- verifyFormat("private String toString() {}");
- verifyFormat("protected String toString() {}");
- verifyFormat("internal String toString() {}");
+ verifyFormat("public String toString()\n"
+ "{\n"
+ "}");
+ verifyFormat("private String toString()\n"
+ "{\n"
+ "}");
+ verifyFormat("protected String toString()\n"
+ "{\n"
+ "}");
+ verifyFormat("internal String toString()\n"
+ "{\n"
+ "}");
- verifyFormat("public override String toString() {}");
- verifyFormat("private override String toString() {}");
- verifyFormat("protected override String toString() {}");
- verifyFormat("internal override String toString() {}");
+ verifyFormat("public override String toString()\n"
+ "{\n"
+ "}");
+ verifyFormat("private override String toString()\n"
+ "{\n"
+ "}");
+ verifyFormat("protected override String toString()\n"
+ "{\n"
+ "}");
+ verifyFormat("internal override String toString()\n"
+ "{\n"
+ "}");
- verifyFormat("internal static String toString() {}");
+ verifyFormat("internal static String toString()\n"
+ "{\n"
+ "}");
}
TEST_F(FormatTestCSharp, NoStringLiteralBreaks) {
@@ -124,45 +152,70 @@ TEST_F(FormatTestCSharp, CSharpNullConditional) {
verifyFormat("switch(args?.Length)");
- verifyFormat("public static void Main(string[] args) { string dirPath "
- "= args?[0]; }");
+ verifyFormat("public static void Main(string[] args)\n"
+ "{\n"
+ " string dirPath = args?[0];\n"
+ "}");
}
TEST_F(FormatTestCSharp, Attributes) {
verifyFormat("[STAThread]\n"
- "static void\n"
- "Main(string[] args) {}");
+ "static void Main(string[] args)\n"
+ "{\n"
+ "}");
verifyFormat("[TestMethod]\n"
- "private class Test {}");
+ "private class Test\n"
+ "{\n"
+ "}");
verifyFormat("[TestMethod]\n"
- "protected class Test {}");
+ "protected class Test\n"
+ "{\n"
+ "}");
verifyFormat("[TestMethod]\n"
- "internal class Test {}");
+ "internal class Test\n"
+ "{\n"
+ "}");
verifyFormat("[TestMethod]\n"
- "class Test {}");
+ "class Test\n"
+ "{\n"
+ "}");
verifyFormat("[TestMethod]\n"
"[DeploymentItem(\"Test.txt\")]\n"
- "public class Test {}");
+ "public class Test\n"
+ "{\n"
+ "}");
verifyFormat("[System.AttributeUsage(System.AttributeTargets.Method)]\n"
"[System.Runtime.InteropServices.ComVisible(true)]\n"
- "public sealed class STAThreadAttribute : Attribute {}");
+ "public sealed class STAThreadAttribute : Attribute\n"
+ "{\n"
+ "}");
verifyFormat("[Verb(\"start\", HelpText = \"Starts the server listening on "
"provided port\")]\n"
- "class Test {}");
+ "class Test\n"
+ "{\n"
+ "}");
verifyFormat("[TestMethod]\n"
- "public string Host {\n set;\n get;\n}");
+ "public string Host\n"
+ "{\n"
+ " set;\n"
+ " get;\n"
+ "}");
verifyFormat("[TestMethod(\"start\", HelpText = \"Starts the server "
"listening on provided host\")]\n"
- "public string Host {\n set;\n get;\n}");
+ "public string Host\n"
+ "{\n"
+ " set;\n"
+ " get;\n"
+ "}");
}
TEST_F(FormatTestCSharp, CSharpUsing) {
@@ -195,5 +248,57 @@ TEST_F(FormatTestCSharp, CSharpNullCoalescing) {
verifyFormat("return _name ?? \"DEF\";");
}
+TEST_F(FormatTestCSharp, AttributesIndentation) {
+ FormatStyle Style = getMicrosoftStyle(FormatStyle::LK_CSharp);
+ Style.AlwaysBreakAfterReturnType = FormatStyle::RTBS_None;
+
+ verifyFormat("[STAThread]\n"
+ "static void Main(string[] args)\n"
+ "{\n"
+ "}",
+ Style);
+
+ verifyFormat("[STAThread]\n"
+ "void "
+ "veryLooooooooooooooongFunctionName(string[] args)\n"
+ "{\n"
+ "}",
+ Style);
+
+ verifyFormat("[STAThread]\n"
+ "veryLoooooooooooooooooooongReturnType "
+ "veryLooooooooooooooongFunctionName(string[] args)\n"
+ "{\n"
+ "}",
+ Style);
+
+ verifyFormat("[SuppressMessage(\"A\", \"B\", Justification = \"C\")]\n"
+ "public override X Y()\n"
+ "{\n"
+ "}\n",
+ Style);
+
+ verifyFormat("[SuppressMessage]\n"
+ "public X Y()\n"
+ "{\n"
+ "}\n",
+ Style);
+
+ verifyFormat("[SuppressMessage]\n"
+ "public override X Y()\n"
+ "{\n"
+ "}\n",
+ Style);
+
+ verifyFormat("public A(B b) : base(b)\n"
+ "{\n"
+ " [SuppressMessage]\n"
+ " public override X Y()\n"
+ " {\n"
+ " }\n"
+ "}\n",
+ Style);
+}
+
} // namespace format
} // end namespace clang
OpenPOWER on IntegriCloud