public static void TwoDocumentsOneErrorFixTouchingBothDocuments() { var before1 = @" namespace N { class C1 { public int ↓WrongName { get; } } }"; var before2 = @" namespace N { class C2 { public C2(C1 c1) { var x = c1.WrongName; } } }"; var after1 = @" namespace N { class C1 { public int Value { get; } } }"; var after2 = @" namespace N { class C2 { public C2(C1 c1) { var x = c1.Value; } } }"; var analyzer = new PropertyMustBeNamedValueAnalyzer(); var fix = new RenameToValueFix(); RoslynAssert.CodeFix(analyzer, fix, new[] { before1, before2 }, new[] { after1, after2 }); RoslynAssert.CodeFix(analyzer, fix, new[] { before2, before1 }, new[] { after1, after2 }); RoslynAssert.CodeFix(analyzer, fix, new[] { before1, before2 }, new[] { after2, after1 }); RoslynAssert.CodeFix(analyzer, fix, new[] { before2, before1 }, new[] { after2, after1 }); RoslynAssert.CodeFix(analyzer, fix, new[] { before1, before2 }, new[] { after1, after2 }, fixTitle: "Rename to: Value"); RoslynAssert.CodeFix(analyzer, fix, new[] { before2, before1 }, new[] { after1, after2 }, fixTitle: "Rename to: Value"); RoslynAssert.CodeFix(analyzer, fix, new[] { before1, before2 }, new[] { after2, after1 }, fixTitle: "Rename to: Value"); RoslynAssert.CodeFix(analyzer, fix, new[] { before2, before1 }, new[] { after2, after1 }, fixTitle: "Rename to: Value"); }
public static void TwoDocumentsOneErrorFixTouchingBothDocumentsWhenFixedCodeDoesNotMatchExpected() { var before = @" namespace N { class C1 { public int ↓WrongName { get; } } }"; var code2 = @" namespace N { class C2 { public C2(C1 c1) { var x = c1.WrongName; } } }"; var after1 = @" namespace N { class C1 { public int Value { get; } } }"; var after2 = @" namespace N { class C2 { public C2(C1 c1) { var x = c1.Value; } } }"; var analyzer = new PropertyMustBeNamedValueAnalyzer(); var fix = new RenameToValueFix(); var expected = "Mismatch on line 6 of file C1.cs.\r\n" + "Expected: public int ↓WrongName { get; }\r\n" + "Actual: public int Value { get; }\r\n" + " ^\r\n" + "Expected:\r\n" + "\r\n" + "namespace N\r\n" + "{\r\n" + " class C1\r\n" + " {\r\n" + " public int ↓WrongName { get; }\r\n" + " }\r\n" + "}\r\n" + "Actual:\r\n" + "\r\n" + "namespace N\r\n" + "{\r\n" + " class C1\r\n" + " {\r\n" + " public int Value { get; }\r\n" + " }\r\n" + "}\r\n"; var exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { before, after2 })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { before, after2 })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { after2, before })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { after2, before })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { before, after2 }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { before, after2 }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { after2, before }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { after2, before }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); expected = "Mismatch on line 8 of file C2.cs.\r\n" + "Expected: var x = c1.WrongName;\r\n" + "Actual: var x = c1.Value;\r\n" + " ^\r\n" + "Expected:\r\n" + "\r\n" + "namespace N\r\n" + "{\r\n" + " class C2\r\n" + " {\r\n" + " public C2(C1 c1)\r\n" + " {\r\n" + " var x = c1.WrongName;\r\n" + " }\r\n" + " }\r\n" + "}\r\n" + "Actual:\r\n" + "\r\n" + "namespace N\r\n" + "{\r\n" + " class C2\r\n" + " {\r\n" + " public C2(C1 c1)\r\n" + " {\r\n" + " var x = c1.Value;\r\n" + " }\r\n" + " }\r\n" + "}\r\n"; exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { after1, code2 })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { after1, code2 })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { code2, after1 })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { code2, after1 })); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { after1, code2 }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { after1, code2 }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { before, code2 }, new[] { code2, after1 }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); exception = Assert.Throws <AssertException>(() => RoslynAssert.CodeFix(analyzer, fix, new[] { code2, before }, new[] { code2, after1 }, fixTitle: "Rename to: Value")); CodeAssert.AreEqual(expected, exception.Message); }