|
@@ -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
|